#author("2017-05-11T22:14:35+09:00","default:wikiwriter","wikiwriter") &tag(Twitter,TwitterAPI,OAuth); *目次 [#qadfa29f] #contents *参考情報 [#f1bc763e] -[[PHPでTwitter APIのOAuthを使う方法まとめ - 頭ん中:http://www.msng.info/archives/2010/01/twitter_api_oauth_with_php.php]]…PHP用。コールバックベース。 -[[[ヅラド] Twitter4Jを使ったTwitterのOAuth認可サンプル:http://www.nilab.info/zurazure2/001125.html]]…Java用。PINベース。 -[[System.Exit – ruby で OAuth を使ってみる実験:http://jugyo.org/blog/3349]] *基本の流れ [#o9ec6076] -Twitterにアプリケーション登録を登録し、Consumer Key と Consumer Secret を取得。 -Access TokenとAccess Token Secretを取得する。以下のどちらかの方法を使う。 --認証用URLを自前で用意しユーザーがログオン。コールバックで取得。…めんどくさい。 --Twitterの認証画面を表示。PIN番号が表示されるのでそれを入れてもらう。…簡単。 -Consumer Key / Consumer Secret / Access Token / Access Token Secretを使ってAPIを使う。 *Twitterにアプリケーション登録 [#b5b80b1b] -Twitterに自分のアカウントでログオン。http://twitter.com/ -https://twitter.com/apps→新しいアプリケーションを追加。 -アプリケーション登録申請を行う(あとから変更可能)。 ,項目,必須,説明 ,アプリケーションのアイコン,×,認証時に表示される? ,アプリケーション名,○,tweetのfrom XXXのXXXの部分に使われる。 ,アプリケーションの説明,○,適当 ,アプリケーションのウェブサイトURL,○,アプリケーション名からリンクが張られる? ,所属会社/団体,×,適当 ,サイト,×,適当 ,アプリケーションの種類,○,クライアントはbotやその他の用途。ブラウザアプリケーションはWebアプリ。 ,コールバックURL,×,ブラウザアプリのときだけ入力 ,Default Access type,○,つぶやきたいときは、Read & Write。表示だけの場合は、Read-only ,Use Twitter for login,×,不明 -登録が完了するとConsumer keyとConsumer secretが表示されるのでメモっておく。 *iOSで認証(2012/07/23(月): 追記) [#w9be5577] -xAuthだとDMが使えない。さらにxAuthをなかなか使わせてくれなくなったので素直にOAuthを使うようにしたほうがよい。iOS用のOAuth便利ライブラリが公開されている。 --[[gtm-oauth - Google Toolbox for Mac - OAuth Controllers - Google Project Hosting:http://code.google.com/p/gtm-oauth/]] *Access TokenとAccess Token Secretを取得する(PINベース) [#w8515668] -BOTのように一つのアカウントに関連づけられるクライアントアプリケーションの場合、PINベース認証でAccess TokenとAccess Token Secretを取得して保存するだけでOK。 -ブラウザで認証画面を表示する前に関連づけたいアカウントであらかじめログオンしておくと間違えない。 **Javaで実装 [#e2648e33] [[[ヅラド] Twitter4Jを使ったTwitterのOAuth認可サンプル:http://www.nilab.info/zurazure2/001125.html]]を参考にさせていただく。 #pre{{ public class TwitterOAuthAccessTokenGetter { public static void main(String[] args) throws Exception { //Twitterにアプリケーションを登録したときに表示されるConsumerKey ConsumerSecretをセットする。 String consumerKey = "XXXXXXXXXXXXX"; String consumerSecret = "YYYYYYYYYYYYY"; //認証用URLが表示されるのでブラウザでアクセスし表示されるPINコードを読み込む。 //アカウントが複数ある場合あらかじめ関連づけたいアカウントでログオンしておくと良い TwitterFactory factory = new TwitterFactory(); Twitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret); RequestToken requestToken = twitter.getOAuthRequestToken(); String authorizationURL = requestToken.getAuthorizationURL(); System.out.println(authorizationURL + " にウェブブラウザでアクセスして認証を許可してください。"); System.out.println("認証を許可したらウェブブラウザにPINコードが表示されます。"); System.out.println("PINコードを入力して[Enter]キーを押してください。"); BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); String pin = r.readLine(); AccessToken accessToken; if (pin.length() > 0) { accessToken = twitter.getOAuthAccessToken(requestToken, pin); } else { accessToken = twitter.getOAuthAccessToken(); } //AccessToken AccessTokenSecretを表示。アプリケーションでこれを使う。 int userId = twitter.verifyCredentials().getId(); String token = accessToken.getToken(); String tokenSecret = accessToken.getTokenSecret(); System.out.println("UserId=" + userId); System.out.println("Token=" + token); System.out.println("TokenSecret=" + tokenSecret); } } }} **Rubyで実装 [#b0ce8dcf] あらかじめoauthライブラリはインストールしておく。 sudo gems install oauth 使い方はJava版と同じ。 #pre{{ require 'rubygems' require 'oauth' CONSUMER_KEY = 'XXXXXXXXX' CONSUMER_SECRET = 'YYYYYYY' consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site=>'http://tw\ itter.com') request_token = consumer.get_request_token print "次のURLにアクセスしてください: #{request_token.authorize_url}\n" print "PINコードを入力して[ENTER]を押してださい\n" pin = STDIN.gets.chomp print "PIN CODE=#{pin}\n" access_token = request_token.get_access_token(:oauth_token => request_token.tok\ en, :oauth_verifier => pin) print "Token=#{access_token.token}\n" print "Secret=#{access_token.secret}\n" }} ※[[src256/ruby-twitter-oauth: Twitter OAuth:https://github.com/src256/ruby-twitter-oauth]]を作成した。 *トラブルシューティング [#qbcb7a1b] **認証ページでエラー(おっと…) [#k24bf4af] 意味不明な以下のメッセージが表示された場合、認証用のURLのコピペ間違いなどが考えられる(MacのターミナルからURLをコピーしようとしたとい、折り返し部分にバックスラッシュが含まれていてこのメッセージが表示されたことがあった)。 #pre{{ おっと!このページはもう有効ではありません。あなたと同じトークン情報を誰かがすでに利用してしまったようです。元のサイトに戻ってもう一度試してみてください。たぶん単純なミスでしょう。 }}