Twitter BOT「Check Time」を作りました(技術メモ付)

2012/04/03

Twitterのタイムラインは水のように流れていくのでどの時点でどのようなつぶやきが発信されたのか分かりにくくなっています。

そこで1時間おきに定刻をつぶやいて他のつぶやきがおおよそどの日時の範囲内にあるかが分かるような役割をさせようと思い、「Check Time」というTwitter BOTを作りました。

同じようなBOTは切り取り線などが以前からあるんですが、最近勉強に使っているドットインストールのレッスン一覧を見ていたらツイッターボットを作るというレッスンが公開されていたので突然BOTを作ってみたくなって自分専用の切り取り線を作りました。

レッスンにしたがって進めていったらとても簡単にBOTを作ることができたので、同じようにBOTを作りたいかたのために一連の流れを紹介します。

準備

開発環境

PHP 5.2以上

関連資料・記事

Twitter OAuth用PHPライブラリ「twitteroauth」

以下のサイトより配布ファイル一式(zip)を入手する

Twitterアカウント

BOT用アカウント

Twitter公式サイトより通常のアカウント作成を行う

アプリケーション登録

Twitterの開発者ページにアクセス
「Create an app」をクリック
作成したアカウントでログイン
アプリケーションに必要な情報を登録して利用規約に同意のチェックを入れ、「Create your Twitter application」をクリック

これでアプリケーションが登録されるので、以下はプログラムからアクセスするための設定を行う。

「Settings」タブをクリック
つぶやきを書き込むためにApplication Typeのチェックボックスを「Read only」から「Read and Write」に変更
それ以外はそのままで「Update this Twitter application's settings」をクリック
「Details」タブをクリック
APIにアクセスするのに必要な以下の情報を入手

・Consumer key

・Consumer secret

画面下の「Create my access token」をクリックしてAccess tokenを生成(表示されない場合はリロードする)

・Access token

・Access token secret

BOT作成

ファイル構成は以下のようになる。

config.php

設定ファイル

bot.php

BOT本体

twitteroauth/OAuth.php
twitteroauth/twitteroauth.php

あらかじめ入手しておいたtwitteroauth配布ファイルを展開して上記の2ファイルのみ使用

config.php作成

先ほど入手したアクセス情報を定義する。

<?php

define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxx');
define('CONSUMER_SECRET', 'xxxxxxxxxxxxxxxxx');
define('ACCESS_TOKEN', 'xxxxxxxxxxxxxxxxx');
define('ACCESS_TOKEN_SECRET', 'xxxxxxxxxxxxxxxxx');

?>

bot.php作成

現在日時をつぶやくプログラムを作る。

方法は簡単で、TwitterOAuthクラスのインスタンスを生成してつぶやく文字列をpostメソッドに引き渡すだけである。

<?php

// Initial
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

date_default_timezone_set('Asia/Tokyo');

// Auth
$conn = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN ,ACCESS_TOKEN_SECRET);

// Generate Tweet message
$date_y = date("Y");
$date_m = date("m");
$date_d = date("d");
$date_w = date("D");

$time_h = date("H");
$time_m = date("i");

$date_time = $date_y . "/" . $date_m . "/" . $date_d . "(" . $date_w . ")";
$date_time = $date_time . " " . $time_h . ":" . $time_m;
$msg = "****** " . $date_time . " ******";

$params = array(
        'status' => $msg
);

// Tweet
$result = $conn->post('statuses/update', $params);

?>

出力は以下のようになる。

****** 2012/04/03(Tue) 18:00 ******

尚、エラー処理は考慮していないので必要に応じて実装する。

cron設定

作成したプログラムを定期的に実行するため、BOTを設置するサーバ上でcronの設定を行う。

レンタルサーバなどではGUIで設定する場合もあるが、ここではcrontabで設定する。

以下のように設定すると、毎時0分にプログラムを実行する。

% crontab -e
00 * * * * /usr/bin/php <BOT設置のパス>/bot.php

(*) phpの実行プログラムは環境によって適切なパスを指定すること。