診断ドットコムのSNSを是非フォローお願いします☆X(Twitter) TwitterThreads Threadsmisskeyロゴ Misskeyタイッツーロゴ タイッツー

ブログトップ > Twitter APIで特定キーワードを含んだツイートを取得【php】

Twitter APIで特定キーワードを含んだツイートを取得【php】

こんばんは、Kotoriです。
みなさんTwitter APIを利用したことはありますか?Twitter APIを利用すればタイムラインを取得したり、ログイン機能を実装したりとTwitterのデータを活用し色々な機能を実装することができます。
今回Kotoriは、Twitterのツイートで特定キーワードが含まれるツイートをTwitter API経由で取得しサイトに表示するということを実現したくて、色々検索した結果なんとか実現できました。
その時のことを備忘としてブログ記事にしたいと思います!

プログラム言語 PHP
使用ライブラリ abraham/twitteroauth
バージョンは1.0.1

この記事ではTwitterのAPIの操作は「abraham/twitteroauth」というライブラリを利用しています。
「abraham/twitteroauth」のインストール方法は下記の記事でめちゃくちゃ詳しく解説しています!!是非ご覧ください!

2019年!Composerのインストール方法と使い方![twitteroauthをインストール]

それではTwitter APIで特定キーワードを含むツイートを取得する機能の実装方法を見ていきましょう!

ツイートをキーワード検索できる「search/tweets」

特定のキーワードを含むツイートを取得するにはTwitter APIの「search/tweets」エンドポイントを使用します。
Twitter APIの無料プランでは、リクエスト回数や検索対象のツイートの範囲などに制限があります。
まずは制限について説明します!

「search/tweets」のリクエスト回数に制限がある

「search/tweets」のリクエストは15分あたり180回までと決まっています!
公式サイトに記載があります。
そのためアクセス数が多いサイトで「search/tweets」を利用する場合は、バッチ処理にするなど何かしら対策する必要があります。
このサイトはしばらくは何も考えないで良さそうです笑

「search/tweets」の検索は1週間前までしか遡れない

Twitter APIの無料プランでは、検索対象のツイートは過去1週間のツイートに限定されます!この制限は中々痛いですね。特にこのサイトのようなアクセス数がまだ少なくツイートも全然されないようなサイトだと1週間ツイートされないなんて当たり前ですからね笑

「search/tweets」で特定キーワードを含むツイートを取得するコード

いよいよ「search/tweets」エンドポイントを利用し特定キーワードを含むツイートを取得するphpのコードを紹介します。
冒頭でも触れましたが「abraham/twitteroauth」ライブラリを使用しています!
「abraham/twitteroauth」のインストール方法はこちら!

早速コードを見てみましょう!難しいことは何もありません。

define('TWITTER_API_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'); //Consumer Key (API Key)
define('TWITTER_API_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx');//Consumer Secret (API Secret)

// twitteroauth の読み込み
require_once $fullpath.'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

//TwitterOAuthのインスタンスを生成
$connection = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $access_token, $access_token_secret);

//「search/tweets」エンドポイントを利用し「4ndan.com」を含むツイートを15件取得
$statuses = $connection->get("search/tweets", ["q" => "4ndan.com","count" => 15,"tweet_mode" => "extended"]);

print_r($statuses);

上から見ていきましょう。
まずTwitter APIのAPI KeyとSecretを定義します。

define('TWITTER_API_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'); //Consumer Key (API Key)
define('TWITTER_API_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx');//Consumer Secret (API Secret)

この辺りよく分からない場合は、2019年!Twitter APIの申請とデベロッパー登録の方法を見てね!
API KeyとAPI Secretの取得方法が載っています!

続いて、「abraham/twitteroauth」を利用して、Twitter APIにアクセスするためのインスタンスを生成します。
「abraham/twitteroauth」を利用するときのおまじないのようなものです。

// twitteroauth の読み込み
require_once $fullpath.'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

//TwitterOAuthのインスタンスを生成
$connection = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $access_token, $access_token_secret);

そして、先ほど生成したインタンス経由でTwitter APIにアクセスします!「abraham/twitteroauth」は、下記のようなコードでエンドポイントとパラメータを指定するだけでTwitter APIを利用することができます。

//「search/tweets」エンドポイントを利用し「4ndan.com」を含むツイートを15件取得
$statuses = $connection->get("search/tweets", ["q" => "4ndan.com","count" => 15,"tweet_mode" => "extended"]);

パラメータの解説は下記です!

q 検索キーワード
count 取得するツイート数
tweet_mode これを指定しないとツイート本文が140文字でちょんぎられてしまう。140文字以上のツイートのテキストを全て取得したい場合はこのパラメータをつける

その他のパラメータは公式サイトに載っています!

「search/tweets」で取得したデータの出力例

それでは、Twitter APIの「search/tweets」で取得したデータをHTMLで出力するコードの一例を表示します!このサイトで実際に使ったコードです!
因みに「search/tweets」のレスポンスは公式サイトをご確認ください!

<?php
define('TWITTER_API_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'); //Consumer Key (API Key)
define('TWITTER_API_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxx');//Consumer Secret (API Secret)

// twitteroauth の読み込み
require_once $fullpath.'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

//TwitterOAuthのインスタンスを生成
$connection = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $access_token, $access_token_secret);

//「search/tweets」エンドポイントを利用し「4ndan.com」を含むツイートを15件取得
$statuses = $connection->get("search/tweets", ["q" => "4ndan.com","count" => 15,"tweet_mode" => "extended"]);

if(count($statuses['statuses']) != 0){ ?>
				<ul class="sp_list tweetslist">
					<?php foreach($statuses['statuses'] as $value){ ?>
					<li class="stream-item-header">
						<div class="account-group">
							<img src="<?php echo $value['user']['profile_image_url_https']; ?>" alt="<?php echo $value['user']['name']; ?>">
							<span class="FullNameGroup"><?php echo $value['user']['name']; ?></span>
							<span class="username"><a href="https://twitter.com/<?php echo $value['user']['screen_name']; ?>" target="_blank">@<?php echo $value['user']['screen_name']; ?></a></span>
							<small class="time"><?php echo $value['created_at']; ?></small>
						</div>
						<div class="js-tweet-text-container">
							<p><?php echo nl2br($value['full_text']); ?></p>
						</div>
					</li>
					<?php } ?>
				</ul>

基本的な情報はおおむねカバーしています。ただ、そのままツイート本文中を出力するとURLにリンクが付いていないです。
ツイートの本文のURLやハッシュタグにリンクを付ける実装はまた別の記事でご紹介したいと思います。

Twitter APIで特定のキーワードを含むツイートを取得する方法のまとめ

この記事ではTwitter APIで特定のキーワードを含むツイートをphpで取得する方法を詳しくご紹介しました!
いかがでしたでしょうか。

「abraham/twitteroauth」ライブラリを使えばシンプルなコードでTwitter APIを利用することができるので大変便利です!
またTwitter APIは他にも色々な機能が用意されています。無料プランだと色々と機能が制限されている部分もありますが大抵のことはできるでしょう!

ここまで読んでいただきありがとうございました!

2019.4.15
TOPへ