ようこそのお運びで、厚く御礼申し上げます。
79日目です。前回Twitter APIを使って、ツイートを取得する方法を書きましたが、今回はハッシュタグを検索してみようと思います。
Twitterからどんな検索ができるのか?試してみるにはこちらを参照。
Twitter APIには、検索内容を指定してツイートを取得することができます。
まずは、公式のドキュメントはこちらから
設定や自分のツイートを表示するには前回参照
前回同様今回も使ってみよう!!ということで、「Twitter APIの制限等(15分間に180回)もあるので実用性はない」と思ってください。※キャッシュについて今回書いていません。
今回の検索項目
- ハッシュタグ「#Nirvana」
※今回ロックの殿堂入りしたので・・・
OAuth認証を行い、条件にあうツイートを取得。
GET search/tweetsを参照してコードを書いていきます。
OAutu認証部分は前回、もしくはコードを参照してください。
$obj = new TwitterOAuth($apiKey,$apiSecret,$accessToken,$accessTokenSecret);
今回は、検索なので「https://api.twitter.com/1.1/search/tweets.json」となります。
3番目の引数に取得する検索条件を設定します(配列)。
'q':検索する文字列で記入
'lang':検索する言語(デフォルトはeu)
'count':取得するツイートの件数
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>'#Nirvana', 'lang' =>'ja', 'count'=>'10'));
json_decodeで取得した値(json)をデコードします(配列)。
$tweets = json_decode($req);
取得した値をforeachを使って出力します。
if (isset($tweets) && empty($tweets->errors)) { $tweets = $tweets->statuses; foreach ($tweets as $val) { //出力内容を記入 } }
ANDやOR条件の設定は。
検索条件を設定する、'q'に半角スペースを空けて「OR」や「AND」を記入します。
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>'#Nirvana AND #TheRockandRollHallofFame', 'lang' =>'ja', 'count'=>'10'));
特定にユーザのみ取得したい場合は。
検索条件を設定する、'q'に半角スペースを空けて「from:ユーザ名」を記入します。
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>'#Nirvana from:userName', 'lang' =>'ja', 'count'=>'10'));
特定ユーザを条件に入れたくない場合。
検索条件を設定する、'q'に半角スペースを空けて「-from:ユーザ名」を記入します。
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>'#Nirvana -from:userName', 'lang' =>'ja', 'count'=>'10'));
ご近所での発言を検索する。
検索条件を設定する'q'に半角スペースを空けて「near:場所名 within:範囲」を記入します。
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>'#Nirvana near:大分市 within:10km', 'lang' =>'ja', 'count'=>'10'));
※もちろん普通のtwitterでもつかえます。いまいち確実な場所の書き方がわかっていませんが。
その他、検索条件の設定
その他、twitterの検索はまだまだ色々できるみたいです。
公式のドキュメントはここからどうぞ。"q"に直接設定できるみたいです。
ショートコードを使って、検索条件を設定してみる。
ショートコードは"paka3Tweet"にします。
属性は件数「count」、検索ワード「word」、言語は「lang」にします。
add_shortcode('paka3Tweet','shortCode_myTweet'); function shortCode_myTweet($atts){ extract( shortcode_atts( array( 'count' =>10, //表示数(初期値10): 'word' => '#news' , //検索ワード(初期値#news), 'lang' => 'ja', //言語(初期値ja) ), $atts) ); ・・・ }
ショートコードから設定された値を、TwitterAPIの関数に渡します。
$req = $obj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json', 'GET', array('q' =>sprintf(esc_html("%s"),$word), 'lang' =>sprintf(esc_html("%s"),$lang), 'count'=>sprintf(esc_html("%s"),$count) ));
ショートコードを記事に記入します。
記事に書き込むショートコードの例です。
[paka3Tweet word="#Nirvana" count=20]
前回と同じく、こちらのライブラリを使います。
OAuth認証を行うために、別のライブラリを読み込んで使います。
こちらからダウンロードして、「twitteroauth」ディレクトリを「作成するプラグイン」ディレクトリに入れてしまいます。
コードをプラグイン用のファイルにします
「Paka3Tweet.php」というファイルを作成し、以下のコードを記入します。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
※ディレクトリ構成は前回と同じく、こんな感じ
今回のまとめ
今回もTwitterから記事を取得してみる関数を書いてみました。大枠はライブラリのおかげではありますが・・・(^^)。ただTwitterAPIにも制限があるので、このまま運用するのはよろしくないみたいです。
対策としては、「キャッシュを何処かに作る」もしくは制限を受けない「StreamingAPI」を使う必要がでてきそうですね。とうことで、今回のコードはあくまでサンプルということで。