こんにちは。カトーです。TwitterAPI案件が多いようなので、検索インデックスを狙って検証で書いてみますよ。タイトルで釣る。概要が分かれば簡単にできますから。去年も書いてますが、まぁ、色々新しくなってますしね。
TwitterAPIの仕組みと流れ
何も難しい事はありません、アプリケーションを登録して、それぞれのキーを取得。アクセストークンを利用してPOSTとGETの関数を叩くだけです。
もちろん例外処理などは必要ですが、ざっくり書けばこんな感じです。
お約束で書いておくと、ユーザー毎の情報を取得しますので、権限によって情報が漏れるとエラい目にあいますので、要注意と共にアプリケーションの登録鍵やトークンは変更してエラーになることを事前にチェックしつつ、例外処理を行いましょう。
TwitterOAuthをサーバーに入れる。
一から書いてもいいですが、手間ですのでありがたくライブラリを使わせてもらいます。
大変感謝です。英語でいうと、Special thanksです。
@see : TwitterOAuth:https://twitteroauth.com/
配置はこんな感じです。
twitteroauth | ダウンロードして解凍したディレクトリー,twitteroauth-0.6.4をリネーム |
login.php | twitterの認証画面 https://api.twitter.com/oauth/authorize?oauth_token=xxxxxxxxへ リダイレクトさせる記述 |
callback.php | 認証後、発行されたトークンを取得するファイル |
リダイレクトファイルの記述を行う。
login.phpを書いてみます。使いまわすので各種キーは定数で書きましたが、別に変数に格納でもかまいません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php session_start();//戻ってきた時も使うので、セッション利用開始 // アプリケーション登録した時に発行された鍵などを記述 define("Consumer_Key" , "xxxxxxxxxx"); define("Consumer_Secret", "xxxxxxxxxx"); define('Callback', 'xxxxxxx/callback.php'); //ライブラリを読み込む require "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; //TwitterOAuthインスタンス生成、リクエストトークン取得 $connection = new TwitterOAuth(Consumer_Key, Consumer_Secret); $request_token = $connection->oauth("oauth/request_token", array("oauth_callback" => Callback)); //callback.php利用する為、セッションに保存 $_SESSION['oauth_token'] = $request_token['oauth_token']; $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; // Twitter認証へリダイレクト $url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token'])); header('Location: ' . $url); ?> |
ここまで書いてアクセスすれば、認証画面は飛びます。
でも戻ってきたときのcallbackが無いので、こちらも書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
session_start(); define("Consumer_Key" , "xxxxxxx"); define("Consumer_Secret", "xxxxxxxxx"); //ライブラリを読み込む require "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; //Twitterからアクセストークンを取得する $connection = new TwitterOAuth(Consumer_Key, Consumer_Secret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_GET['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token'])); //取得したアクセストークンでユーザ情報を取得 $user_connection = new TwitterOAuth(Consumer_Key, Consumer_Secret, $access_token['oauth_token'], $access_token['oauth_token_secret']); $user_info = $user_connection->get('account/verify_credentials'); //ユーザ情報を取得 $id = $user_info->id; $name = $user_info->name; $screen_name = $user_info->screen_name; $profile_image_url_https = $user_info->profile_image_url_https; $text = $user_info->status->text; /// こんな感じで必要な情報を変数にいれたり、 // 各値をセッションに入れたりします。 $_SESSION['access_token'] = $access_token; $_SESSION['id'] = $id; $_SESSION['name'] = $name; $_SESSION['screen_name'] = $screen_name; $_SESSION['text'] = $text; //ここにDBに入れる処理を書いたり、さらにリダイレクトさせたり記述 |
実際にTwitterAPIを利用してみる。
実際にアクセスしてみると、アクセストークンが発行されますので、
このTwitterAPIを利用してみます。記述はこちらも簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//ライブラリを読み込む require "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; //値を設定 define("Consumer_Key", "xxxxxxxx"); define("Consumer_Secret", "xxxxxxxxx"); $accessToken = "ユーザー毎に発行されたAccess Tokenの値"; $accessTokenSecret = "ユーザー毎に発行されたAccess Token Secretの値"; //接続 $connec = new TwitterOAuth(Consumer_Key,Consumer_Secret, $accessToken, $accessTokenSecret); //ツイート送信 $connec->post("statuses/update", array("status" => "ツイート内容")); |
このユーザー毎の情報があれば、ツイートさせたり、DM(ダイレクトメッセージ)を発射したりもできます。
ちなみにDMを発射するのは、
1 |
$connec->post("direct_messages/new", array("user_id" => "ユーザーID","text" =>"ダイレクトメッセージ内容")); |
この辺の関数はREST APIsに記載があります。
https://dev.twitter.com/rest/public
定期的にルールも変更されますが、現時点でそれぞれの規制は書かれています。
TwitterAPI DMの制限
ちなみに案件でDMの検証でおこなってもいましたが、現時点で制限もあり、関数でいうとPOST direct_messages/newはAPI Rate Limitsは、
GET direct_messages | 15回/15分 |
GET direct_messages/sent | 15回/15分 |
GET direct_messages/show | 15回/15分 |
POST direct_messages/destroy | 制限なし |
POST direct_messages/new | 制限なし (頻繁使用でアカウントを凍結される可能性あり) |
参照:https://dev.twitter.com/rest/public/rate-limits |
つまりダイレクトメッセージは制限ないが、15分に15回が基準になってると思うので、ホワイトリスト登録がなくなっているような雰囲気からすれば、この制限を基準に送ることになるのかな?フォーラムに情報がないかと確認してみます。
andypiper氏の2015年7月10日の書き込み
Rate limits for DMs are adaptive due to our antispam rules, but from the support page I linked you’ll see that the max is 1000 per day.
DMの制限は俺達のアンチスパムの基準で決めてるぜ、だけどリンク貼ってるから見てくれ、一日1000回ぐらいだろ(意訳)
https://twittercommunity.com/t/rate-limits-for-direct-messages/45666
ユーザー自身が自分に送れば制限がないが、プッシュされてないようだし、ここは調査ですね。
結構告知などで使ってるようだし、この辺の制限を確認かな。