柴犬botをOAuthに対応
いい加減、対応させておかないと7月1日にbotが止まるので対応させました。。。と思ったらベーシック認証の廃止は8月に延期ですか。三毛猫の方はまた後でやろう。
以下、何かの役に立つかもしれない防備録。
【Tuitter/Tuibotter フレームワークによるOAuth対応】
柴犬botはTuitter/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のサイトを参照して下さい。
アプリケーションの登録完了後(「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とかいう仕組みを利用することが推奨されている模様。全然知りませんでした。