第40回 twitter の OAuth認証

はじめに

第38回 RubyでWeb API - bi_naの日記では、twitterのWeb APIを使ってみたが、
これは認証がいらないで使えるAPIであった。認証要らずのAPIはそれほど多くないので、ちょっとしたモノを作るのなら認証は避けて通りなさそうだ。
そこで今回は、OAuthで認証しAPIを使えるようにしてみる。

ここを見ればバッチリ

参考サイトとして、
8分21秒で分かるRubyとOAuthによるTwitterAPIの使い方(動画) - 昼メシ物語
を見させていただきました。
もうここを見ればバッチリなんじゃないかと思いますが、自分の理解をまとめるためにココに示します。

OAuth認証までの道のり

単純にOAuth認証でアクセスといっても、手順がけっこう多い。
手順が長いのでひとつひとつ何をやっているのか理解する必要があるが、
もっとも大切な事は最終目標である「Access Token」と「Access Secret」を手に入れることである。

Access Token」と「Access Secret」を手に入れる道のりは長い.........

Access Token」と「Access Secret」を手に入れるために、他にも手に入れないといけないものがある。
イメージ的にはわらしべ長者的に手に入れたものを順々に使って、次のアイテムを手に入れていく感じとなる。
ちょっとしたRPGそんなイメージだろうか。

RPG的イメージ

RPG的イメージで書くと、
王様から「Consumer Key」と「Consumer Secret」をもらった勇者は小冒険の途中、「Request Token」を手に入れる。
「Request Token」には光が宿っていなかったが、勇者はある方法で、「PIN」を手に入れると同時に「Request Token」に光を宿す事ができた。
勇者はこの光が宿った「Request Token」と「Access Token」を交換する事によって WEB APIをたたく事に成功したのである。
こんな感じである。

Access Token」と「Access Secret」を手に入れる手順

自分で説明してみようとしたが、話がややこしくなりすぎるので、
第1回 OAuthとは?―OAuthの概念とOAuthでできること:ゼロから学ぶOAuth|gihyo.jp … 技術評論社
を参考にするのがよいと思います。

Access Token」と「Access Secret」を手に入れた認証完了

Access Token」と「Access Secret」を手に入れたら、一番始めに手に入る「Consumer Key」と「Consumer Secret」を使って認証処理を行ないWeb APIをたたけるようになる。

gemで入れたソースの場所

gemで入れたソースの場所であるが、leopardの場合、

/Library/Ruby/Gems/

の下にドキュメントやらとまとめられているので見にいくとよい。

意味なくはまったところ

http://u-thule.blogspot.com/2010/07/twitter-ruby-oauth-uninitialized.html
僕もこれでハマっちゃた。
gemで入れるソースにはいってそうな名前付けたらいかんってこったな><

ということでkodukiくんをフォローしている人を表示するソースはこれ

require 'rubygems';
require 'json';
require 'oauth';

h = {
     :consumer_key        => 'キー',            #ここは各自ちがうよ
     :consumer_secret     => 'ひみつ',          #ここは各自ちがうよ
     :access_token        => 'トークン',        #ここは各自ちがうよ
     :access_token_secret => '秘密'             #ここは各自ちがうよ
    };

consumer = OAuth::Consumer.new(
                               h[:consumer_key],
                               h[:consumer_secret],
                               { :site => 'http://api.twitter.com' }
                              );

access_token = OAuth::AccessToken.new(
                                      consumer,
                                      h[:access_token],
                                      h[:access_token_secret]
                                     );

js = JSON.parse( access_token.get('http://api.twitter.com/1/statuses/followers.json?screen_name=koduki').body );
                               

puts js.map{ |i| i['name'] }.join("\n");

URLを自分で書いて、Web APIをたたきかたったので、twitter_oauthを使わずに、oauthだけを使って書きましたが、
色々書いてるときにハマったので、twitter_oauthのソースなどを読んで理解していきました。

サーバ構築

サーバ構築に関するページも作成しました。
プログラムを動かす環境がないというかたは、検討してみてはいかがでしょうか。
http://www.x-shenwu.net/~home_page/sakura_vps/