2010年5月1日土曜日

Twitter の OAuth 学習用ライブラリ Eduwitter v0.2

前回のエントリーで Eduwitter を作った際の反省点、理解が及んでなかった部分を踏まえ更新。
http://www13.atpages.jp/llan/tw/eduwitter/eduwitter_test.php

1. 設置
1.1 ダウンロードとアップロード
1.2 外部アプリを登録する
1.3 アクセストークンを取得
1.4 ツイートする最小限のコード
2. Eduwitter
2.1 Eduwitter のコンセプト
2.2 メンバメソッドの依存関係
3. 文献
4. 謝辞


1: 設置
1.1: ダウンロードとアップロード

  Eduwitter をダウンロードします。
  Eduwitter callback page から、zip または tar.gz のうち好きなアーカイブ形式を選んでください。

  アーカイブの中には
    eduwitter/eduwitter.php
    eduwitter/eduwitter_test.php
    eduwitter/twitter.com.crt
  の三つが入っています。
  これらをお使いのサーバへアップロードしてください。

1.2: 外部アプリを登録する

  外部アプリを登録します。
  登録申請先: http://twitter.com/apps
  コールバックURLは先ほどアップロードしたファイルのうち eduwitter_test.php を指定してください。
  外部アプリのアクセスタイプは標準で「Read Only」ですが「Write & Read」にすると、ツイートすることも可能になります。

  登録を終えると
    Consumer key
    Consumer secret
  の二つを与えられます。

  eduwitter_test.php を開き
/*---------------------------------------------------------
                   Configure Section
---------------------------------------------------------*/
$consumer_key = '<Consumer key>';
$consumer_secret = '<Consumer secret>';

  に先ほどの Consumer key と Consumer secret を入力し、再度アップロードします。

1.3: アクセストークンを取得するまで

  この章での手順は
    1. リクエストトークンを得る
    2. 認証を済ませる
    3. アクセストークンを得る
  です。

  1. リクエストトークンを得る

  アップロードした eduwitter_test.php にアクセスします。
  「Eduwitter's requestToken Link.」をクリックします。
※注意 環境によってはリクエストトークンの取得に失敗します。 php-curl が サーバ証明書 を取得し損ねているようです。 念のためにサーバ証明書を同梱してあります。 eduwitter.php を開き該当部分をこのように変更すると解決するかもしれません。

 static $ssl_cainfo = ''; // './twitter.com.crt';
 // ↓
 static $ssl_cainfo = './twitter.com.crt';
  2. 認証を済ませる

  次に認証を行います。
  「Eduwitter's Authentication Link.」をクリックします。
  認証後は指定のコールバックURLのページに戻されます。

  上手くいけば、ここで
    oauth_token ( == access_token )
    oauth_token_secret ( == access_token_secret )
  が手に入ります。
  リクエストトークンと区別するため、 access_token, access_token_secret と名付けておきます。
  この二つを保管しておきます。

1.4 ツイートする最小限のコード

  単純なツイートを行うサンプルプログラムです。
  これを eduwitter.php と同じディレクトリへ置いてください。

<?php
require_once 'eduwitter.php';

$consumer_key = '<Consumer key>'; // 外部アプリの Consumer key
$consumer_secret = '<Consumer secret>'; // 外部アプリの Consumer secret
$access_token = '<Access token>'; // 先ほど取得した access_token
$access_token_secret = '<Access token secret>'; // 先ほど取得した access_token_secret

/* Eduwitterの初期化 */
$eduwitter = new Eduwitter($consumer_key, $consumer_secret);
$eduwitter->setAccessToken($access_token, $access_token_secret);

/* API の接続に関する設定 */
$url = 'http://twitter.com/statuses/update.xml';
$method = 'POST';
$post = array(
 'status' => '猫がぬころんだ' // ツイートする内容
);

/* API 叩いて結果を出力 */
$response = $eduwitter->requestOAuth($url, $method, $post);
echo $response;

  外部アプリの登録で「読み書き」に設定していれば書き込みが出来るはずです。
  これをごにょごにょと改造すれば、ボットなども作れます。

2: Eduwitter

  Eduwitter のコードはこちら(github)。

2.1: Eduwitter のコンセプト

  Eduwitter は単体のファイルで Twitter OAuth API を扱えるライブラリを目指して作成されました。
  PEARライブラリを使う事なく、php5 と php5-curl で動きます。
  割と質素なPHP環境でも動かせるでしょう。

2.2 メンバメソッドの依存関係

  主要なメンバメソッドと、その関数が呼び出すメンバメソッド。
  処理の流れは下へ、インデントが呼び出すメンバメソッド

  リクエストトークン

    getReuestToken … リクエストトークンを取得する
    ├getParameter_RequestToken … request_token API に必要なパラメータを作成する
    |├createParams … 基本的なパラメータを作成する
    |├createSignature … signature を作成する
    ├eduwitteConnect … twitter.com の API に接続する

  アクセストークン

    setRequestToken … request_token をセットする
    ├setOAuthToken … oauth_token をセットする

    getAccessToken … アクセストークンを取得する
    ├getParameter_AccessToken … access_token API に必要なパラメータを作成する
    |├createParams … 基本的なパラメータを作成する
    |├createSignature … signature を作成する
    ├eduwitteConnect … twitter.com の API に接続する

  OAuth API

    setAccessToken … access_token をセットする
    ├setOAuthToken … oauth_token をセットする

    requestOAuth … OAuthを使って API を叩く
    ├getParameter_OAuth … OAuth に必要なパラメータを作成する
    |├createParams … 基本的なパラメータを作成する
    |├createSignature … signature を作成する
    ├eduwitteConnect … twitter.com のAPI に接続する

3: 文献

参考ページ:
  OAuth 公式リファレンス
    http://oauth.net/core/1.0a/
  OAuth 公式リファレンス日本語訳 (twitterで紹介していただいた)
    http://openid-foundation-japan.github.com/draft-hammer-oauth-10.html
  OAuth 公式リファレンスの手順 Image
    http://oauth.net/core/diagram.png
  OAuthの手順 Flash (kuraさんの放送でリスナーさんが貼ってくれたページ)
    http://labs.unoh.net/2008/02/oauth.html

  Twitter API 公式
    http://apiwiki.twitter.com/
  Twitter API の日本語訳
    http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt

  Python での実装、また苦戦した部分など
    http://techno-st.net/2009/11/26/twitter-api-oauth-0.html

  SDN Project - PHP & abraham's twitteroauth での導入方法
    http://www.sdn-project.net/labo/oauth.html
  abraham's twitteroauth
    http://github.com/abraham/twitteroauth

  Yahoo! OAuth
    http://developer.yahoo.co.jp/other/oauth/

  前回の Eduwitter のエントリー
    http://www13.atpages.jp/~llan/wp/?p=730

4: 謝辞

  最初に Twitter OAuth でのボット作成時にお世話になった SDN Project。
  動くようになるまで abraham さんの twitteroauth で幾度となく挙動をチェックしました。
  また kura さん、そして kura さんの放送リスナー、twitter 上で相談に乗っていただいた方々へ、ありがとうございました。

0 件のコメント:

コメントを投稿