柴犬botをOAuthに対応

いい加減、対応させておかないと7月1日にbotが止まるので対応させました。。。と思ったらベーシック認証の廃止は8月に延期ですか。三毛猫の方はまた後でやろう。

以下、何かの役に立つかもしれない防備録。

【Tuitter/Tuibotter フレームワークによるOAuth対応】

柴犬botTuitter/Tuibotterフレームワークで動作しており、このフレームワークはOAuthに対応しているため、面倒なおまじないを書いたりする必要はまったく無いのですが、botのプログラムを置いているレンタルサーバーにはPECL::OAuthがインストールされていないため、以前から借りているOsukiniサーバーにPECLをインストールし、botを動作させる事にしました。

・PECL::OAuthのインストール

PHPは標準でパッケージがインストールされていたため、PECLのインストールから始めます。PECL::OAuthのインストールについては以下のサイトを参考にしました。

「PECL::OAuth」のインストール « FlatLabs Blog

まず、yumで以下のパッケージをインストールします。

# yum install curl-devel

これでPECL::OAuthがインストールできるかと思いましたが、PECLコマンドを叩くとそんなものは無いと言われるため、こちらのサイトを参考に以下のパッケージをインストールしました。(うろ覚え)

# yum install -y php-pear
# yum install -y php-devel
# yum install -y httpd-devel

APC等のパッケージもあった方が良いかと思いましたが、今回はOAuthが目的なのでまたの機会に。続いて以下のコマンドを実行し、PECL::OAuthをインストールします。

# pecl install oauth-beta

以降は参考サイトと同様にiniファイル編集し、Apacheを再起動します。

# vi /etc/php.d/oauth.ini
extension=oauth.so を追加。
# /etc/init.d/httpd restart

・Twitterにアプリケーションを登録し認証キーを取得する

PECLを利用出来る環境が整ったため、Twitterにアプリケーションを登録し、OAuthで認証を行える様にします。

botアカウントでTwitterにログインし、ログインした状態で以下のURLにアクセス後、アプリケーションの登録を行います。登録時の詳細についてはTuitter/OAuthのサイトを参照して下さい。

http://dev.twitter.com/apps/

アプリケーションの登録完了後(「Consumer key」と「Consumer secret」をメモしておく)Tuitterに同梱されている「tuitter4oauth.php」を使ってアクセスキーが入手できるということでしたが、何やら上手く行かなかったため、こちらのサイトを参考に、再びhttp://dev.twitter.com/apps/にアクセスし、登録したアプリケーションを選択後、右画面に表示されている「My Access Token」をクリックして「Access Token (oauth_token)」と「Access Token Secret (oauth_token_secret)」を取得しました。

・プログラム本体の修正

認証キーの取得が完了したため、プログラム本体の修正を行います。といっても、実体化するオブジェクトを「Tuitter」から「TuitterOAuth」に変更するだけです。

以下サンプル。

// TuitterOAuthをロードする
require_once '/パス/Tuitter/TuitterOAuth.php';

//Tuitter認証設定
$conskey = "CONSUMER_KEY";
$conssec = "CONSUMER_SECRET";
$acceskey = "ACCESS_KEY";
$accesssec = "ACCESS_SECRET";

//TuitterOAuthオブジェクトのインスタンス
$tuitter = new TuitterOAuth($conskey, $conssec, $acceskey, $accesssec);

//Twitterにポストする
$tuitter->sendMessage('ワオーオース!!');

またTuibotterのコードはTuibotterのiniファイルのみの書き換えで完了です。

以下、Tuibotter.iniのサンプル。

[Account]
authType = OAuth
consumerKey = CONSUMER_KEY
consumerSec = CONSUMER_SECRET
accessKey = ACCESS_KEY
accessSec = ACCESS_SECRET

[Environment]
cache = true
cacheDir = cache

cacheHttp = false
cacheHttpDir = http_cache

[Behaviours]
BeReplied = /パス/replied.php

・OAuthとは関係無く詰まったところ

OAuthとはまったく無関係ですが、サーバーを移した影響で現在sqliteが動いてません。sqliteはたくさん返信してくれた人を自動フォローするために利用しようかと考えてましたが、現状、まったく利用していないので先延ばしにします。phpinfoを確認したら without-sqlite とかなってるのでこの辺が原因じゃないかと思います。多分このサイトが参考になる。というかsqlite3はインストールされるけどsqlite2がインストールされていなかった。おまけにPDOとかいう仕組みを利用することが推奨されている模様。全然知りませんでした。

IT起業アカデミア