FuelPHPでTwitterBotを作成する

  • SumoMe

様々な環境・言語でTwitterのBotが実装されています。今回は、FuelPHPのTaskという機能を利用して、ターミナルからツイートできるように実装します。

目標

今回は「ツイートするBotを作成する」ことを目標とします。ツイートするだけならば、もっと簡単に作成できますが、フレームワークを利用したwebアプリケーションからツイートする場合などもあるでしょうし、DBと簡単に連携できるところも魅力だと思います。

環境

今回利用した環境は以下のとおりです。

OS Mac OS X 10.8.5
スクリプト言語 php 5.3.6
フレームワーク Fuelphp 1.7.1
ライブラリ codebird-php 2.4.1

PHPはインストールされていること。

今回はMacOSX上で環境構築を行いましたが、CentOSを利用し、まったく同じ構成で実際にサービスを走らせています。Windows上ではcronに準ずるような、定期的にコマンドを実行するようなソフトウェアを利用できれば、同じような処理が可能になります。少し探したら、以下のサイトがみつかったので、これを参考にすれば出来るような気がします(確かめてません)

準備

FuelPHPのインストール

以下のページからFuelPHPをダンロードします。執筆時の最新は1.7.1でしたのでこれを利用しています。

FuelPHP » A simple, flexible, community driven PHP5.3 framework.
http://fuelphp.com/

ダウンロードが終了したら、zipファイルを解凍し、任意の位置に配置します。フォルダ名を「tweetbot」へ変更しました。

codebird-phpのインストール

以下のページからcodebird-phpをダウンロードします。執筆時の最新リリースは2.4.1でしたので、これを利用します。

codebird-php | Free software downloads at SourceForge.net
http://sourceforge.net/projects/codebird-php.codebird.p/

ダウンロードしたファイルを解凍すると、srcというディレクトリが現れます。このディレクトリを「codebird」と変更し、FuelPHPのディレクトリtweetbot/fuel/app/venderディレクトリの中へ移動します。

Twitterアカウント登録

Bot用アカウントが必要な場合は、新しくTwitterのアカウントを取得しましょう。Botを運用するアカウントを既に用意しているようだったらスキップしてください。

Twitter
https://twitter.com/

アプリケーションを登録する

作成するアプリーケーション(今回はbot)をTwitterに登録します。登録することで、Twitterへ接続するためのトークンを取得することができます。ドットインストールにそのままずばりの項目がありますので、そちらを参考にすると良いでしょう。

#02 ツイッターアプリを登録しよう | PHPとjQueryで実装する「もっと読む」 – プログラミングならドットインストールhttp://dotinstall.com/lessons/more_php_v2/21802

アプリケーションを登録するには、Twitterの開発者向けページで行います。開発者向けページは以下のページです。

Twitter Developers
https://dev.twitter.com/

開発者向けページでも、Botを運用するTwitterアカウントでサインインしなければ、登録はできません。サインインしましょう。右上の「Sign in」から行えます。

登録

サインインすると、「Signin」の部分が、自身のアイコンへ変わったと思います。アイコンをクリックすると、自身が管理しているアプリケーションの管理画面へのリンクがありますので、開いてください。

myapplicationlist

開いた画面に、「Create a new appliction」というボタンがあります。このボタンを押すと、新しいアプリケーションを登録することができます。押して作業を進めましょう。

createnewapp

画面が進むと、以下の項目がありますので、適切に入力してください。

Name アプリケーション名
Description アプリケーションの説明
URL アプリケーション用のwebページ。無ければ代替のページをとりあえず指定する。今後用意したら変更する。今回は「http://127.0.0.1/」としました
Callback URL 今回は自分自身しか利用しないアプリケーションなので空白のまま

規約を読んで、守れるのならば、「Yes, I agree」にチェックを入れ、セキュリティのCAPTCHAを入力したら、「Create your Twitter Application」を押して登録完了です。アプリケーション名が既に使われていたり、パスワードの強度が低い場合は変更してください。

アプリケーションを登録すると、アプリケーションの設定などが確認・変更できる管理画面が現れます。

アクセスレベルの変更

登録したアプリケーションの管理画面のタブ「Detials」を確認すると、「Access level」が読み込みのみとなっているはずです。このままで、投稿(書き込み作業)ができませんので、変更をします。

