カテゴリー
未分類

Twitter search API の使い方

引き続きです
いままではめんどくさかったりどうせ誰もみないだろうと思ってコードまでこうして解説したりしなかったんだけど
やっぱりそんなことではウェブに世話になっている身としていかんと思いましてね
今後はなるべく書いていきます

jqueryつかえばなんてことなくできると思います
ページ送りとかツイートのストリーム表現とかサーバー側でキャッシュかけようとかいろいろあると思いますが
とりあえず考えない

//javascript(jquery)のみで処理

//json形式で
//キーワードはURIエンコードする
//最近のツイートを1ページあたり100件取得
var search = {
	url : 'http://search.twitter.com/search.json' ,
	words : ['%22earthdaymarket' , 'earthdaymarket' , encodeURI('アースデイマーケット')],
	option : {result_type : 'recent' , rpp : 100}
};

//キーワードはORでつないでanyとする
//クロスドメインのため &callback=? をつかってjsonp で
$.getJSON(search.url + '?q=' + search.words.join('+OR+') + '&callback=?', search.option ,
     function(data) {
          $.each(data.results,function(index,tweet){
               //tweetの整形処理をする(省略)
          });
      }
);

ひとつ引っかかったのがツイートの投稿日時をどんな形で表示するかということ
他見るとだいたい 前とかagoとかになっているのでそれに習いました

//各ツイートについてくるcreated_atを ago 表記に変換する関数
timestamp = function (created_at) {
	var created_at = Date.parse(created_at); //投稿日時をミリ秒に変換
	var now = (new Date()).getTime(); //現在時刻をミリ秒で取得(ツイート毎に取得する必要ないけどまあいいや)
	
	var passage = (now - created_at) / 1000; //投稿時刻をagoに変換&秒に変換

        //端数は全部切り捨て
	
	if(passage < 60){//1分未満だったら秒で表示
		passage = Math.ceil(passage);
		return passage + '秒前';
	}
	if(passage < 3600){//1時間未満だったら分で表示
		passage = Math.ceil(passage / 60);
		return passage + '分前';
	}
	if(passage < 3600 * 24){//1日未満だったら時間で表示
		passage = Math.ceil(passage / 3600);
		return passage + '時間前';
	}

	//1日以上経っていたら日で表示
	passage = Math.ceil(passage / ( 3600 * 24));
	return passage + '日前';

}