超簡単!ツイッター・ボットを自前で動かす(3)

ツイッター・ボットオペラ対訳プロジェクト管理人です。先週に引き続き、「定時つぶやき」ボットを自前で設置するまでの体験記、その第3回、最終回です。

オペラ対訳プロジェクトBOT
ボットを自前で動かす(1)
ボットを自前で動かす(2)

前々回、ツイッター・ボットを動かすための作業をふたつに分けました。

1.プログラムを作って設置する
2.自動化する

そして前回、1.を説明し、ボットを手動で動かすところまで実現しました。携帯電話で設置したプログラムに1時間毎にアクセスすれば、手動で「定時つぶやき」が可能です。でもそういう作業は本来コンピュータが得意のはず。あと一息なので、是非とも2.を実現しましょう。


クーロン?…クローン?…cron とは何か


私はそれがなんだかわからないまま、それが「クーロン」と発せられるのをよく耳にしていました。おそらく「クローン羊」の「クローン」との混同を避けるためあえて「クーロン」と呼ぶのではないかと思います。今回ボットを自前で立てるにあたり、「cron」の語源は「時を司る神クロノス」なのだと知ってようやく積年の疑問が氷解しました。

「cron」とはタイマーです。ぶっちゃけ目覚まし時計です。

この神は時間になると起きあがって、あなたの設置したプログラムを大きなハンマーでドンと打ちます。すると仕掛けた「定時つぶやき」が流れるというわけ。


とりあえず SetCronJob を使う


プログラムの設置なんかよりも、この無料サービスを見つけるまでが一番時間がかかりました。あとで書きますが、「cron」の選定にはボット制作者はみなさん苦労しているようです。とりあえず、「無料」「タイマー間隔は1時間以上」という条件であればここを使えばいいと思います。

SetCronJob(追記:2017年1月に完全有料化してしまいました

海外のサービスですが高校レベルの英語で十分理解できるはずです。2009年から稼働しているらしいし、使用して1カ月になりますが、1度変な動きをしたほかは定時に仕事をしてくれています。まあ、1カ月で1度の事故ってのは多いですけど、問題を起こした部分はわかっているので、また同じ事故を起こしたら管理者にメールしてみようと思います。

コントロールパネルはいたってシンプルです。「Time pattern」と「URL to call」を設定します。

「Time pattern」は「select detail time values (show/hide)」を表示(show)させて時刻を設定します。「ctrlキー」を押しながらクリックして「cron」を動かしたい時刻を選択します。時間表示は当然日本時間ではなく「UTC≒グリニッジ標準時」です。ありがたいことにコントロールパネル最下部に「UTC」のデジタル時計が表示されていますので、それを参考に日本時間を逆算して設定できます。

ちなみにオペラ対訳プロジェクトBOTは今のところ「日本時間の7:13から24:13まで毎時18回(深夜6時間お休み)」の設定にしています。その場合「Minute」で「13」、「Hour」で「0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,22,23」を選択します。

「URL to call」は、前回説明したプログラムを置いた場所=URLを設定します。

例)http://wwwxx.atpages.jp/xxxxx/EasyBotter/bot.php

このサービスで少しだけやっかいなのが、無料利用者の場合「月に1度サービス更新が必要」という点です。有効期限(その日のUTC零時に停止)はコントロールパネルに表示されています。また更新日が近づくとメールが送られてきます。有効期限前日までにコントロールパネルの「Renew for free」というリンクをクリックすればいいだけです。(ああ、それもcronがやってくれたら)

更新が面倒な人は有料へ、タイマー間隔を1時間以下に設定したい人は有料へ、そういうなかなかよくできた商売です。


これで自動化が完了


SetCronJob で設定した時刻になったら、EasyBotter に充填したつぶやきがあなたのツイッターに流れるはずです。もしうまく行かなかったら、原因を切り分けてください。SetCronJob が悪いのか、EasyBotter が悪いのか。SetCronJob のコントロール・パネルの「ふきだしマーク」をクリックすると、ログを見ることができます。設定した時刻に仕事をしているか確認できます。EasyBotter にエラー・ログを記録する機能は備わっていないようです。動かないとき、まずは手動で動くかどうか、確認してみることです。


なぜみんな「cron」探しで苦労~ンしているのか


タイマーを数分間隔、例えば「2分間隔」に設定したいからです。なぜ1時間ではダメかというと、「自動リプライ返し」をしたいからです。有名な修造botのように、呼びかけると「自動リプライ返し」をしてくれるツィッターが、もし1時間間隔で「cron」を設定していると、タイミングが良ければ(=cronで設定されている時刻直前であれば)数秒でリプライが返ってきますが、タイミングが悪ければ、リプライが返ってくるまでに最大1時間かかってしまいます。そんなに待たされると興ざめですよね。

