Twilogのバックアップを使ってツイッターの投稿を丸ごと自分のサイトに表示する

 Twilogのバックアップファイル"767i_bot-230930.xml.gz"を解凍して得られた"767i_bot-230930.xml"の構造は次の通り。

<?xml version="1.0" encoding="UTF-8"?>
<tweets>
<tweet>
<id>1655731020979933184</id>
<time>230509 092652</time>
<text>~</text>
</tweet>
<tweet>
<id>1410361141390241797</id>
<time>210701 071434</time>
<text>~</text>
</tweet>

</tweets>

 「time」の形式が気に入らなければテキストエディタで置換する。(例:検索文字列「<time>(\d{2})(\d{2})(\d{2})\ (\d{2})(\d{2})(\d{2})」、置換文字列「<time>20$1/$2/$3\ $4:$5:$6」)
 このファイルを自分のサイトにアップロードして、ブラウザで開いた時に投稿の一覧表を表示する。
 その前に、上のコードに次のように使うxslファイル"767i_bot.xsl"を指定する。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="767i_bot.xsl"?>
<tweets>

</tweets>

その"767i_bot.xsl"のコードは次の通り。(一部修正あり)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <head>
    <title>@767i_botのtweet</title>
  </head>
  <body>
    <h2><a href="https://twitter.com/767i_bot" target="_blank" title="767i_bot(非公式)@767i_bot / Twitter">@767i_bot</a>のtweet</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th><div>id</div><div>time</div></th>
        <th>tweet</th>
      </tr>
      <xsl:for-each select="tweets/tweet">
      <tr>
        <td><div><a href="https://twitter.com/767i_bot/status/{id}" target="_blank" title=""><xsl:value-of select="id"/></a></div>
        <div style="font-size:120%;font-weight:bold;"><xsl:value-of select="time"/></div></td>
        <td><xsl:copy-of select="text"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

 Twitterのバックアップファイルの中にある"tweets.js"をcsv形式に変換してもらえるサイトがある。ただし、"tweet.js"だった時に作られたものなので、少し"tweets.js"の修正が必要。

 csv形式のファイルから必要な情報だけを取り出してTwilogのバックアップファイルのようなxml形式に変換する際に必要なxsdファイル"tweets.xsd"のコードは次の通り。

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="tweets">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="tweet" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="tweet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="id"/>
        <xsd:element ref="time"/>
        <xsd:element ref="text"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="id" type="xsd:integer"/>
  <xsd:element name="time" type="xsd:dateTime"/>
  <xsd:element name="text" type="xsd:string"/>
</xsd:schema>

 このxsdファイル"tweets.xsd"を使ってcsvからxmlに変換するのはExcelでできる。
 Excelの「開発」タブの「ソース」をクリックして右側に表示されたウインドウ内の「XMLの対応付け」をクリックして、ポップアップウインドウの「追加」をクリックして、xsdファイル"tweets.xsd"を選択。ルートを選択するポップアップで「tweets」を選択して「OK」。「XMLの対応付け」ポップアップに選択したファイルが表示されたら「OK」。右側のウィンドウ内に表示された「id」をシートの「id」列の一番上にドラッグ。その他の「time」「text」も同様。「開発」タブの「エクスポート」をクリック。ファイル名を入力して「エクスポート」。以上。
 ただし、作成されたxmlファイル内の日時「time」の形式が気に入らなければテキストエディタで置換。(例:検索文字列「<time>(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.000」、置換文字列「<time>20$1/$2/$3\ $4:$5:$6」)
 また、csvファイルをExcelで開く前に「id」の数値の前に「'」を追加しておかないと、Excelが15桁よりも位の低い所を「0」に置き換えてしまう。「'」を追加することで数値ではなく文字列と認識されるので「0」にされない。ただし、xmlファイルを作成した後はテキストエディタで「'」を除去しておく。

 そうやって作ったページ。

コメント