☆Twitterのタイムラインを逆順に表示する

Twitterのタイムラインを逆順に表示したいのですが、Read All Tweetsは一つのリストしか指定できないみたいです。
複数のリストを見るために設定を変えるのは結構面倒です。
とりあえず手持ちの知識だけでやれることをやってみました。
この方法では一ページ分しか処理できません。

tw_rev_browse.shにブラウザで見た場合のURLから"http://twitter.com/"を除いた部分を指定して使います。
account_nameのアカウントのタイムラインを見たい場合は "tw_rev_brose.sh account_name"、
リストの場合は"tw_rev_brose.sh account_name/list_name"のようにして使います。
結果はブラウザで表示されます。
TwitRev-YYYY-MM-DD-HHMMSS-数字何桁か.html というファイルがカレントディレクトリに出来るので不要になったら削除してください。

実行例
# アカウント指定
$ tw_rev_browse.sh ubn
# リストの指定
$ tw_rev_browse.sh MidSpecLowLoad/ubuntu-ittoke-doujou

以下の二つのファイルに実行権限をつけてをパスの通ったところにおきます。

2010/03/07 引数チェック追加
tw_rev_browse.sh
#!/bin/bash
if [ -z $1 ] ;then
  echo "$0 requires a parameter"
  exit 1
fi

HTML=TwitRev-`date '+%F-%H%M%S'`-$$.html
wget -O - http://twitter.com/$1 |sed -e 's#</li>#\n#;'| tw_rev.pl > $HTML
x-www-browser $HTML &
tw_rev.pl
#!/usr/bin/perl

# search start html header
while(<>){
  print;
  last if m#<head>#;
}

# For relative link. ex list in right side.
print qq(<base href="http://twitter.com/" />\n);

# search start of tweets
while(<>){
  print;
  last if m#<ol id='timeline' class='statuses'>#;
}

# stack each tweets
my(@TWEET);
OUTER:
while(1){
  my(@tweet);
  while(<>){
    last OUTER if m#</ol>#;
    push @tweet, $_;
    last if m#</li>#;
  }
  unshift @TWEET, \@tweet;
}

# output each tweets
my($tweet);
for $tweet (@TWEET){
  my($line);
  for $line (@$tweet){
    print $line;
  }
}
print qq(</ol>\n);

# output remaining
while(<>){
  print;
}

HTMLを見ると1Tweetが<li></li>でまとめられているのでJavaスクリプトでDOMを操作すれば、結構簡単な気がします。
Firefoxのプラグインの作り方を知っていればこれが一番簡単そうです。
Perlを使う場合でもDOMを操作できるモジュールを使えばもっとスマートに出来るとは思うのですが、モジュールはあまり使用したことがないので知りません。
python twetterなどを調べて使ってみるのも良いかもしれません。
何か一つくらいチャレンジしてみるつもりです。

0 件のコメント:

コメントを投稿