【初挑戦】BOT など、作ってみました
【2010/08/18】
先日、Twitter の Basic 認証がついに終了したとの方を耳にしました。残念ながら、現時点までに oAuth 対応の目処が立っておりませんので、Neko_Age は一旦終了という形になります。
誠に申し訳ありません。
できるだけ早い時期に、再開できるよう、頑張りたいと思ってはおります。
どうもこんにちは、@Neko_Age の飼い主、@OkibiWorksLabo です。
でもっていきなり電子工作関係ないですが。
きっかけは「ふぁくたん」こと @factoring_bot 。tweet のなかから数字を見つけて素因数分解してくれるという、小粋な BOT 。この子が実は PHP で動いている、と知った。というか、比較的手軽に BOT が作れる方法として PHP がしばしば使用されているらしいということもだんだんわかってきた。そうこうしているうちに、すっかり「とにかくいっぺん BOT 作りたい病」に憑かれてしまったという次第。
ネタは、以前作ったものが流用可能。
といっても、久々も久々に弄る PHP 、何か新たに作れるわけでもない。とりわけ、どっかからデータをごそっともらってきてそれを切り出して使用するという手法(まあ BOT の基本ですが)なんてやったことがない。だもんで、ネット上で先達がやり遂げた綺羅星の如きソースをうんうん言いながらちょっとずつ切り出しては試し、僅かに追加してはバグを取り、で、なんとか動くようになったのが今回の @Neko_Age 。
何をする BOT かというと、tweet のなかから年齢に関する言及を探して、それを「猫年齢」に換算して tweet します。普通は猫が 10歳 => 人間でいうと 56歳、定年だねぇ、などというように換算するものを逆に換算するという、いわば一発ネタ企画の一種です。
- 今のところフォローは手動です。なんらかの方法で私(@OkibiWorksLabo)まで御連絡いただくか、@Neko_Age をフォローしておいていただければ気付き次第手作業でフォローします。
- もういいや、というときはリムーブでなく、ブロックでお願いできればと思います。当方で積極的にリムーブ作業を行う予定はありません。
- @Neko_Age は自分の TL と mention (@言及)の中を見張っています。ですので、tweet の中に「@Neko_Age 」と「○○歳」という文字列を入れていただければ、フォロー関係なく反応するように作ってある…はず…です…
- 2010/01/31/18:00 頃からは public_timeline も見に行くようにしてみました。
- クロール間隔は
5分10分6分3分 です。cron とか使ってません。いにしえの古典的テクを使っています。詳細はあとで書きます。→→↓書きました。 - 感知する年齢数値は
16歳13歳18歳 〜 130歳 です。この区切りに深い意味はありません。 - 数字は 1バイト文字(所謂「半角」)のみ有効です。2バイト文字(漢数字含む)で書かれていた場合、猫には読めませんので、 tweet を諦めます。
- tweet 中に「RT」「QT」がいっこでも含まれる場合は tweet しません(たぶん)。
- と思ったのですが、折角なので反応するようにしました。現在 禁止ワードは ありません。
- 「歳」「才」「さい」のどれでも反応します(はずです)が、「20歳になったら云々…」というような記述には反応しないよう、多少語尾の条件はつけてあります。
- 文脈は読んでませんので、当然、誤反応もあるかと思いますが、そこは人工猫脳のやることですので御愛嬌ってことで。
- 計算結果は切り捨てです。ざっくりと、年齢なんで。四捨五入とかしません。ですので、↓下の「動物年齢換算」とは結果が若干違います。本来「○歳○ヶ月」と出すほうが不自然かもしれません。そんな計算精度はありません。
- 計算式は同じです。
- にゃーとかは言いません。今のところ。
なお、コードは以下のサイトを主に参考にさせていただきました。(他にも多数)記して謝意を。
- http://d.hatena.ne.jp/n314/20080216/1203164831
- http://d.hatena.ne.jp/hirataka522/20080126/
- http://pha22.net/twitterbot/
- あと、あたりまえですが http://www.php.net/manual/ja/
今後の課題
- ランダムで別の動物にも換算する仕様とか
- 自動フォロー(やらないかもしれない)
- 猫年齢に応じた評価コメント
- というか、ちゃんと動作するのかまだ不明
まだかなりてすとちうなので、なんともいえませんが、一応動くのではないかと。まだ PHP ファイルをローカルに置いて運用しています。ちょっと徹夜なんで、軽く寝てきます。[2010/01/31/09:00] 【追記】何故か寝てません
※ この BOT = Twitter アカウントがもたらす tweet に関しては、下述のとおり厳密性等はまったくありません。お遊びレベルのものですので、自由に流用していただいて構わないかわりに保証もいたしかねます。
【追記】現有装備でかんたんに擬似 cron を実現する方法
これは PHP 以外でも、ブラウザ上で動く言語で書かれたスクリプトならば共通に使える方法。スクリプト実行ファイルに、かりそめにでも HTML タグをひととおり完備して(適当にコピペで充分)、HEAD タグで囲まれたヘッダ内に
<meta http-equiv="refresh" content="360">
というメタタグを 1行追加するだけ。content の値は実行間隔を秒単位で表す。
あとは、Apache を立ち上げたローカルマシンでもいいし、どっかのレンタルサーバにアップロードしてしまってもよい。ただし、万人の手に届く場所においてはいけない。迂闊に複数実行されてしまえばたちどころに規制を喰らうだろうし、実行ファイル中に username と password をベタ書きしてある場合は尚のこと。
PHP のスクリプトで一定間隔にリロードをかけてもいいだろうし、Javascrpt で書いたって構わないだろう。でも、Refresh メタタグを使用するのがいちばんシンプルでわかりやすく、手軽ではないかと思う。
参考までに、年齢換算式について
以前(携帯版を作成する際に)いくつかの資料を当たりましたが、犬猫の場合概ね 丸 1年で性成熟に至る=大人、と考え、ここを18年(16〜20年前後)とし、あとは平均寿命で割り振るという考え方のようです。
熾火研究所では、猫の年齢の人間換算式を以下のように決めました。(パクっただけですけども!)
- 人間の 18歳 = 猫の 1歳 とし、直線で振る。 n = h / 18
- その次の 1年間(人間で 24歳まで)、猫は 人間の 6倍の速度で歳をとるものとする。 n = (h - 12) / 6
- その後死ぬまで、猫は 1年間に 4歳ずつ歳をとるものとする。 n = (n - 16) / 4
ペット業界や愛好家のあいだで経験的に生み出されたものであるようです。勿論、科学的根拠や厳密性はありません。