perlとcrontabとemacsと女子高生と。

今ネット界の界隈で大流行している「Twitter」!!
そんなTwitterで毎日行われる儀式をあなたは知っていますか...っ!!


深夜0時を過ぎるとみんな一斉に「よるほー」とつぶやく...ッ!!


俺は勝手に「よるほー教」と呼んでるんだけど、なんでも、マカーな人御用達のTwitterクライアントであるところの夜フクロウのユーザ達が始めたとか、それよりもずっと前からある儀式だとか元祖たる諸説もとい流派は多岐に渡り一度派閥争いが起きて大リムーブ&ブロック戦争が起きたのは記憶に新しい。派閥の忠誠を誓う証拠に夜フクロウのアイコンを模造した銅板を踏ませていてそれがこの世に生きる踏み絵だとかなんとか、まぁ俺の妄想だけど。
まぁ、なんだっていいんだけど、要するに深夜0時になると「フクロウは夜に鳴く」っていうのにかけて、「よるほー」ってつぶやくらしい。で、それが昼の12時だと「ひるぽー」とか「ひるぽっぽ」らしい。それキジバトなの!?ハトなの!?


で、腐れ脳みそ理系er、もとい「めんどくさい手作業は全部俺以外がやればいい理論」で、perlとcrontabの勉強するついでに

  • 深夜0時に「よるほー」ってつぶやくコードを書いたよ!

ここから本編

使う物:Macとターミナル.appとPerlとやる気
だいたいの作業はターミナル.appでやるよ!


まずは、個人的な準備で

crontab -e

で、viが起動するのが嫌なので

export $EDITOR=emacs

とかする。そしたら、crontab -e でemacsが起動するようになる。
crontab -eでemacsが起動したら

 0 0 * * * perl /Sore/Ha/Anata/Death.pl

みたいに書く。時間設定は前から「分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0(Sun)-6(Sut)」上に書いた設定だと【毎日0時に最後のコマンドを実行させる】ってこと。簡単!
そして最後にコマンドを記述。で、オイラはこれでハマっちゃってたんだけど。最後に改行を入れないとcronがきちんと動かないぽい。つまるところの

 0 0 * * * perl /Sore/Ha/Anata/Death.pl
#改行

こうしておく必要がある。
で、保存してターミナル.appでcrontab -lを叩いて

 0 0 * * * perl /Sore/Ha/Anata/Death.pl 
$ 

とか出れば成功。
だけど、

 0 0 * * * perl /Sore/Ha/Anata/Death.pl$   #cronの結を改行してないとこうなる。

これはNG
次にPerlのコード。必須なモジュールはNet::TwitterCPANから入れてね!

#! /usr/bin/perl
use Net::Twitter;
use Jcode; #多分この行要らない

my $tw = Net::Twitter->new(
	traits   => [qw/API::REST/],
	username => "SoreHaAnataDesu",
	password => "SoreMoAnataDesu");

my $text = 'よるほー';
Jcode::convert(\$text, 'utf8'); #多分この行要らない
my $result = $tw->update($text);

だいたいこんな感じ。
ノリと勢いでザグザグと書いたので汚いけど・・・。*1

問題点

Twitterの制限で24時間に同じ発言(POST)は出来ない仕様らしい。
24時間ってどれぐらいなのか非常にきになる。24時間何分何秒なのか非常にきになる。
つまるところ、その制限が24時間きっかりなのか23時間59分59秒なのか24時間0分1秒なのかで上のコードがきちんと動くかどうかが非常に怪しいんだ。
ちょっと様子を見ながら調整する予定

解決策

もともとcronで操作してるからcronで秒単位でいじればどうにかなるんじゃね?とか思う。デフォルトでcronは秒の設定できないぽいけどググったら、なんかやる方法はあるっぽい
もしくは、日付ごと(偶数日奇数日とかね!)にPOSTする「よるほー」を置き換えるとか。ひとり「よろほー」とかPOSTしても誰も気がつかない。

まとめ。

今色々と考えてるTwitterBOTがいくつかあるので、それをつくるためのスタート地点に立てたかなと思う。
今後ももっとぷろぐりゃまーなことやっていきたい。


テストPOSTの残骸
あそなす on Twitter: "女子高生!女子高生!!"
あそなす on Twitter: "制服女子!制服女子!!"
あそなす on Twitter: "ツンデレ幼女子高生!!"

*1:もしかして:文字がエスケープされてるから円マークをバックスラッシュに変える必要があるかも?