TwitterAPIを使ってみる
…使ってみたのはもう何年か前なんですけど。
自分用メモが残っていたのでブログに書き起こしておきます。
<追記>
2019年3月現在、
API自体も結構変わっているようですし
アプリケーションの認証などがありフローがこの記事と異なっています。
参考までにということでお願いいたします。
</追記>
やりたいこと
Webアプリであるアクションがあったとき、特定のTwitterアカウントからツイートする
(例えば、アプリ内でユーザーの投稿に100以上の「イイネ!」が集まったときに
公式Twitterが自動で「いま人気の投稿はこちら!」みたいなツイートをするとか)
TwitterAPIの仕組み
- タイムラインの取得やツイートを行うには、「アクセストークン」が必要になる
- アクセストークンとは、アカウント情報を暗号化してまとめた文字列
- アクセストークンを取得するために、アプリとTwitterが以下のやりとりを行っている
- 発行されたアクセストークンを用いて、ユーザーはTwitterを利用することができる
- ただし、開発者のアクセストークンはあらかじめ発行しておいてもらうことが可能
- 不特定多数のユーザーのアカウントと連携して…という内容の開発であれば上記の手順が必要
参考サイト
http://colo-ri.jp/develop/2010/09/twitter_api_oauth.html
開発準備
- 開発用のTwitterアカウントとモバイル端末を紐づける(認証のようなものだろう)
- 携帯端末のSMSで認証する方法(他の方法もあるようだが未確認)
- Twitterアカウントにログイン
- 設定→モバイル
- モバイル端末の電話番号を送信
- SMSで届いた確認コードを入力
- <追記>何故か認証が通らないときのtips(わりと謎現象だけど確かに解決した)</追記>
- 携帯端末のSMSで認証する方法(他の方法もあるようだが未確認)
- 作成するアプリケーションを登録する
- https://apps.twitter.com/app にアクセス
- Create New App より新規登録する
- アプリ名、説明、サイトアドレス、 戻り先URL
- Create your Twitter applicationボタンを押下すると登録される
- 登録情報の変更
- 開発に必要な値の準備
開発例(ZendFrameworkの場合)
Zendのライブラリが使用できます。
(library/Zoom/Oauth/twitteroauth.php)
特定アカウントのみ使用する場合
// ↓define的なものにバラすなり何なりはご自由に。 $tw_obj = new TwitterOAuth( "hoge", // Consumer Key(API Key) "fuga", // Consumer Secret(API Secret) "piyo", // Access Token "yomo" // Access Token Secret ); // ツイート $param_list = array( 'status' => "これがツイート本文", ); $tweet = $tw_obj->post("statuses/update", $param_list);
大変お手軽。
ツイート機能に限らず、
"post"の部分と引数の組み合わせを変更するだけでTwitterが提供するあらゆる操作が可能です。
https://dev.twitter.com/rest/public
不特定多数のユーザーが使用する場合
認証機能1:ユーザーを認証ページへ案内するまでの処理
$tw_obj = new TwitterOAuth( "hoge", // Consumer Key(API Key) "fuga" // Consumer Secret(API Secret) ); // リクエストトークンの取得 // →戻り値は配列形式で、 // キー「oauth_token_secret」「oauth_token」は認証後も使用するため、 // セッションやDB等のうち適切な方法を用いて残す必要がある // (ただし、アクセストークン取得後は不要となる) $request_token_list = $tw_obj->getRequestToken("http://開発者サイトでも設定した戻り先URL"); // 認証用のURLを取得 $authorize_url = $tw_obj->getAuthorizeURL($request_token_list['oauth_token']); // 取得したURL($authorize_url)にリダイレクトさせる // リダイレクト先(twitterサーバ)でユーザ認証を行った後、更に定義された戻り先URLにリダイレクトされる // 尚、戻り先URLにはパラメータ「oauth_token(引数で渡したのと同じ値)」「oauth_verifier」が付与される // (oauth_verifierも認証後使用するため、セッションやDB等を用いて残す必要がある) // 例:http://hoge.net/?oauth_token=xxxxx&oauth_verifier=yyyyy
認証機能2:認証後の戻り先URLで行う処理
$tw_obj = new TwitterOAuth( "hoge", // Consumer Key(API Key) "fuga", // Consumer Secret(API Secret) $oauth_token, // 認証で得た Access Token $oauth_token_secret // 認証で得た Access Token Secret ); // アクセストークンの取得(認証で得た「oauth_verifier」を引数に渡す) // →戻り値は配列形式で、 // キー「access_token_secret」「access_token」を得られる。 // これはタイムラインの取得・ツイート等で必要となるため、 // セッションやDB等のうち適切な方法を用いて残す必要がある $access_token_list = $tw_obj->getAccessToken($oauth_verifier);
ツイート機能:特定アカウントのみを使用する場合と同様のため省略。
オブジェクト生成時に、認証で得た「access_token_secret」「access_token」を引数に渡す点が異なる。
トラブルシューティング
- ツイートされない場合
- Twitter側のサーバトラブルでないかどうかを確認
- 復旧を待つ
- 誤ってアプリ連携を解除してしまっていないかどうか確認
- https://twitter.com/settings/applications
- 解除している場合、開発者用ページで再度アクセストークンを発行
- 発行してもらったアクセストークンをツイート機能に反映
- Twitter側のサーバトラブルでないかどうかを確認