一行Twitterクライアント

ブックマークレットTwitter friend timelineを取得するものを作ってみた。下記scriptをブラウザのアドレスバーに入力して実行するか、ブックマークのURLに指定して実行すると、javascriptのalertウインドウにfriend timelineを表示する。(初回はtwitter.comの認証情報を求められる。)

javascript:document.write("<script>function%20f(t){return(t.user.screen_name+':'+t.text+'\\n');};function%20x(o){s='';for(p%20in%20o){s+=f(o[p]);}alert(s);};</script><script%20src='http://twitter.com/statuses/friends_timeline.json?callback=x;'></script>");document.close();

alertでなくて、ブラウザ内に表示するようにした。↓

javascript:document.write("<script>function%20f(t){return(t.user.screen_name+':'+t.text+'<br/>');};function%20y(o,d){for(p%20in%20o){d.write(f(o[p]));}d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/friends_timeline.json?callback=x;'></script>");

<pre>タグの中にして、表示件数を100件にしてみた。

javascript:document.write("<script>function%20f(t){return(t.user.screen_name+'\\t'+t.text+'\\n');};function%20y(o,d){d.write('<pre>');for(p%20in%20o){d.write(f(o[p]));}d.write('</pre>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/friends_timeline.json?callback=x&amp;count=100'></script>");

<table>タグでそろえてみた。

javascript:document.write("<script>function%20f(t){return('<tr><td>'+t.user.screen_name+'</td><td>'+t.text+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');for(p%20in%20o){d.write(f(o[p]));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/friends_timeline.json?callback=x&amp;count=100'></script>");

別のウインドウに表示するようにした。(ポップアップブロック解除が必要)

javascript:d=window.open().document;d.write("<script>function%20f(t){return('<tr><td>'+t.user.screen_name+'</td><td>'+t.text+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');for(p%20in%20o){d.write(f(o[p]));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/friends_timeline.json?callback=x&amp;count=100'></script>");d.close();

user_timelineも取れる。以下は、IIJIMASのタイムラインで、count=200にした例。

javascript:d=window.open().document;d.write("<script>function%20f(t,i){return('<tr><td>'+i+'</td><td>'+t.text+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');i=1;for(p%20in%20o){d.write(f(o[p],i++));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/user_timeline/IIJIMAS.json?callback=x&amp;count=200'></script>");d.close();

Twitter の本家のユーザページ(http://twitter.com/(スクリーン名))を開いているときに、起動すると、そのユーザの最新発言を200件表示するブックマークレット。ユーザの発言をさかのぼりたいときに本家の[more]ボタンを繰り返し押すよりも便利だと思う。

javascript:document.write("<script>function%20f(t,i){return('<tr><td>'+i+'</td><td>'+t.text+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');i=1;for(p%20in%20o){d.write(f(o[p],i++));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/user_timeline/"+location.toString().match(/http:\/\/twitter.com\/(\w+)/)[1]+".json?callback=x&count=200'></script>");

追記:さらにさかのぼりたいときは&page=2などと引数にpageも追加すればよい。試してみたら、page=16(3200発言)くらいまでさかのぼれた。
以下のサンプルではさらに、発言idや発言日時も表示するようにした。

javascript:document.write("<script>function%20f(t,i){return('<tr><td>'+i+'</td><td>'+t.text+'</td><td>'+t.id+'</td><td>'+t.created_at+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');i=1;for(p%20in%20o){d.write(f(o[p],i++));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/user_timeline/"+location.toString().match(/http:\/\/twitter.com\/(\w+)/)[1]+".json?callback=x&count=200&page=16'></script>");

このままだと、時刻がUTCであり、日付のフォーマットも日本のものではないので、変換関数を通すようにしたサンプル。

javascript:document.write("<script>function%20fmt(tt){v=tt.split('%20');d=new%20Date(v[1]+'%20'+v[2]+',%20'+v[5]+'%20'+v[3]);d=new%20Date(d.getFullYear(),d.getMonth(),d.getDate(),d.getHours(),d.getMinutes()-d.getTimezoneOffset(),d.getSeconds());return(d.toLocaleString());}function%20f(t,i){return('<tr><td>'+i+'</td><td>'+t.text+'</td><td>'+t.id+'</td><td>'+fmt(t.created_at)+'</td></tr>');};function%20y(o,d){d.write('<table%20border=1>');i=1;for(p%20in%20o){d.write(f(o[p],i++));}d.write('</table>');d.close();};function%20x(o){y(o,document);}</script><script%20src='http://twitter.com/statuses/user_timeline/"+location.toString().match(/http:\/\/twitter.com\/(\w+)/)[1]+".json?callback=x&count=200&page=16'></script>");