みなさんこんにちは。
ここ最近、世間を賑わせているTwitter。
くるっとひっくり返ってイーロン・マスクが結局Twitter社を買収し、大幅な人員削減をおこなったのでニュースになっています。
認証マークの有料化などさまざまな取り組みが行われるようですがTwitterの未来はいかに…
もしかしたらAPI有料化なんてことも…
さてこのシリーズ前回は「Twitter API」の申請編として「Twitter API」を実際に使うための申請方法などの解説をおこなっていきました。
今回の内容は「Twitter API」の実装編として、「Twiiter API」を利用したデータの取得の仕方をお話していきます!
Twitter APIは実際どう使うの?
さて「Twitter API」を使って実際どのように利用できるのかですが基本的にはサーバーサイドのプログラムを用いて使用することになります。
サーバーサイドのプログラムにはPHPやPython,Java,Ruby,Node.jsなどなど様々なものがありますが今回は「PHP」を用いて実装を行っていきます。
さてここからは実際にPHPを用いてコードを記述していきます。
今回は「特定のユーザーのタイムラインから最新10件のツイートを表示する。」のを目標にコーディングをおこなっていきます。
注意事項として、ここからはまったくプログラミングをやったことがない人には少し難しい内容になっていくかもしれません。
申し訳ありませんがプログラム用語の詳しい解説などは省略させていただきます。
実際にPHPでTwitter APIを実装しよう
「Twitter API」がv1.1 の頃は外部のフレームワークなどを使用して複雑な操作をする必要がありました。
v2 に変わってからはエンドポイントやクエリの設定のみで簡単に扱えるようになったのでだいぶ手軽にAPIを使用できます。
エンドポイント、クエリの設定
ではまず、エンドポイントの設定をおこなっていきます。
今回は「特定のユーザーのタイムラインから最新10件のツイートを表示する。」が目標なので、ある特定のユーザーのタイムラインを取得するエンドポイントを設定してきます。
今回は、弊社が運営しているWebギャラリーサイトの「EWS」のツイートを取得していきたいと思います。
エンドポイントには様々なものがありいろいろなものが取得・実行できるので興味がある方は公式のリファレンスを読んでみてくださいね。
実際のコードは下記になります。
//エンドポイントを指定
$base_url = 'https://api.twitter.com/2/users/xxxxxxxxx/tweets';
//検索条件を指定
$query = [
'exclude' => 'retweets,replies',
'max_results' => '10',
];
//URLとクエリを結合
$url = $base_url . '?' . http_build_query($query);
$base_url で エンドポイントのURLを設定していきます。
URL内の xxxxxxxxx はツイートを取得するユーザーIDとなります。
ここでいうIDとは アカウント名やユーザー名ではなくアカウントごとに紐付けられている固有の数字となります。
「EWS」のアカウントでいうと 1341708549823459329 という固有の数字になります。
ユーザーIDはこのサイトなどで確認できるの確認してください。
$query では細かい検索条件を設定できます。
今回では exclude でリツイートとリプライを排除、max_results で取得する件数を10件に設定しています。
こちらの設定もリファレンスで確認できます。
最後に $url の箇所で エンドポイントURLと検索条件のクエリを結合しています。
ヘッダを生成し、cURLで問い合わせをする。
次にAPIを認証するためのヘッダを作成し、そのあとcURLを使用して問い合わせを行います。 ヘッダやcURLについて詳しく解説すると複雑になってしまうため、今回はおまじないと思ってとりあえず記述してください。
//Bearer Token
$token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$header = [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
];
//cURLで問い合わせ
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
$token には前回の申請編で取得した Bearer Token を設定します。 前回の記事は以下から参照できます。
その後、おまじないの処理を通して $result に取得したtweetのデータが格納されます。
しかし、このままだと取り扱いが難しいので外部ファイルのjson化して取り回しがしやすい状態に加工していきたいと思います。
取得したデータを外部ファイルのJSON化する。
さて、取得したデータを外部ファイルのJSONへと変換していきます。
function raw_json_encode($input, $flags = 0)
{
$fails = implode('|', array_filter(array(
'\\\\',
$flags & JSON_HEX_TAG ? 'u003[CE]' : '',
$flags & JSON_HEX_AMP ? 'u0026' : '',
$flags & JSON_HEX_APOS ? 'u0027' : '',
$flags & JSON_HEX_QUOT ? 'u0022' : '',
)));
$pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";
$callback = function ($m) {
return html_entity_decode("$m[1];", ENT_QUOTES, 'UTF-8');
};
return preg_replace_callback($pattern, $callback, json_encode($input, $flags));
}
function outPutJson($tweetdatas)
{
$option = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT;
// jsonファイル書き出し先
$jsonfilepath = "tweet.json";
if (!file_exists($jsonfilepath)) {
touch($jsonfilepath);
}
// ファイルを書き出し
$fp = fopen($jsonfilepath, 'w');
fwrite($fp, sprintf('%s', raw_json_encode($tweetdatas, $option)));
fclose($fp);
}
outPutJson($result);
上記のコードも詳しく解説するには専門的な知識が必要となるので割愛しますが、outPutJson という関数に先程の $result を渡して jsonに加工、その後 tweet.json に保存しるという処理になっています。
あとはこちらで作成したPHPをサーバーに設置し設置したURLへとアクセスすると対象ユーザーの最新ツイート10件を無事に取得できるようになりました!
Twitter APIで取得したデータを確認しよう!
さて無事にツイートを取得することができたので取得したデータを確認しましょう。
取得した「tweet.json」を開くと以下のような構造になっているのが確認できます。
{
"data": [
{
"edit_history_tweet_ids": [
"1590880481369001985"
],
"id": "1590880481369001985",
"text": "「ドラゴンボール ザ ブレイカーズ」\nhttps:\/\/t.co\/G6X7IiF3ve\n\n#webサイトギャラリー\n#エンタメサイトギャラリー\nEWSでは国内外のアニメやゲームなどのWEBサイトをブックマークしています。"
},
〜省略〜
{
"edit_history_tweet_ids": [
"1582167643720585217"
],
"id": "1582167643720585217",
"text": "「LOOP8(ループエイト)」\nhttps:\/\/t.co\/f9vxQZqYRL\n\nスクロールに合わせて8月の日付が進んでいく演出が面白いですね!\n\n#LOOP8 \n#webサイトギャラリー\n#エンタメサイトギャラリー\nEWSでは国内外のアニメやゲームなどのWEBサイトをブックマークしています。"
}
],
"meta": {
"next_token": "7140dibdnow9c7btw423wwlc6s8boxwkr3vet07fiw27r",
"result_count": 10,
"newest_id": "1590880481369001985",
"oldest_id": "1582167643720585217"
}
}
まず “data” の中は、取得したツイートの一覧が配列として格納されています。
その中の一つづつを見ていくと以下のようになります。
{
"edit_history_tweet_ids": [
"取得したツイートの固有ID"
],
"id": "取得したツイートの固有ID",
"text": "取得したツイートのテキスト"
}
今回は何も設定していなかったので最小限の情報のみとなっています。
ちなみにv1.1だとその他すべての情報も一度に取得されていました。
次に “data” の下にある “meta” には取得した際の様々な情報が格納されています。
その中の一つづつを見ていくと以下のようになります。
"meta": {
"next_token": "次に取得する際に参照するトークン",
"result_count": 取得件数,
"newest_id": "取得した最初のツイートの固有ID",
"oldest_id": "取得した最後のツイートの固有ID"
}
こちらは今回は特には使用しませんが、取得上限を超えて取得する際などに必要になってくる情報となります。
まとめ
さてこれでやっと「Twitter API」を使用してツイートを取得することができました。
次回は今回抽出した「tweet.json」を使用して実際にwebページに加工して組み込んでいきたいと思います!