2009年11月13日

Twitterのログをローカルに保存して見やすい形で読めるサービスを探す

やりたいこと

  • Twitterのpostは3200件までしか保存されず、それ以上は消えていくのでログを保存したい。
  • 別に「ブログに転載してブロードキャストしたい」というわけではないので、ローカルに保存できれば十分。
  • 読み返すことを考え、なるべく見やすい形で保存できるのが望ましい。プレーンテキストでもいいけど、どちらかといえばHTML + CSSの方が読みやすいし楽なのでよい。

この条件達成が目的。ということで早速Twitterのログバックアップサービスを探してみた。

Twitter Backup

Twitter Backup スクリーンショット

最初に試したのがこれ。複数のアカウントを纏めて管理できたりする *らしい。日本のサービスではないものの、それは大した問題だとは思わなかったのでさっそく試してみた。が、なぜか登録時点で上手くいかなかった。

TwitterのOAuthで認証→登録(メールアドレスなど)という作業を行うのだが、OAuth認証までは成功するがその先で入力項目を埋めて進もうとしてもエラーが出てどうにもならない。(そもそも画面に表示されてない入力項目に対しての空欄エラーが出るので、どうしようもなかった。)何度か試しても解決するそぶりがまったくなかったので、Twitter側のOAuth認証を取り消して別のサービスを探すことにした。結局何が問題だったのかは不明。

このサービスに対する感想はないというか、そもそも試すことすらできなかったので評価以前の問題。

twtr2src

twtr2src スクリーンショット

次に試したのがこれ。まず良かったのはTwitter Backupと違って登録しなくてもお試し使用できる点。操作はユーザ名を入れて「タイムラインを表示」をクリックするだけ。これのおかげで、どのようなサービスでどんなフォーマットで出力されるかすぐにわかるのが嬉しい。

まずは未登録で試し、その後登録して使用してみたが、両方とも何の問題もなく利用することができた。登録自体は先ほどのTwitter Backupと同じように、OAuthで認証するタイプ。登録したあとに気が付いたが、このサービス自体はサーバ内にTwitterのログをバックアップするというものではなかったので、「外部の他のサービスとの連携を橋渡しするツール」と呼んだ方が正しいように思えた。

未登録の場合は最大200件(恐らく1回に取得できるAPI制限の限界)までのログを一括、あるいは日付ごとに「HTML」「プレーンテキスト」「はてな記法」で取得できる。登録作業した場合は、任意のメールアドレスを設定して毎日のログをメールで送信する機能が使用可能。はてなダイアリーなどのメールで投稿できるブログサービスを使えば、Twitterのログを毎日バックアップしつつ、ブログなどでブロードキャストできるということになる。ただ手動で投稿するなら、特に登録作業は必要ないように感じた。

メールでのバックアップや自動ブログ投稿は試していないが、「全体的に動作も軽いしフォーマットも選べるので、サービス全体としてはかなり優れているのでは」という感想を持った。ただ自分がやりたかったことは「今までのすべてのログをバックアップする」なので、200件までしか取得できないtwtr2srcでは目的には合致せず、そういう意味では使えなかった。「これからのログ」を自動なり手動なりでバックアップするのには向いているので、そういう人には「非常に使える」サービスだと思う。

twilog

twilog スクリーンショット

最後に試したのがこのtwilog。結論からいえばこのサービスで目的が達成できた。これも登録しないでお試し利用をすることができる。また完全に日本(語)のサービスなので、UIなどで戸惑うことがないのも大きなメリットのひとつ。

登録しなくても試せるので使ってもらった方が早いが、ユーザ名を入れると200件のpostを取得し、日付ごとに特定のフォーマットで出力できるのは上記のtwtr2srcと同じ。ただ出力フォーマットは(現時点では)HTMLに限られ、その中から「divに囲われたp(1postがpで囲われる)」「ul・li(リスト形式)」「pタグで囲ってbrで改行」を選ぶことができる。ただタグを取得できるのはあくまで日付ごとで、twtr2srcのように200件すべてを一気に出力することはできないようだ。(この機能は欲しかった……が、後述の機能があるので致命的な問題にはならなかった。)

