CakePHP + OAuth + Twitter API で Bot を作る

2010/06/13 日曜日 1:09 投稿者 zon

前回作った Xrea + CakePHP + MeCab で日本語形態素解析 を組み合わせてマルコフ連鎖でカオスな文章をつぶやく予定だが、今回は OAuth で Twitter API とやり取りして自分のアカウントに「つぶやけ」とツイートする Bot を作るまで。

アプリの登録

自分のアカウントにログインしてから → [設定] → [連携アプリ] → [開発者の方へのこちら] をたどっていくと、「Twitterアプリケーション」というページにたどり着くので「新しいアプリケーションを追加」でアプリを登録する。

登録の注意点

基本的にはあとで変更可能なので、適当に進めて問題ないが、今回は CakePHP から Tweet するので、下記の設定は間違いなくしておく。

  • アプリケーションの種類 : ブラウザアプリケーション
  • Default Access type : Read & Write

OAuth ライブラリ設置

CakePHP で使えるライブラリが配布されていたのでそれを使う。

下記からダウンロードし、解凍したファイルを /vendors/ 配下に設置する。
OAuth consumers for CakePHP – by cakebaker

OAuth 認証から Access Token 取得まで

OAuth 認証には、Consumer key と Consumer secret が必要になるがこれは「Twitterアプリケーション」 から登録しているアプリの詳細を見れば確認できる。

これで、Access Token を取得することができるが、これは下記の記事に詳しく書かれているので参考のこと。
OAuth consumers for CakePHP – by cakebaker

今回は、個人的に(自分のユーザアカウントのみが)使用するため、API を使ってAccess Token 取得しなくても、Twitter Applications | dev.twitter.com → 「My Access Token」 のページで Access Token と Access Token Secret が書かれているためそちらで確認。

CakePHP からツイート

とりあえず、つぶやかせてみるため下記のコントローラを設置 → つぶやくアクションにアクセス → つぶやけ。

< ?php
App::import('Vendor', 'Oauth', array('file'=>'OAuth'.DS.'oauth_consumer.php'));
class BotController extends AppController
{
	var $name = 'Bot';
	var $uses = array();
	// Consumer key の値
	var $consumerKey = 'consumerKey';
	// Consumer secret の値
	var $consumerSecret = 'consumerSecret';
	// Access Token の値
	var $accessToken = 'accessToken';
	// Access Token Secret の値
	var $accessTokenSecret = 'Access Token Secret';

	function update() {
		$consumer = new OAuth_Consumer($this->consumerKey, $this->consumerSecret);

		$tweet = $consumer->post(
			$this->accessToken,
			$this->accessTokenSecret,
			'http://twitter.com/statuses/update.xml',
			array('status'=>'つぶやけ')
		);

		pr($tweet);
		exit();
	}
}

参考

OAuthプロトコルの中身をざっくり解説してみるよ – ゆろよろ日記
Twitter API – TwitterまとめWiki
Twitter API Wiki / Twitter API Documentation (英語)
Twitter API 仕様書 (日本語)
PHP+OAuthでTwitterのBotを作ってみる – SDN Project

トラックバック一覧

この記事にはトラックバックがついていません。

コメント一覧

この記事にはコメントがついていません。

RSS feed for comments on this post.

コメント投稿

Sorry, the comment form is closed at this time.