未分類

Twitter’s standard APIでツイートを取得する手順

Twitter見出し

iOS11からsocial.frameworkが廃止され、Twitterの公式ライブラリ「TwitterKit」を利用している人も多いかと思います。

が、残念なことに2018/10/31でサポートを終了することがアナウンスされました。

と言うわけで、今後のために、公式もすすめている「Twitter’s standard API」に関して

  • 開発者登録
  • ツイートの取得

について解説します。

つぶやき方とかはまた今度。。。

 

公式トップ (英語)
https://developer.twitter.com/en/products/tweets

APIとエンドポイント(英語)
https://developer.twitter.com/en/docs

 

利用条件

2018/7/24に新しい利用条件が発表されて、厳し目になったのでその辺のチェックも重要です。
https://blog.twitter.com/developer/ja_jp/topics/tools/2018/jp-new-developer-requirements-to-protect-our-platform.html

変更点はこんな感じ。

  • developer portal開発者登録が必須
  • 開発者登録の時に、APIの利用目的を説明しないとダメ
  • 利用目的が変わった場合にも説明が必要
  • 開発者登録1アカウントに登録できるアプリは10個まで
  • ツイートおよびリツイートは合計で、3時間で300件まで
  • いいねは、24時間で1000件まで
  • フォローは、24時間で1000件まで
  • ダイレクトメッセージは、24時間で15,000件まで

 

開発者登録

では早速開発者登録をしていきます。
手順、長いです…

developer portalに移動して右上の「apply」をクリックします。
developr登録

「apply for a developr account」をクリックする。
申し込む

開発者アカウントにしたいtwitterアカウントでログインします。
ログイン

ログインされるので、少しスクロールをして「Add a valid phone number」をクリックして電話番号を登録します。
電話番号登録

「country/region」「Phone number」を入力して「Next」をクリック。
090-xxxx-zzzzの場合は、頭の0を抜いて90xxxxzzzzにして番号を入れてくださいね。
電話番号の入力

するとtwitterからショートメッセージで認証番号が届きます。
認証番号が届く届いた認証番号を入力して「Verify」をクリックで無事、認証されます。
認証番号の入力

これで、電話番号登録ボタンが「Continue」ボタンになっているのでクリック。
continueをクリックする

アカウントの詳細を記入していきます。
アカウントの詳細入力
まずはビジネスなのか個人利用なのか。

個人利用の場合(2番目)

  • アカウント名
  • APIを呼び出す国

の入力だけです。

ビジネスの場合(1番目)

  • 組織名
  • 会社名
  • 組織のツイッターアカウント
  • 組織のwebサイト(オプション)
  • APIを呼び出す国
  • 顧客がいる地域(複数選択)
  • 組織の分類
  • 提供するサービスの業種(複数選択)

を入力していきます。

 

次の画面では

  • APIの用途の選択(複数選択)
  • 使用用途に関する4つの質問の答え (合計300文字「以上」)
    1. 中心となる用途は?
    2. ツイートやユーザーの分析をしますか?するなら具体的な内容を
    3. ツイート/リツイート/likeをしますか?するなら具体的なやり方を
    4. どんな感じでツイートを表示させますか?

を入力していきます。
APIの利用用途

次は利用規約への同意です。
利用規約

この後、最終確認のメールが送信されます。
確認メールの送信

メールにある「Confirm your email」リンクをクリックすると、登録が完了されて審査に入ります。
レビュー待ち

次の日には、審査の承認メールが来ました。
審査承認

 

アプリの登録

開発者登録が完了したら、APIを使いたいアプリを登録します。

まず、デベロッパーページにログインします。http://developer.twitter.com/en/account/get-started

次に、Create an app項目にある「Apps」リンクをクリックします。
App登録

次の画面で「Create an app」をクリックします。
Appの登録2

次の画面でアプリに関する以下の情報を入力していきます。

  • アプリ名 (必須)
  • アプリの詳細内容 (必須)
  • URL (必須)
  • Callback URL (オプション)
  • 利用規約URL (オプション)
  • プライバシーポリシーURL (オプション)
  • 組織名 (オプション)
  • 組織のサイトURL (オプション)
  • アプリ内でもAPIの利用内容説明 (必須)

「URL」は、APIを呼び出すプログラムを置く場所、
「Callback URL」は利用ユーザーにログインをさせた時に、結果のコールバックを飛ばすURLです。

必須事項を入力して「Create」ボタンを押すと、規約への同意画面が出て、同意すると登録が完了します。
アプリ登録完了

ベアラトークンの取得

では、早速Twitter’s standard APIを使ってみたいところですが、twitterのデータにアクセスするには

  • アクセストークン (万能だけど取得面倒)
  • ベアラトークン (参照だけだけど取得簡単)

のどちらかが必要です。