access_level

タブ「Settings」を開くと、設定を変更することが出来ます。ここで、Application Typeを「Read and Write」へ変更し、ページ下部の「Update this Twitter application’s settings」ボタンを押して設定を保存します。

appType

もう一度「Detials」タブからAccess Levelを確認してください。

トークン取得

接続するために、接続用のトークンを取得します。
「Detials」タブを開き、ページ下の「Create my access token」ボタンを押して、トークンを作成します。画面に変化が起きない場合、少し時間を置いて、再読み込みしてください。ページの下部に「Access toke」と「Access token secret」が表示されていれば、成功です。

配置済みのcodebirdディレクトリの中に、テキストエディタで「codebird-config.php」を作成し、以下のようにphpのプログラムを書きます。それぞれ、トークンやキーの値は管理ページの「Detials」タブの表から値を入力します。

<?php

define('CONSUMER_KEY', 'Consumer keyの値');
define('CONSUMER_SECRET', 'Consumer secretの値');
define('ACCESS_TOKEN', 'Access tokenの値');
define('ACCESS_TOKEN_SECRET', 'Access token secretの値');

投稿プログラム作成

tweetbotのtasksディレクトリに新しいファイル(tweet.php)を作成します。

tweetbot/fuel/app/tasks/tweet.php

このディレクトリに置かれ、Taskのルールに従って記述すると、コマンドラインから実行することができます。

今回作成した投稿プログラムは以下のようになります

<?php

namespace Fuel\Tasks;

class Tweet
{
	public static function run()
	{
		require_once(APPPATH.'vendor/codebird/codebird.php');
		require_once(APPPATH.'vendor/codebird/codebird-config.php');


		\Codebird\Codebird::setConsumerKey(CONSUMER_KEY, CONSUMER_SECRET);
		$cb = \Codebird\Codebird::getInstance();
		$cb->setToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
	
		$reply = $cb->oauth2_token();
		$bearer_token = $reply->access_token;
		$cb->setBearerToken($bearer_token);
		
		$message = 'bot投稿テスト';

		$reply = $cb->statuses_update('status='.$message);
	}
}

FuelPHP全体の命名規則なのですが、クラスの頭文字を大文字とし、ファイル名はそのクラス名の小文字とします。つまり、「tweet.php」の中にはTweetクラスが定義されていることになります。フレームワークが呼び出しの際にこの規則を使っていると思うので、気をつけてください。

簡単な解説

コマンドラインからこのクラスを指定すると、run関数が実行されます。run関数では、用意したcodebirdやtwitterのトークンなどを読み込みます。カスタマーキーなどを設定し、codebirdのインスタンスを生成します。アクセストークンなどを指定し、一時的な認証(bearer token)を設定して、statuses_updateで投稿しています。忘れていましたが、Twitterは現在の状態を投稿するシステムなので、statusというんですね。

実行

これでTwitterの設定も、プログラミングも完了です。さっそく実行しましょう。今回のプロジェクトのトップディレクトリである「tweetbot」ディレクトリをターミナルで開きます。開いたら、以下のようにコマンドを打ち込んでEnterしてください。

php oil refine tweet

ここで、phpはすでにパスを通した状態なので省略して書きました。このように実行すると、アプリケーション登録したアカウントにメッセージが投稿されます。

status_update

コマンドの解説

このコマンドはphpでoilというファイルを実行しています。oilはFuelPHPのトップディレクトリに配置されているファイルです。このoilに対して色々と命令をすると、様々な働きをしますが、今回は「Taskを実行する」ために「refine」というキーワードにつづいて、実行したいTask「tweet」を実行しました。前述したとおり、tweetとはTweetクラスを示しており、Taskではrun関数が実行されます。

おわりに

今回はSOCKS:CLOCK (http://socks-clock.com)で使用した投稿部分のプログラムをまとめました。本サービスではcronを利用して、毎時0分に投稿プログラムを実行しています。Twitterなど他のサービスを跨ぐようなプログラム(昔はマッシュアップという言葉が流行りましたね)は様々なところでつまづき、大変だと思います。この記事が一助になれば幸いです。

FuelPHPでTwitterBotを作成する” への1件のコメント

  1. ピンバック: Twitter APIをFuelPHPで利用する | さたけむ.net

コメントは受け付けていません。