ロリポップのcronを使ってTwitterボットを作ってみよう

[PHP][Twitter]ロリポップのcronを使ってTwitterボットを作ってみよう

4月末に、格安レンタルサーバでお馴染みのロリポップが cron機能に対応しました。
そこで、Twitterボットを試しに作ってみました。


今回作ったのは、「みんながFavoriteした発言でつくる、全自動Twitterまとめサイトもどき ふぁぼったー」をクロールして、新しいふぁぼられがあったらReplyで通知してくれるボットです。

TwitterAPI認証は今後ベーシック認証は使えませんので、OAuthを使います。


※2012/1/11 追記
コードのメンテしていないので、favotter の構成が変わっているとそのままだと動かない可能性があります。(今はふぁぼられたらメールが来る時代ですから‥)

動作環境

ロリポップの新しい構成のサーバでの動作となります。

PHP Version 5.2.6
MySQL 5

使用するスクリプト

今回作成したスクリプトgithub に置いてます。(ふぁぼったーをクロールするボットなので fabot...)
GitHub - taketin/fabot: favotter_crawl_bot
ここからソースを落としてください。


あと、OAuth用のライブラリとしてTwitterの公式サイトからも紹介されている、twitteroauth というライブラリを使用します。

ボットの登録から、ライブラリのダウンロードまでは以下のサイトが詳しいです。
PHP+OAuthでTwitter - SDN Project
ここを参照に、ボットアカウントの作成及びライブラリのダウンロードを行ってください。

ボットの準備

先程 github からダウンロードした fabot ディレクトリ内の class ディレクトリ内に、twitteroauth ライブラリ中の、OAuth.php と twitteroauth.php を入れます。


さらに、fabot/config.ini の中を編集します。

[account]
;twitter account name
account[]           =
account[]           =

[bot]
;bot account name
account             =

; Consumer key - OAuth
consumer_key        =

; Consumer secret - OAuth
consumer_secret     =

; Access Token
access_token        =

; Access Token Secret
access_token_secret =

[account] の下の account[] は、クロールしたいアカウント名を入れます。たくさんある場合は行をコピーして増やしてもいいし、1人でいいのであれば1行に減らしてください。

それから先ほどの参考サイトをもとに、ボットの OAuth 認証キーを入力します。
(※config.iniの編集の際、値をクォーテーションでくくらないでください)

データベースを用意

続いて、データベースを用意します。(めんどいけど、既読管理する為にDB必要なのです。。)

ロリポのユーザー専用ページで、こんな感じでMySQL5のDBが作成できます。
作ったら、先程の config.ini の database の欄にデータを入力します。

[database]
host                = mysql515.phy.lolipop.jp
dbname              = LAxxxxxxxx-fabot
account             = LAxxxxxxxx
password            = 設定したパスワード

貼りつけてる画像で言うと、上記設定内容になります。


次に、ロリポPHPMyAdmin にログインして、テーブル作ります。
以下のSQL実行してください。

create table fav_tweet( 
    fav_id varchar(16), 
    account varchar(16),
    created_on varchar(19),
    modify_on varchar(19),
    primary key(fav_id)
) type=InnoDB;

create table fav_follower(
    id int auto_increment,
    fav_id varchar(16),
    account varchar(16),
    created_on varchar(19),
    modify_on varchar(19),
    primary key(id)
) type=InnoDB;


こんな感じになったらDB出来上がりです。

ロリポFTPでソースをUPします

ソースをUPします。
その前に、今回cronから実行させますので、include_pathを絶対パスにしておきます。
includeの記述があるのは以下の3ファイルです。

index.php
class/TwitterAPIHandler.php
class/twitteroauth.php

この中で、require_once してるとこのパスを絶対パスに書き換えます。

書き換えたらロリポFTPでファイルを上げます。

ファイル上げ終わったらこんな感じの構成になります。
ロリポFTP、複数ファイル一気にUPLOADできたりして良いですよ)

php.ini の設定をします

次に、必要な php.ini の設定をしときます。
今回、文字コードutf-8 で統一しますので、そのあたりの設定など。

これもロリポの設定メニューから上記のように登録します。

cron に登録します

ロリポの cron は最短10分置きから設定できます。
今回はふぁぼったーの更新ペースが毎時、という事なので、こちらも毎時一回実行するように設定してみます。

こんな感じ。


設定するとこのように表示されます。

※ ちなみに、通知メールアドレスを登録しておくと実行結果をメールでお知らせしてくれますので、うまく動くのを確認するまでは登録しておいた方がいいと思います。

実行結果を確認

うまく動いた場合、最初の実行で大量の reply が飛んでくると思います(1ページ分のふぁぼりを通知する為)。
その後はクロールの度に増えたふぁぼりを通知してくれます。

こんな感じで。
文言は TwitterAPIHandler.php 内の該当箇所を適当にいじったら良いと思います。


php.ini とファイルの文字コードがうまく設定できてないと、

<?xml version="1.0" encoding="UTF-8"?>
<hash>
 <request>/statuses/update.xml</request>
 <error>Incorrect signature</error>
</hash>

なんてエラー返されます。

それでは!