PHP×Twitter APIシリーズ、今回はAPIを利用して検索結果の取得をご紹介します。検索と他の技を組み合わせることでできることの幅が拡がります。
また、パラメータを利用することで「指定数以上のいいねが付いているツイート」といった高度な検索も可能です。
必要なもの
- ツイッター開発者アカウント
ツイッターアカウントとは別にAPIを利用するために必要になります。本記事ではアカウントの登録とAPPの作成は割愛しています。
検索結果取得の注意点
本記事では検索結果の取得を無料で利用できる標準検索API、search/tweets
を使用します。標準検索APIでは、1週間以上前のツイートは検索できません。この点は涙を飲んで受け入れる必要があります。
例によって取得回数の制限もあります。15分で180回を超える使用はできません(公式サイト)。
検索結果取得の方法
以下のステップについては、過去記事に書いた内容と同じですのでこちらをご覧ください。
ステップ1. Twitter Developersにてアクセストークンを取得
ステップ2. TwitterOAuthを設置
ステップ3. PHPファイルを作成
サンプルとして「オオサンショウウオ」というワードでの検索結果のツイートから主要な項目を表示するコードを用意しました。
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
//ステップ1でTwitter developersから取得した値を代入
$consumerKey = 'xxxxxxxxxx';
$consumerSecret = 'xxxxxxxxxx';
$accessToken = 'xxxxxxxxxx';
$accessTokenSecret = 'xxxxxxxxxx';
//検索ワードやパラメータを指定①
$quary = 'オオサンショウウオ';
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//$quaryの条件でツイートを検索
$statuses = $connection->get('search/tweets',['q' => $quary, 'count' => 100, 'tweet_mode' => 'extended']);
if(isset($statuses->errors)) {
//取得失敗
echo 'Error occurred. ';
echo 'Error message: ' . $statuses->errors[0]->message;
} else {
//検索結果がない場合はメッセージを表示
if(count($statuses->statuses)==0)echo '該当するツイートはありませんでした。';
//取得成功②
foreach($statuses->statuses as $tweet){
echo '<p>';
echo 'ステータスID: ' . $tweet->id . '<br>';
echo '名前: ' . $tweet->user->name . '<br>';
echo 'ユーザー名(screen_name): ' . $tweet->user->screen_name . '<br>';
echo 'ツイート本文: ' . $tweet->full_text . '<br>';
echo '作成日: ' . date('Y-m-d H:i:s', strtotime($tweet->created_at)) . '<br>';
echo 'ツイート: ' . $tweet->source . '<br>';
echo 'リツイート数: ' . $tweet->retweet_count . '<br>';
echo 'いいね数: ' . $tweet->favorite_count;
echo '</p>';
}
}
?>
補足
①(13行目)
$quaryという変数に検索ワードを代入して、パラメータとして使っています。パラメータについては、以下で詳しく説明します。
②(28行目)
検索結果はstatusesとsearch_metadataの2つが含めれた形で出力されます。タイムラインの取得などはstatusesが返ってくる仕様ですので、階層が1つ多くなっています。データ取り出しの際に注意が必要です。
実行結果です。
検索ワードの指定方法と便利なパラメータ
検索ワードの指定方法です。完全一致、AND検索、OR検索などを駆使して求めるツイートを検索します。
"オオサンショウウオかわいい"
「オオサンショウウオかわいい」と完全一致したツイートを取得(””で囲まない場合は、ツイート中に分かれて存在する場合も検索されます)オオサンショウウオ ペンギン
「オオサンショウウオ」と「ペンギン」が含まれるツイートを取得オオサンショウウオ OR ペンギン
「オオサンショウウオ」か「ペンギン」が含まれるツイートを取得オオサンショウウオ -オリックス
「オオサンショウウオ」を含んでおり「オリックス」が含まれないツイートを取得#オオサンショウウオ
ハッシュタグ「オオサンショウウオ」が含まれるツイートを取得
検索ワードにパラメータを指定することで取得対象を絞れます。こちらを参考に利用頻度が高そうなもの、便利なものを抽出しました。
result_type: popular
取得するツイートの種類をpopular(人気のツイート)、recent(最新のツイート)、mixed(全てのツイート)から指定from:user
ユーザー「user」を指定して検索to:user
ユーザー「user」への返信ツイートを検索@user
ユーザー「user」への@ツイートを検索since:2020-07-01
2020年7月1日以降のツイートを最新から順に検索until:2020-07-01
2020年7月1日以前ツイートを最新から順に検索lang:ja
言語を日本語に絞ってツイートを検索include:retweets
リツイートを含むツイートを検索exclude:retweets
リツイートを含まないツイートを検索filter:images
画像が含まれるツイートを検索filter:videos
動画が含まれるツイートの検索filter:media
メディア(画像と動画)が含まれるツイートの検索min_retweets:100
リツイートが100以上のツイートを検索min_faves:100
お気に入り(いいね)が100以上のツイートを検索min_replies:10
リプライが10以上のツイートを検索
例えば、次の条件に当てはまるツイートを検索したい場合は、
- 「オオサンショウウオ」が含まれる
- 「オリックス」が含まれない
- リツイートが1以上
- メディアが含まれる
オオサンショウウオ -オリックス min_retweets:1 filter:media
を$quaryに代入して検索をします。すると以下のようなほんわかするツイートが見つかりました。
夫のリクエストで、京都水族館のオオサンショウウオぬいぐるみと、ハリネズミのぬいぐるみでイラスト描きました。#色鉛筆 pic.twitter.com/9jgiqz3Z0R
— さよこ (@azq_12) July 5, 2020
あとがき
地味に「文字コード」と「取得されるデータの違い」の部分でハマってしまいました。。逆に言えばそこ以外ハマりそうな箇所はありません。この記事を読んだ方なら大丈夫!きっと。
それにしてもオリックスの株主優待でもらえるオオサンショウウオのぬいぐるみの人気には嫉妬せざーるを得ない。
なお、自動で回さない場合は高度な検索なる機能が用意されているのでこちらを使うがよろしです。
ツイッターAPIを使った記事を結構書いています。
気が向いたらフォローください🐼
コメント