以前GASとTwitter APIを使ったフォロワー数の自動記録ツールを作成しました。現在も現役でせっせと記録を続けてくれています。
今回はGASではなく、PHPを使ったTwitter APIの使い方を記事にしたいと思います。PHPにした理由は、最終的にはワードプレスでごにょごにょするためです。
分量が多いのと色んな内容がごちゃごちゃしてしまうのを避けるために記事を何個かに分けて書きます。
今回の内容は、タイムラインを取得する!基本中の基本を押さえます。ユーザータイムラインを中心に取得方法が似ている2つのタイムラインを併せて紹介します。 いいね(お気に入り)のリストはタイムラインではないのですが、同じように取得できるのでまとめて紹介します。
ちなみに
- ホームタイムライン
フォローしてるユーザーのツイートが流れるタイムライン - ユーザータイムライン
特定のユーザーのツイートが流れるタイムライン
プロフィールタイムラインとも呼ばれる? - メンションタイムライン
特定ユーザーに向けた@付きのツイートが流れるタイムライン
です。(私も呼び名は知りませんでした)
必要なもの
- ツイッター開発者アカウント
ツイッターアカウントとは別にAPIを利用するために必要になります。本記事ではアカウントの登録とAPPの作成は割愛しています。
タイムラインの取得方法
ステップ1. Twitter Developersにてアクセストークンを取得
今回はアクセストークンを使ってます。Keys and tokensタブに記載されているAPI key、API secret key、Access token、 Access token secretが必要です。
ステップ2. TwitterOAuthを設置
OAuth(オー オース)は、権限の認可を行うためのオープンスタンダードです。今回、タイムラインの取得のためにOAuth認証用ライブラリの1つであるTwitterOAuthを使用しました。
公式サイトにはインストールはComposerとManualの2種類の方法があり、Composerが簡単と書いてます。Composerってナンジャラホイだったのでマニュアルでやりました。充分簡単でした。
- Githubに上がっているコードから最新版のソースコードをダウンロードします
勇気を持って以下をクリック!(ここが一番の難関です)
- ダウンロードしたファイルをサーバー上の適当な場所にアップロードします
- 作成するPHPファイルでライブラリを読み込む
作成するPHPファイルで以下の2行を書けばあっけなく終わります。
require "twitteroauth/autoload.php"; //アップロードしたtwitteroauthフォルダへのパスを入れる
use Abraham\TwitterOAuth\TwitterOAuth;
ステップ3. PHPファイルを作成
ツイートデータ構成確認用と基本的な要素の表示用の2種類のコードを用意しています。ユーザータイムラインの取得を例にしています。
コード1. ツイートデータ構成確認用コード
まずはツイートデータ構成確認用コードです。このコードによりタイムラインで取得したすべての情報がどのように入っているのかを確認できます。
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
//ステップ1でTwitter developersから取得した値を代入
$consumerKey = "xxxxxxxxxx";
$consumerSecret = "xxxxxxxxxx";
$accessToken = "xxxxxxxxxx";
$accessTokenSecret = "xxxxxxxxxx";
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//ホームタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/home_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//ユーザータイムラインを10ツイート取得
$timeline = $connection->get("statuses/user_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//メンションタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/mentions_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//いいねのリストから10ツイート取得
//$timeline = $connection->get("favorites/list", ["count" => 10, "tweet_mode" => "extended"]);
if(isset($timeline->errors)) {
//取得失敗
echo "Error occurred. ";
echo "Error message: " . $timeline->errors[0]->message;
} else {
//取得成功
echo('<pre>');
var_dump($timeline);
echo('</pre>');
}
?>
コード1では$timelineに入力したツイートのデータをvar_dumpを利用して出力しています。 var_dump単体で使用した場合は、非常に読みにくいものが吐き出されるので、上記にあるように<pre>を利用するのがオススメです。
実行結果です。
画像はブラウザ画面のキャプションなので全部入ってませんが、私の最新のツイートの内容が表示されています。ツイートとして外に見えているもの以外にも多くの情報がここに詰まっています。
タイムラインの取得時に付与するパラメータについて
タイムライン取得時にパラメータを付与することにより、取得するデータを変更することができます。詳しい使い方の説明が必要なものは別記事としますので、ここでは3つのパラメータのみ紹介します。
- count
このパラメータをつけることで取得するツイート数を変更できます(最大200件)。
何も指定しなければデフォルトの20件となります。本記事のコードでは10件のみ読み込むようにしています。 - tweet_mode
このパラメータにextendedを指定することでfull_text フィールドが取得できるようになります。
以前は文字数制限が厳しく、画像(JPEG、GIF)やURLを貼った場合には書ける文字数が140文字より減っていました。現在の画像やURLを除いて140文字というルールに基づくツイート内容がfull_textに入ります。
このパラメータを付与しない場合は、textフィールドにツイート内容が表示され、 画像やURLを含んだ文字数の多いツイートは最後の方が「…」と省略されます。必須のパラメータなので本記事のコードにも付与しています。 - screen_name
ユーザータイムライン/いいねのリストに付与するパラメータです。本記事のコードでは付与していないのでAPIキーの持ち主のツイート(私のツイート)やいいねリストが結果として得られています。パラメータを付与することで自分以外のユーザータイムラインやいいねのリストを取得できます。
なお、screen_nameはユーザー名のことで「@xxxxx」の@以降の「xxxxx」の部分です。
別記事を書きましたので、パラメータについて詳しくはこちらをご覧ください。
コード2. 基本的な要素の表示用コード
色々な情報が詰まっている中から基本的な要素をいくつか抜き出して表示するコードを紹介します。
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
//ステップ1でTwitter developersから取得した値を代入
$consumerKey = "xxxxxxxxxx";
$consumerSecret = "xxxxxxxxxx";
$accessToken = "xxxxxxxxxx";
$accessTokenSecret = "xxxxxxxxxx";
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//ホームタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/home_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//ユーザータイムラインを10ツイート取得
$timeline = $connection->get("statuses/user_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//メンションタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/mentions_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//いいねのリストから10ツイート取得
//$timeline = $connection->get("favorites/list", ["count" => 10, "tweet_mode" => "extended"]);
if(isset($timeline->errors)) {
//取得失敗
echo "Error occurred. ";
echo "Error message: " . $timeline->errors[0]->message;
} else {
//取得成功
for ($i=0; $i < count($timeline); $i++) {
echo "<p>";
echo "ステータスID: " . $timeline[$i]->id . "<br>";
echo "名前: " . $timeline[$i]->user->name . "<br>";
echo "ユーザー名(screen_name): " . $timeline[$i]->user->screen_name . "<br>";
echo "ツイート本文: " . $timeline[$i]->full_text . "<br>";
echo "作成日: " . date("Y-m-d H:i:s", strtotime($timeline[$i]->created_at)) . "<br>";
echo "ツイート: " . $timeline[$i]->source . "<br>";
echo "リツイート数: " . $timeline[$i]->retweet_count . "<br>";
echo "いいね数: " . $timeline[$i]->favorite_count;
echo "</p>";
}
}
?>
実行結果です。基本的な要素が抽出されてます。
ひと手間かけて得られるもの
残念ながら個別ツイートへのリンク、ツイートの埋め込みコードは取得した要素に含まれていません。そこはひと手間かけて取得する必要があります。料理もひと手間かけるとおいしくなるでしょ?不味くなることもあるけどね。
個別ツイートのリンク
個別ツイートのリンクは「https://twitter.com/」+「ユーザー名」+「ステータスID」という造りになっています。以下のコードで生成できます。
$url = "https://twitter.com/" . $timeline[$i]->user->screen_name . "/status/" . $timeline[$i]->id;
ツイート埋め込みコード
ここまで各要素を1つずつ抜き出すのを見てきましたが、結構大変ですよね。手作業でちょっちょとやったら手に入るツイートの埋め込み用コードの取得ができれば、それを使うだけである程度のものができちゃいます。APIを利用してコードを取れます。
ツイート埋め込みコードは、埋め込みコード生成用にもう一度リクエストが必要になります。
以下のコードのように「リクエスト用URL生成→リクエスト」を行うとJSON形式で戻ってきます。「html」フィールドに埋め込みコードが入っています。
$url2 = "https://publish.twitter.com/oembed?url=https://twitter.com/" . $timeline[$i]->user->screen_name . "/status/" . $timeline[$i]->id;
$embed = file_get_contents($url2);
全部入り
個別ツイートのリンクとツイート埋め込みコード生成もすべて入れたコードはこのようになります。
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
//ステップ1でTwitter developersから取得した値を代入
$consumerKey = "xxxxxxxxxx";
$consumerSecret = "xxxxxxxxxx";
$accessToken = "xxxxxxxxxx";
$accessTokenSecret = "xxxxxxxxxx";
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//ホームタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/home_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//ユーザータイムラインを10ツイート取得
$timeline = $connection->get("statuses/user_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//メンションタイムラインを10ツイート取得
//$timeline = $connection->get("statuses/mentions_timeline", ["count" => 10, "tweet_mode" => "extended"]);
//いいねのリストから10ツイート取得
//$timeline = $connection->get("favorites/list", ["count" => 10, "tweet_mode" => "extended"]);
if(isset($timeline->errors)) {
//取得失敗
echo "Error occurred. ";
echo "Error message: " . $timeline->errors[0]->message;
} else {
//取得成功
for ($i=0; $i < count($timeline); $i++) {
echo "<p>";
echo "ツイートID: " . $timeline[$i]->id . "<br>";
echo "名前: " . $timeline[$i]->user->name . "<br>";
echo "ユーザー名(screen_name): " . $timeline[$i]->user->screen_name . "<br>";
echo "ツイート本文: " . $timeline[$i]->full_text . "<br>";
echo "作成日: " . date("Y-m-d H:i:s", strtotime($timeline[$i]->created_at)) . "<br>";
echo "ツイート: " . $timeline[$i]->source . "<br>";
echo "リツイート数: " . $timeline[$i]->retweet_count . "<br>";
echo "いいね数: " . $timeline[$i]->favorite_count . "<br><br>";
$url = "https://twitter.com/" . $timeline[$i]->user->screen_name . "/status/" . $timeline[$i]->id;
echo 'ツイートURL: <a href="' . $url . '">' . $url . '</a><br><br>';
$url2 = "https://publish.twitter.com/oembed?url=https://twitter.com/" . $timeline[$i]->user->screen_name . "/status/" . $timeline[$i]->id;
$embed = file_get_contents($url2);
echo json_decode($embed)->html;
echo "</p>";
}
}
?>
実行結果です。
APIを利用したタイムライン取得回数の制限について
最後になりましたが、APIを利用したデータの取得には制限があります。15分の間に何回リクエストするかが制限対象となります。リンクは公式サイトです。
- ホームタイムライン:15回/15分
- ユーザータイムライン:180回/15分
- メンションタイムライン:75回/15分
- いいねのリスト:75回/15分
あとがき
基本に絞ったのにこの分量…。自分が作っているもの関連のみですが、Twitter API関連で書きたいところはまだまだあるのでまた書きます。(書ききるのはいつなるのだろうか…)
第2弾としてパラメータについて書きました。
コメント