【PHP×Twitter API】ツイッター検索結果取得の基本

ツイッター検索結果取得の基本Tips

PHP×Twitter APIシリーズ、今回はAPIを利用して検索結果の取得をご紹介します。検索と他の技を組み合わせることでできることの幅が拡がります。

また、パラメータを利用することで「指定数以上のいいねが付いているツイート」といった高度な検索も可能です。

この記事で分かること
  • PHPを利用した検索結果取得の方法
  • 検索結果取得のサンプルコード
  • 検索ワードの指定方法
  • 検索対象を絞るためのパラメータ指定方法

必要なもの

  1. ツイッター開発者アカウント
    ツイッターアカウントとは別にAPIを利用するために必要になります。本記事ではアカウントの登録とAPPの作成は割愛しています。

検索結果取得の注意点

本記事では検索結果の取得を無料で利用できる標準検索API、search/tweetsを使用します。標準検索APIでは、1週間以上前のツイートは検索できません。この点は涙を飲んで受け入れる必要があります。

裏技としてsearch/universalという非公式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>';
    }
  }
?>

指定したワードが検索結果に全然含まれない場合は、phpファイルを保存する際の文字コードを確認してください。私の場合はUTF-8にすると正常に動作しました。

補足

①(13行目)
$quaryという変数に検索ワードを代入して、パラメータとして使っています。パラメータについては、以下で詳しく説明します。

②(28行目)
検索結果はstatusesとsearch_metadataの2つが含めれた形で出力されます。タイムラインの取得などはstatusesが返ってくる仕様ですので、階層が1つ多くなっています。データ取り出しの際に注意が必要です。


実行結果です。

実行結果
実行結果(一部伏字)[クリックして拡大]

search/universalで取得できる最大ツイート件数は100です。100件以上を取得したい場合は、max_idを利用したページングが必要になります。(max_idの値は、検索結果もしくはsearch_metadataに入っているものから取得します)

検索ワードの指定方法と便利なパラメータ

検索ワードの指定方法です。完全一致、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に代入して検索をします。すると以下のようなほんわかするツイートが見つかりました。

検索ワードなしでパラメータのみでも動作しますので、リツイート10000以上のツイートの取得といった使い方もできます。
※単一パラメータでは動作しませんでしたが、「min_retweets:10000 lang:ja」で動作確認済

あとがき

地味に「文字コード」と「取得されるデータの違い」の部分でハマってしまいました。。逆に言えばそこ以外ハマりそうな箇所はありません。この記事を読んだ方なら大丈夫!きっと。

それにしてもオリックスの株主優待でもらえるオオサンショウウオのぬいぐるみの人気には嫉妬せざーるを得ない。

なお、自動で回さない場合は高度な検索なる機能が用意されているのでこちらを使うがよろしです。

クノウ
クノウ

ツイッターAPIを使った記事を結構書いています。
気が向いたらフォローください🐼

最後までお読みいただきありがとうございます!
オラに元気を分けてくれ!

にほんブログ村 株ブログ サラリーマン投資家へ


Tips
\この記事をシェアする/
\クノウをフォローする/
無能投資家の苦悩

コメント

タイトルとURLをコピーしました