Reimubot×Apricot

Marisabot×Apricotに引き続き、8bitさんが作られたTwitter上にいるReimubotの発言をApricot上の霊夢に喋らせるよう連携させるXSLファイルを作ってみました。

ちなみにApricotでは、キャラクターのXMLファイルをXSL(Extensible Stylesheet Language)の仕組みを使って拡張することが出来ます。今回も、その方法を使ってWeb上のXMLファイルをインポートしてキャラクターに喋らせてみました。


デスクトップマスコット「Apricot」はこちら

アプリコタン.NET (http://www.apricotan.net/)


Reimubotの発言をApricot上の霊夢に喋らせるには、

  1. Apricot.exeがあるフォルダからCharacters\Reimu\Script.xslを見つける
  2. Script.xslファイルを下記のXSLファイルと置き換える(エンコーディングUTF-8)
  3. Apricotを起動(必要があれば、霊夢にキャラクターを切り替える)
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="/">
    <script>
      <character>
        <xsl:attribute name="name">
          <xsl:value-of select="/script/character/@name" />
        </xsl:attribute>
        <xsl:attribute name="x">
          <xsl:value-of select="/script/character/@x" />
        </xsl:attribute>
        <xsl:attribute name="y">
          <xsl:value-of select="/script/character/@y" />
        </xsl:attribute>
        <xsl:attribute name="width">
          <xsl:value-of select="/script/character/@width" />
        </xsl:attribute>
        <xsl:attribute name="height">
          <xsl:value-of select="/script/character/@height" />
        </xsl:attribute>
        <xsl:attribute name="offset-x">
          <xsl:value-of select="/script/character/@offset-x" />
        </xsl:attribute>
        <xsl:attribute name="offset-y">
          <xsl:value-of select="/script/character/@offset-y" />
        </xsl:attribute>
        <xsl:copy-of select="/script/character/sequence" />
        <xsl:for-each select="document('http://twitter.com/statuses/user_timeline/33187277.xml')/statuses/status/text">
          <sequence name="Activate">
            <message>
              <xsl:value-of select="." />
            </message>
            <call name="Say" />
          </sequence>
        </xsl:for-each>
        <xsl:for-each select="document('http://twitter.com/statuses/user_timeline/7247262.xml')/statuses/status/text">
          <sequence name="Activate">
            <message>
              <xsl:choose>
                <xsl:when test="contains(., '[twicco.jp')">
                  <xsl:value-of select="normalize-space(substring-before(., ' [twicco.jp'))" />
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="." />
                </xsl:otherwise>
              </xsl:choose>
            </message>
            <call name="Say" />
          </sequence>
        </xsl:for-each>
      </character>
    </script>
  </xsl:template>
</xsl:stylesheet>