PEAR::Services_Twitterを使ってAPI1.1にリクエストを送る方法はこちらを読んでください。
【PHP】 PEAR::Services_TwitterでTwitter API 1.1対応 | mutter
「タイムラインから「google」という単語で検索してマッチしたツイートを取得したい」というような要求があった場合に、API1であればこんなリクエストを送れば取得出来ました。
GET search | Twitter Developers
http://search.twitter.com/search.json?q=google
API1.1では、要Authentication付きでこんなリクエストになります。
GET search/tweets | Twitter Developers
https://api.twitter.com/1.1/search/tweets.json?q=google
このリクエストをServices_Twitterで組み立てるとこんな感じになるのですが、
$obj = new Services_Twitter();
/* oAuth省略 */
$data = $obj->search->tweets(array('q' => 'google'));
実際に動かすと、
Unsupported endpoint search/tweets
と言われて動きません。問題は2つあります。
- Services_Twitterが「search/tweets」をサポートしていない
- searchの場合のリクエストURLが「http://search.twitter.com」になっている
この2つを解決してやれば、無事に動くようになります。
1. Services_Twitterが「search/tweets」をサポートしていない
Services_TwitterはすべてのAPIのエンドポイントをXMLデータとして持っていて、そこに記載されているかどうかをチェックしているため、API1.1にリクエストを送るようにしたとしても、新しく追加されたリソースは跳ねられてしまうのでした。ということで、このXMLデータを編集してやる必要があります。このXMLは僕の環境では次の場所にありました。
/usr/share/pear/data/Services_Twitter/data/api.xml
これの466行目にsearchに関する設定があります。
json,atom
ここに次のコードを追加してやります。
json
保存すればOK。
2. searchの場合のリクエストURLが「http://search.twitter.com」になっている
これは前回と同じようなことをすればOK。Services_Twitter::$searchUri = 'https://api.twitter.com/1.1/search';
こうすることできちんと送られるようになります。
おまけ:もちろん他のAPI1.1で採用された新リソースも追加出来ます
XMLで該当個所を探して、更新。問題は、PEARでServices_Twitterを更新したらXMLも上書きされちゃうだろうことですけど、でもまあ今現在開発が止まってますし、万が一更新が行われたとしたらこの部分をメンテナンスしてAPI1.1のリソースに対応→更新と言うことになるでしょうから、気にしなくて良いかな。もちろん、更新前にソースの確認は必要ですが。
外からリソースを追加してやれると楽で良いのになー
(それがPEARモジュールとして正しいかはわかりませんけど)