TwitterのOAuthで認証すると機能をフルに使うことができ、新しいpostも自動的にサービス側でバックアップされるようになる。また、過去ログを遡って保存限界の3200件を上限にサルベージすることができる。(それ以上はTwitter側で消えてしまうので無理。)取得したTwitterのログはそのままHTMLではダウンロードできないが、CSV(Shift_JIS or UTF-8)かXML形式でダウンロードすることができる。しかしサービス内でそのまま過去ログを閲覧することができるため、ローカルに保存したい人以外は使う機会がないかもしれない。

とりあえずtwilogを使うことによって、目的だった「消えていくTwitterの過去ログを保存する」「ファイルをローカルに保存する」というところまでは達成できた。ただファイル形式がCSVかXMLなので、このままではとても「見やすい」とは言い難い。ということで、このファイルを変換して見やすくすることにした。

余談

twilogのログは(twilogを利用していることとTwitterのidさえわかれば)誰でも自由にアクセスできるので、登録して使うと「Twitterからは流れて消えたログ」だと思いこんでいた(都合の悪い)postがサルベージされる可能性は当然ある。ローカルに保存したいだけならば、ログが消える3200 postごとに登録→ダウンロード→アカウント削除という手順を踏んだ方がいいかもしれない。(もちろん「最初からTwitterでブロードキャストしている時点で、流れるもクソもない」とも言えるが。)

XSLTスタイルシートでXMLをHTML + CSSに変換する

最初からHTMLに変換されたログが丸ごとダウンロードできるなら問題なかったが、今回利用したtwilogはCSVかXMLしか選択肢がなかったので、XMLをダウンロードしてXSLTでHTMLに変換することにした。(変換といってもファイル自体が変換されるわけではなく、ブラウザにXMLを読み込ませて表示された結果がHTMLになるだけ。)XSLTは前に少しだけいじった経験があるので変換自体はすぐに思いついたが、肝心の記述の仕方などはすっかり忘れていた。ということで、次のページをチェックしながらXSLTスタイルシートを記述した。

で、完成したのが下のXSLTファイル。これに任意の名前を付け、拡張子を「xsl」にしてUTF-8で保存すれば完成。これだけでも「postごとにliで区切ったulリスト形式」で「Twitterの個別postへのパーマリンク付き」のHTMLに変換できた。(ただしTwitter側の古いpost消えていくので、将来にわたってずっとパーマリンクへアクセスできるわけではない。)下から8行目の[user_id]に自分のTwitterアカウント名を入れれば、恐らく誰でも使えるはず。

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
  <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="tweets">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"><head><title>Twitter Log</title><link rel="stylesheet" href="style.css" type="text/css" /></head><body><ul><xsl:apply-templates/></ul></body></html>
  </xsl:template>
  <xsl:template match="tweet" >
   <li>
     <p><xsl:value-of select="text"/></p>
     <span>posted time 
      <a>
       <xsl:attribute name="href">
        http://twitter.com/[user_id]/status/<xsl:value-of select="id"/>
       </xsl:attribute>
       20<xsl:value-of select="time"/>
      </a>
     </span>
     </li>
  </xsl:template>
</xsl:stylesheet>

ただこれだけでは動作しないので、twilogからダウンロードしたXMLファイルの2行目に

<?xml-stylesheet href="ファイル名.xsl" type="text/xsl" ?>

と挿入して上書き保存する必要がある。あとはさっきのXSLTスタイルシートと同じフォルダに、このXMLファイルを置く。これでXMLファイルからXSLTスタイルシートを呼び出して、HTMLに変換できるようになる。

実際に変換して表示させたのが以下の画像。まだCSSは適用させていないので素っ気ないHTMLでしかないが、XMLファイルをそのまま表示させたのとは違うのがわかる。

XMLをXSLTスタイルシートでHTML化

次はCSSを適用させた場合のサンプル。さっきのコードはデフォルトで「style.css」というCSSファイルを呼び出すようになっているので、同じフォルダにスタイルを記述した「style.css」を置けばOK。

変換したXMLにスタイルシートを適用した

自分の場合はTwitterのタイムラインを真似てみたが、あくまで例にすぎないので(同じようなことがしたい人がいたら)CSSは好きなように記述すればいいと思う。

というところで当初の目的は無事達成。他に最初からHTMLでログをダウンロードできるサービスもあるかもしれないが、自分の場合はこれで十分なのでしばらくはこのXSLTテンプレートを使い回していこうと考えてる。

posted by RPM at 21:46 | TrackBack(0) | BackLink | Internet・Webサービス | 更新情報をチェックする


※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。