Twitter API の If-Modified-Since
Twitter の API をいじってました。
お友達のタイムラインを取得する時は、リクエストに「If-Modified-Since」ヘッダをつけると、指定した日時以降の発言だけ取得できるよー。と書いてあったので、最後に取得した発言の日時を覚えておいて、無駄なく発言を取得しようと思いやってみたのですが、、、何回やっても何回やっても「If-Modified-Since」が無視されてしまい、途方にくれておりました。FirefoxのRESTTestプラグインでやれば、ちゃんと取得できるのにー。
<?php require_once "HTTP/Request.php"; $url = 'http://twitter.com/statuses/friends_timeline/drgqst.rss'; $last_crawl = 'Sat, 15 Dec 2007 05:13:37 +0000'; // HTTPリクエストを作成 $req =& new HTTP_Request( $url ); $req->addHeader("If-Modified-Since", $last_crawl ); // HTTPリクエストを送信 $response = $req->sendRequest(); // 出力 echo $req->getResponseBody(); ?>
一晩悩んでどうしようもなくなったので寝てしまい、先ほどむくむくと起き出してProxomitronとか使って色々調べてみたら、あっさり解決しました。
TwitterのBasic認証を行わずに、お友達のタイムラインを取得しようとすると、一見それっぽく取得できるのですが、実は、パラメータの「since」が無視されて、常に最新の20件を取得するようになっているみたいです。なるほど。これはびっくりだ。
<?php require_once "HTTP/Request.php"; $url = 'http://twitter.com/statuses/friends_timeline/drgqst.rss'; $twitter_name = 'drgqst'; $twitter_password = '********'; $last_crawl = 'Sat, 15 Dec 2007 05:13:37 +0000'; // HTTPリクエストを作成 $req =& new HTTP_Request( $url ); $req->setBasicAuth( $twitter_name, $twitter_password ); $req->addHeader("If-Modified-Since", $last_crawl ); // HTTPリクエストを送信 $response = $req->sendRequest(); // 出力 echo $req->getResponseBody(); ?>
こんな風にしたら、あっさり上手くいきました。
教訓
上手くいかなくて途方にくれたら、とっとと寝るのが一番。