いまさらですが、TwitterApi1.1を使ってみました。

「ツイッターに投稿される画像をダラ見したいなぁ」なんて思いながら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して内容を確認してください。

今回作ったキャプチャー
001

参考にしたhttp://twitis.me/のキャプチャー
002

微妙に写真が違うのが気になりますが、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に入れてリクエストします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)