Twitter API の If-Modified-Since

TwitterAPI をいじってました。
お友達のタイムラインを取得する時は、リクエストに「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とか使って色々調べてみたら、あっさり解決しました。
TwitterBasic認証を行わずに、お友達のタイムラインを取得しようとすると、一見それっぽく取得できるのですが、実は、パラメータの「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();

?>

こんな風にしたら、あっさり上手くいきました。

教訓

上手くいかなくて途方にくれたら、とっとと寝るのが一番。