cakephpでtwitterのOAuthを利用してBOTを作ってcron実行するまで | 外部記憶

外部記憶

http://twitter.com/n0bisuke

twitterのbotを作ってみます.
言語はcakephpです.
サーバはcentos5.2です.


まずはtwitterにアプリ登録から,
BOTにするtwitterのアカウントでsign inします.
$外部記憶

・creat a new applicationから新しいアプリを登録します.
$外部記憶

登録画面
$外部記憶
Name: アプリの名前でfromの部分です.「○○から」の表示名.日本語の設定も可能
Description: アプリの説明.てきとーなものでも大丈夫. 10~200文字の間で設定
WebSite: アプリのウェブサイトURL. fromをクリックした際にリダイレクトするページです.
Callback URL: (とりあえず設定しなくて大丈夫)

$外部記憶
Developper Rules Of The Road: チェックします
CAPTCHA: 画像の文字を入力
入力が終わったら「Create your Twitter application」でアプリ作成.

アプリ作成が成功するとこんな画面に.
$外部記憶

・アプリのタイプ設定します.
$外部記憶
Application Type: Read, Write and Access direct messagesを選択します.
(Read and Writeでも大丈夫ですが,DMを利用する場合を考慮)
「Update this Twitter application's settings」で情報を更新します.

・access tokenを取得します.
Detailsのタブを選択します.
$外部記憶
ページ下部の「Create my access token」を選択.
OAuth toolのタブから確認できます.
$外部記憶
ちなみにconsumerKey,consumerSecret,accessToken,accessTokeSecretの値は後で利用します.

cakephpでプログラムを書いて行きます.
この記事を参考にそのまま行います.

・cakephp用のライブラリをダウンロードします.たぶん「cakebaker-oauth-consumer-○○○○.zip」の様なファイル名です.
・ダウンロードしたzipファイルを解凍してvendorsフォルダ内のOAuthフォルダをcakephpのapp/vendorsフォルダにアップロードします.
・コードを書きます. botコントローラのupdateアクションに書いてみます.

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);
//twitterの仕様で一日の内に同じ文章は呟けないので,とりあえず時間を呟く事にする.
$mes = date('Y年m月d日h時i分s秒です.');

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

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


・試しに,bot/updateをブラウザから実行してみます.
$外部記憶
twitterを確認してみると,時間をつぶやいてくれいます.

定期的に自動でつぶやく設定をする.
サーバ側で自動でプログラムを動かしてくれるcrontabを利用して定期的に自動ツイートさせます.
ココを参考にしました

・crontabで呼び出すスクリプトを作成します.
[VENDORS]/shells/ に cron.sh を作成し,以下を記述

#! /bin/sh
/usr/bin/php $1

今回は/usr/bin/phpだったが
$which php を実行して場所を確認した方が良い.

[APP]/vendors/shells/にcronフォルダを作成し,その中に controller_action.php を作成

<?php
//$_GET['url'] = "コントローラ名/アクション名";
$_GET['url'] = "bot/update";
require_once dirname(dirname(dirname(dirname(__FILE__)))) . "/index.php";

と記述する.

・crontabの設定をします
vi等のエディタでcrontabを編集します.一応rootになっておきました.
#vi /etc/crontab

*/1 * * * * root sh [VENDORS]/shells/cron.sh [APP]/vendors/shells/cron/controller_action.php

↑を追記します.これで保存するとひとまず完成です.
一分毎に時間を呟きます.
crontabの書き方はココを参考にさせてもらいました.実行の間隔は細かく設定できます.

成功しているかどうかをすぐに確認する為に一分毎にしましたが,もう少し間隔を空けて呟かせる方が実用的だとおもいます.

crontabの設定を簡単に行ってくれるツールもあります.

とりあえず,これで一分毎に時間を呟いてくれるtwitterBotが完成しました.
お疲れ様です.