phpでtwitterbotを作ってみる(作成)の続きです。phpスクリプトが作成できたと思うので、実際にxrea+で設置してみたいと思います。
要求事項
xrea+より上位のサービスと契約していることが条件になります。shellで接続できる場合は、手段が別にあると思うので調べてみてください。コントロールパネルのようなもので、xrea+と同様なサービスが提供されている場合がありますが、私はxrea+以外を使ったことがないのでわかりません。
前回の記事までで、単体で動作確認済みのphpスクリプトファイルが用意できているとします。
環境の問題
今更感がありますが、どのように動作しているか考察してみます。
botというものは、特定の処理(この場合はphpスクリプト)を一定時間毎に行うものです。この、一定時間毎に処理を呼び出す機構をどうやって実現するのかというわけです。
一定時間毎なので、24時間365日昼夜問わず起動しているパソコンで行わせる必要があることがわかります。自宅にそのような用途で用いているサーバ風パソコン(またはサーバ)があればそのまま導入できますが、通常はなかなか用意できるものではありません。そこで、私はWebサーバ用途で借りているxrea+を利用することにしました。本来の用途とは少し外れますが、規約的にも問題ないはずです。これを用いてbotを運用している先駆者もいらっしゃいます。
処理の問題
では、これで環境の問題はクリアしました。今度は、一定時間前に決まった処理をさせるにはどうすればいいのか、という問題が立ちふさがります。これは、cronジョブを用いることで簡単に解決できます。cronジョブとは、xrea+のコントロールパネルから利用できるサービスのひとつで、設定した時間毎にshellスクリプトを実行させることができます。
「phpを実行させたいのにshellスクリプトとかいう訳のわからないスクリプトが実行できても、どうしようもない」と思いますが、なんとかなります。shellスクリプトとは、コマンドラインで行いたい処理の流れを記すものです。つまり、shellスクリプトの内部にphp [filename].phpを書けば、実行したshellスクリプトの中に書いてあるphpスクリプトも実行されるという算段です。
御託は良いので、とりあえずshellスクリプト例を置いておきます。拡張子は[.sh]にしてください。
#!/bin/sh cd /virtual/[username]/public_html/[userdirectory]/ /usr/local/bin/php koedame_follow_mentions.php /usr/local/bin/php koedame_follow_followers.php exit
通常ならば、[public_html]以下に置かないほうが良いでしょう。bot本体にブラウザからアクセスされる可能性があるからです。今回は、さまざまな個人的理由により、公開ディレクトリのある場所に置いています。
phpは絶対パスで記述したほうが良いみたいです。絶対パス以外(phpのみ)で試したことがありますが、一応動きました(どうやらパスが通っているようです)。各サーバによって仕様が違うのかもしれません。
[warning]文字コードと改行コードには十分気をつけてください。改行コードは、必ずLF(UNIX)を用いなければならないようです。文字コードに関して明確なことが言えませんが、話によるとEUCあたりで良いようです。間違いないのがTeraTermでSSHログインして、その場でファイルを作成することですが、少々面倒です。[/warning]
アップロード
これらのファイルを、実際にアップロードしてみます。一部の情報が先行していましたが、shellスクリプト内のcd [path]先にアップロードします。
cronジョブの設定
理論は上で述べたとおりです。コントロールパネルから、「CRONジョブ」を選択してください。ファイル名を入力する部分は、先ほど記述したshellスクリプトファイルを選択してください。
botの場合は、「何時間ごとに実行」「何分ごとに実行」とやりたいはずですから、そのように記述します。以下が記述例です。[*]部分は、未入力で設定すると、勝手に補完されます。
0 * * * * // 毎時0分に実行(1時間ごとに実行) 20 * * * * // 毎時20分に実行 40 * * * * // 毎時40分に実行
お気づきと思いますが、上記の例をすべて同じshellスクリプトファイルについて記述すると、擬似的に20分ごとに実行させることができます。
メール配信の停止
cronジョブでは、実行されるたびに設定したメールアドレスに宛てて実行結果のメールが送付されます。いくらなんでも邪魔すぎるので、こうしてやることで制限します。
test.sh 1> /dev/null test.sh >/dev/null 2>&1
上ではエラーメールのみ配信されるようです。下ではすべてのメールが配信されないそうです。何も付けなければ「正常に動作した」というメールがいちいち届きます。
環境構築から実際の動作まで一通りの流れを解説しました。案外簡単ですね。
ピンバック: phpでtwitterbotを作ってみる(作成) | jikkenjo.net