「ツイッターに投稿される画像をダラ見したいなぁ」なんて思いながらAPIを使ってみました。
公式サイトとかWebサービスとか使えばダラ見できるんだけど、そこは、やっぱりエンジニアとしてAPIも使ってみたいかなと。
CakephpにはTwitterkitなるプラグインがありますが、今回はサービスとしてリリースする訳ではないので、ざっくりと使えるTwitteroauthを使用しました。
基本的な使い方は、「Twitter API 1.1 を使用してPHPでつぶやきの検索結果を取得したときのメモ」や「PHP5.3.7 TwitterOAuthの正しい使い方」と参考にするといいと思います。
Api1.1になってからアクセスルールが厳しくてとか聞きますが、個人で使う分には気にしなくてもいいかな。
で、
テーマは「写真をダラ見」なので、「search/tweets.json」を使用します。
以下、コードの抜粋です。
$query = rawurlencode($query).' -RT filter:images'; $option = array( 'q' => $query, 'count' => 100, 'locale '=>'ja', 'include_entities' => true 'result_type'=>'recent' ); $result = $this->TwitterObj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', $option); $res = json_decode($result, true);
「include_entities」はtrueで画像やリンクのメタ情報を取得しますが、デフォでtrueらしいので、いらないかも。
で、肝心なのは
$query = rawurlencode($query).' -RT filter:images';
この部分です。
queryはエンコードしますが、その他のフィルターはエンコードしません。理由は分かりませんが、いっしょにエンコードするとデータを取得できません。
単純にQueryのみだと、全体から検索したデータが返ってきます。画像のみを扱いたいのでフィルターをかけます。
「-RT」はリツートを除く。(除けない時もある)
「filter:images」は画像・動画のみ。
APIの使い方を間違えたり、リミットに引っかかると、「Error Codes & Responses」にあるエラーが返ってきます。
json_decodeして内容を確認してください。
今回作ったキャプチャー
参考にしたhttp://twitis.me/のキャプチャー
微妙に写真が違うのが気になりますが、APIのリクエスト内容が違うのかな?と思います。
【追記】
上の例だと100件取得しますが、101件目からは「max_id=xxxx」を指定します。
max_idの値は、最後のデータ(100件目)の「id_str」を使います。
「id_str – 1」した値をmax_idに入れて、リクエストすると101件目からのデータが返ってきますが、id_strの桁数が多いので単純に-1しただけでは正常な値を取得できません。
なので
bcsub($id_str, 1)
として-1してあげます。この値をmax_idに入れてリクエストします。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)