アクセストークンは特定ユーザーとして認証してアクセスする許可証をもらう形なので面倒だけど色々できます

ベアラトークンはユーザーとしての認証が無く、簡単に取得できるかわりに参照しかできません

今回はtweetを取得したいだけなのでベアラトークンを取得して使います。

ベアラトークンの取得方法は、APIキーAPIシークレットを結合してbase64エンコードしたものをhttps://api.twitter.com/oauth2/tokenに投げるだけです。

結果として次のようなjson文字列が返って来ます。
「access_token」の所に入っている長い文字列がベアラトークンです。

{
	"token_type":"bearer",
	"access_token":"AAAAAAAAAAAAAAAAAAAAAFe38gBAAAAAsovUYomTdokjqaFAEz1on2qBBwM%3EKN56v2USmyGXu5UJJJMMKRkaQvasEfaLKblb1ZzBUoSEQHpN88"
}

 

ベアラトークンを取得するPHP実装は次の通りです。

$REQUEST_BARER_URL = "https://api.twitter.com/oauth2/token";
$credential = base64_encode( $API_KEY . ':' . $API_SECRET );
$params = [
	'method' => 'POST',
	'header' => [
		'Authorization: Basic ' . $credential,
		'Content-Type: application/x-www-form-urlencoded;charset=UTF-8',
	],
	'content' => http_build_query([
		'grant_type' => 'client_credentials',
	]),
];

$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $REQUEST_BARER_URL );
curl_setopt( $curl, CURLOPT_HEADER, true ); // ヘッダー取得する
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, $params['method'] );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ); // 証明書の検証なし
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ); // 結果を文字列で
curl_setopt( $curl, CURLOPT_HTTPHEADER, $params['header'] );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $params['content'] );
curl_setopt( $curl, CURLOPT_TIMEOUT, 5 );
$res1 = curl_exec( $curl );
$res2 = curl_getinfo( $curl );
curl_close( $curl );

$response = substr( $res1, $res2['header_size'] );
$response_json = json_decode( $response, true );
$bearer_token = $response_json['access_token'];

APIキーAPIシークレットは、開発者管理画面で登録したアプリの「Keys and tokens」タブをクリックするとあります。
APIKEY

つぶやきの読み込み

早速、前項で取得したベアラトークンを使って、つぶやきを読み込んでみます。
こちらもベアラトークンの取得同様とてもシンプルです。

https://api.twitter.com/1.1/statuses/user_timeline.jsonに対して2つのパラメータ

  1. screen_name (取得したいtwitterアカウント名)
  2. count (取得件数。最大100)

を付けてリクエストするだけです。

PHP実装は次の通り

$REQUEST_TWEET_URL = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$REQUEST_TWEET_PARAMS = [
	'screen_name' => '@flickfrogDev',
	'count' => 10,
];
$REQUEST_TWEET_URL .= '?' . http_build_query ( $REQUEST_TWEET_PARAMS );
$tweet_params = [
	'method' => 'GET',
	'header' => [
		'Authorization: Bearer ' . $bearer_token,
	],
];


$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $REQUEST_TWEET_URL );
curl_setopt( $curl, CURLOPT_HEADER, true ); // ヘッダー取得する
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, $tweet_params['method'] );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ); // 証明書の検証なし
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ); // 結果を文字列で
curl_setopt( $curl, CURLOPT_HTTPHEADER, $tweet_params['header'] );
curl_setopt( $curl, CURLOPT_TIMEOUT, 5 );
$res1 = curl_exec( $curl );
$res2 = curl_getinfo( $curl );
curl_close( $curl );

$json = substr( $res1, $res2['header_size'] );

 

結果がjson文字列で取得でき、textキーにつぶやき内容が入っています。

  • user_mentionsキーにはメンション情報
  • hashtagsキーにはハッシュタグ

がそれぞれ入っているので、頑張って文字列解析をしなくてもメンション情報やハッシュタグを取得できます。

$tweets_arr = json_decode( $json, true );
foreach ( $tweets_arr as $tweet ) {

	// つぶやき
	echo $tweet['text'] . '</br>';
	
	// メンション
	if ( count( $tweet['entities']['user_mentions'] ) > 0 ) {
		echo 'メンション </br>';
	}
	
	// ハッシュタグ
	foreach( $tweet['entities']['hashtags'] as $hashtag ) {
		echo $hashtag['text'] . '</br>';
	}
}

 

注意点としては、ツイートの取得には回数制限があって

  • ユーザー認証だと900回/15分
  • アプリ認証だと1500回/15分

となっているので、個人で使う分にはいいですが、サービスとして使うにはこころもとないので、MySQLなどに一旦入れて、ユーザーにはDBから取得した内容を見せるという工夫が必要ということです。

 

公式ドキュメントはこちら
https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline.html