一方で「cron」サービス提供者はなぜ「無料」で「数分間隔の設定」を許さないかと言えば、それを許せばサービス維持コストが増えてしまうからです。「2分間隔」は「1時間間隔」より、サーバに30倍の負荷が掛かります。サーバの数を増やさないと対応できなくなってしまいます。実際、「数分間隔の設定」を許していたある海外のサービスは、日本のbot制作者の利用が増えすぎて高負荷になってしまい、日本からのアクセスを制限しているという噂もあります。

そういうわけで、ボット制作者は理想の「cron」を求めて掲示板で情報交換したり、裏技を考案したり、なかなかたいへんみたいです。

EasyBotter cronの設定をする

さて、オペラ対訳プロジェクトBOTも「自動リプライ返し」をしています。しかし、「定時つぶやき」は自前に移行したものの、そういう「cron」にまつわる事情から、「自動リプライ返し」はいままで通り twittbot のASPサービスを利用しています。ちなみに twittbot の「cron」は「無料版は10分間隔」「有料版は3分間隔」で動かしているようです。ですから、オペラ対訳プロジェクトBOTからの「自動リプライ返し」は最大10分待ってくださいね。

「自動リプライ返し」はこちら →


SetCronJob でも分間隔の無料タイマー設定は可能?


裏技というほどのおおげさなものではありませんが、EasyBotter の説明でも言及されている通り、工夫すれば無料アカウントでも分間隔(1時間未満)で「cron」を動かすことができそうです。私はまだ試していないので、あくまで予想です。

α.ひとつの無料アカウントで複数の「CronJob」を設定し、ひとつのボットを動かす
β.複数の無料アカウントで、ひとつのボットを動かす

α.またはβ.、あるいは両方の組み合わせで、実現できそうです。β.はイメージできると思うのでα.だけ説明します。

SetCronJob はひとつの無料アカウントに50リソース・ポイント(RP)が付与されています。1日当たり24回「cron」を動かす「CronJob」をひとつ設定すると8RP、18回なら6RP、という具合にサーバに与える負荷に応じてポイントが差し引かれます。つまり、1日当たり18回「cron」を動かす「CronJob」であれば、8種の「CronJob」を設定できます。それら8種の「CronJob」でひとつのボットを動かし、かつ設定する時刻は、それぞれ毎時0分、7分、14分……49分、56分というようにずらして設定すれば「7分間隔」でボットを動かすことができるはずです。α.とβ.を組み合わせれば「1分間隔」もできそうです。


プログラマーへの期待


なんとなくボットが動いてしまったことに味をしめて、オペラ対訳プロジェクトBOTへの追加機能を模索しています。しかし、プログラムを書けないまでも、読めないことにはこれがなかなか難しい。EasyBotter の改造事例などは非公式wikiや掲示板、プログラマーのブログなどで見つかるのですが、それを組み込んだり、さらに改造して組み込むとなるとけっこう勉強が必要です。

まあ勉強はしますけどね、でもウィキ使いの端くれとしては、オープンソースとかバザール方式とかの可能性を信じる者としては、このようなフリープログラムがどんどん進化しバージョンアップを重ねていかないことに不満も感じているのです。非公式wikiとかブログに改造事例をちまちま掲載するのではなく、オープンソース開発の場を設定してプログラムのバグ取り(バージョン2.05にはバグや古いAPIの記述がまだ残っているみたいです)や、機能拡張を公式に進めてもらいたい。文系人間の私はこっちでそれをやるから、プログラマーはそっちの世界でがんばってほしい。


謝辞


最後になりましたが EasyBotter を提供されている phaさまに感謝です。ボットを twittbot で開始した当初は、いつかは自前でやらなければならなくなりそうだと感じながらも、プログラムやだな~という拒否反応がまず先に立ちました。でも今では、いっちょPHP勉強してみるか!という気分です。ありがとうございました。

管理人の判断で、オペラ対訳プロジェクトのアフィリエイト収入から支出して、お礼を送ります。phaのほしい物リスト(ギーク​ハウスで共有します)から越後製菓 生一番 切り餅1Kgを選びました。みなさんで召し上がってください。

EasyBotter
ランキングを見る(にほんブログ村 オペラ)
ランキングを見る(人気ブログランキング クラシック)

にほんブログ村 外国語ブログ 通訳・翻訳(英語以外)へ

この記事へのコメント

この記事へのトラックバック