3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発

twitter_log

OAuth1.0の仕組みからTwitterBotの開発まで自分用メモです。 FacebookやTwitterなどOAuthを利用したシステムは数年前から何度と実装しているのですが、OAuthの詳細な動きについてはそんなに毎回触れたりはせず(ライブラリがいいようにやってくれるので・・・)、たまに使うたびに仕様の再確認という感じなので、自分向けにちょっと内容を砕いて図解化。正確な仕様などはRFCなど公式ドキュメントを参照ください。

目次

  1. OAuth1.0のざっくり解説
    • OAuth1.0とは?
    • 3つの登場人物
    • OAuth1.0フロー
  2. RubyでTwitter bot作成
    • 前準備(コンシューマー登録〜アクセストークン取得)
    • Ruby環境構築
    • Ruby実装

対象

  • RubyでTwitter Botを作ってみたい人。
  • OAuth1.0を(ざっくりと)理解したい人。
  • OAuth1.0は学んだけど、Twitterと照らし合わせると「ん〜・・?」な人。

OAuth1.0とは?

リソースへのアクセス権を第三者へ委譲できる認可プロトコル。よくニュースやゲームアプリの中からTwitterと連動してツイートできたりしますが、これもOAuthの仕組みを利用しています。ユーザーがそれらのアプリに対して、自分のTwitterの権限を委譲することにより、アプリ上からツイートすることができます。

3つの登場人物

  • ユーザー:サービスプロバイダーの利用者です。
  • サービスプロバイダー:TwitterやFacebookなどサービスを提供者です。
  • コンシューマー(=アプリケーション):ユーザーの権限を委譲してもらい、そのユーザーとしてサービスプロバイダーにアクセスすることで、新しいサービスを提供します。

OAuth1.0のフロー

  1. コンシューマー登録
  2. ユーザー認証
  3. アクセストークン発行

以下にその詳細フローを記述。

手順1. コンシューマー登録 & コンシューマーキーGET!

まず最初に、コンシューマーはサービスプロバイダーにコンシューマー登録し、コンシューマーキーを取得します。コンシューマーキーはコンシューマーを利用するために必要な鍵です。手順1,2で必要になります。

twitter-oauth-cosumer-registration

手順2. ユーザー認証 & OAuth証明書GET!

ユーザーに認証してもらうためには、まずサービスプロバイダーに認証用URL(リクエストトークンをパラメーターに付加したURL)を発行してもらいます。そして、その認証用URLにリダイレクトさせ、ユーザーにコンシューマーの使用を許可してもらうことで、OAuth証明書を発行してもらいます。

twitter-oauth-request-token-and-user-auth

手順3. アクセストークン発行

コンシューマーは「コンシューマーキー」と「Oauth証明書」を用いてアクセストークンを発行してもらいます。これでコンシューマーは「ユーザとして」サービスプロバイダーの各種リソースへアクセスすることが可能になります。

twitter-oauth-get-access-token

RubyでTwitter Botを作成

TwitterではOAuth1.0を採用しているので、上記のOAuth1.0と同じ手順でアクセストークンの取得が必要です。コンシューマー登録〜アクセストークン取得までの手順は全てウェブ上(Twitterの管理画面)で行うことができます。実際のニュースやゲーム系のサービスのように不特定多数のユーザーが利用する場合はバックエンドでプログラムを組む必要がでてきますが、TwitterBotのように一人で作って一人で利用する「ユーザー」=「コンシューマー」という場合は、そういった作業は不要で、ウェブ上で簡単にアクセストークンまで取得できます。

Twitterでコンシューマー登録〜アクセストークン取得

内部的な動きは上記のOAuth1.0のフローと同じですが、Twitterの管理画面ではアクセストークンを取得する際に、ユーザー認証は不要になります。(既にログインしているわけなので・・) なので、コンシューマー登録後に簡単にアクセストークンを取得できます。

  1. コンシューマー登録
  2. ユーザー認証 (ボットの場合、自分で作成したコンシューマーを、自分で使うだけなので不要)
  3. アクセストークン発行

1. コンシューマー登録

下記のページからコンシューマー登録できます。 ⇒Twitter Developer create-twitter-app1-with-oauth

登録が完了すると「Consumer Key」と「Consumer Key Secret」が発行されます。ツイート可能にするためには「Settings」タブからAccess項目を「Read and Write」に変更しておいてください。

create-twitter-app2-with-oauth

3. アクセストークン発行

上の画像の下部にある「Create My Account Token」をクリックすると、下記のように「AccessToken」「AccessTokenSecret」が発行されます。発行されるまで少し時間がかかるので、クリック後、少し時間を置いてからページを更新してみてください。

create-twitter-app3-with-oauth

これでアクセストークンを取得できたので、次にRubyで実装します。

Ruby環境構築

  • VPS : ServersMan@VPS
  • OS : CentOS
  • Ruby : 2.0.0
  • Rubygem : 2.0.3 gemが入っていれば、一発でインストールされると思います。(ruby, gemのインストール方法については割愛します)

Ruby実装

Configureでコンシューマーキーとアクセストークンを設定しておきます。Twitter gemのバージョン5.0からoauth_token, oauth_token_secretがそれぞれaccess_token,access_token_secretに変更されたので注意してください。

twitter.rb

ツイート実行。

※ 補足:Twitter Gem 5.0からconfig.oauth_tokenがconfig.access_tokenに変更になりました。今迄、oauth_tokenとaccess_tokenが呼び方が混在していて困惑気味だったので、嬉しい変更ではあります。管理画面でも「oauth_token」ではなく「access_token」と呼び方を統一したみたいですね。 http://rdoc.info/gems/twitter#What_s_New_in_Version_5_

Note: oauth_token has been renamed to access_token and oauth_token_secret is now access_token_secret to conform to the terminology used in Twitter’s developer documentation.

参考

OAuth1.0に関するリンク

Ruby Twitter Gemに関するリンク