約30秒に一回/homeタイムラインの更新を確認し、更新した分だけ上に継ぎ足していってくれるJavaScript

できたよー。
とりあえず現状はROM専用ということでおながいします。
jQueryを読み込ませた上で↓を実行する。

(function(){
	var $ = jQuery;
	$('<div/>')
		.insertAfter('#container')
		.attr('id','temp');
	(function(){
		var func = arguments.callee;
		$.get('http://twitter.com/home',function(data){
			// 取得したHTMLから#container内のみ取り出す
			var result = /<div\s+id="container"[^<>]*>/.exec(data);
			var start = result.index + result[0].length;
			var end = data.search(/<!--\s+\/container\s+-->/);
			var container = data.slice(start,end);

			// 現在表示されている最新エントリの投稿日時
			var dateTime = $('#container #timeline tr.hentry .published:first')
							.attr('title')
							.replace(/-/g,'/')
							.replace('T',' ')
							.replace('+',' GMT+');
			dateTime = Date.parse(dateTime);
			// 一次格納用divに取得したHTMLの#container内を書き出す
			$('#temp').get()[0].innerHTML = container;
			// 現在表示されている最新エントリの投稿日時より新しいもののみ使用。
			$('#container #timeline tr.hentry:first')
				.before( $('#temp #timeline tr.hentry')
							.filter(function(){
								return Date.parse( $(' .published',this)
											.attr('title')
											.replace(/-/g,'/')
											.replace('T',' ')
											.replace('+',' GMT+') ) > dateTime;
						}));
			// 一次格納用divの初期化
			$('#temp').empty();
			setTimeout(func,30*1000);
		});
	})();
})();

課題

  • 待ち時間中に1画面分よりたくさん流れてしまうとその分はキャッチできない
  • 発言した後はこのスクリプトが実行できなくなってしまう
    • Update時に各発言のtrに振られていたクラス・hentryがはずされてしまう。
      • ここだけ回避しても問題がありそうなので、発言時はPOSTはするがクライアント側には何もしないようにしてやればよさそう

2008/02/05追記

昨日公開した奴だと毎回全件追加してしまうようになっていたので修正しました。