アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

TwitterAPIを使ってみる

…使ってみたのはもう何年か前なんですけど。
自分用メモが残っていたのでブログに書き起こしておきます。

<追記>
2019年3月現在、
API自体も結構変わっているようですし
アプリケーションの認証などがありフローがこの記事と異なっています。
参考までにということでお願いいたします。
</追記>

やりたいこと

Webアプリであるアクションがあったとき、特定のTwitterアカウントからツイートする
(例えば、アプリ内でユーザーの投稿に100以上の「イイネ!」が集まったときに
 公式Twitterが自動で「いま人気の投稿はこちら!」みたいなツイートをするとか)

TwitterAPIの仕組み

  • タイムラインの取得やツイートを行うには、「アクセストークン」が必要になる
  • アクセストークンとは、アカウント情報を暗号化してまとめた文字列
  • アクセストークンを取得するために、アプリとTwitterが以下のやりとりを行っている
  • 発行されたアクセストークンを用いて、ユーザーはTwitterを利用することができる
  • ただし、開発者のアクセストークンはあらかじめ発行しておいてもらうことが可能
    • 不特定多数のユーザーのアカウントと連携して…という内容の開発であれば上記の手順が必要

参考サイト
http://colo-ri.jp/develop/2010/09/twitter_api_oauth.html

開発準備

  • 開発用のTwitterアカウントとモバイル端末を紐づける(認証のようなものだろう)
  • 作成するアプリケーションを登録する
    • https://apps.twitter.com/app にアクセス
    • Create New App より新規登録する
      • アプリ名、説明、サイトアドレス、 戻り先URL
      • Create your Twitter applicationボタンを押下すると登録される
  • 登録情報の変更
    • 「Permissions」タブより、必要に応じて権限を設定する
      • Read Only
        • タイムライン(フォローしている相手のツイート)やプロフィール等のデータを取得することができる
      • Read and Write
        • Read Onlyに加え、ツイートの投稿、リツイート、お気に入り等の操作ができる
      • Read,Write and Access direct messages
        • 上記2つに加え、ダイレクトメッセージの送受信が可能
  • 開発に必要な値の準備
    • APIキーとパスを確保する
      • Keys and Access Tokens タブより、「 Consumer Key(API Key) 」「 Consumer Secret(API Secret) 」を参照
        • 「Consumer Secret」はパスワードのようなものなので外部に知られてはいけない
      • Keys and Access Tokens タブの最下部「Create my access token」を押下
        • 生成された「Your Access Token」項目のうち「 Access Token 」と「 Access Token Secret 」を参照

開発例(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側のサーバトラブルでないかどうかを確認
      • 復旧を待つ
    • 誤ってアプリ連携を解除してしまっていないかどうか確認