TwitterのBOTをつくってみたよ

http://twitter.com/tentoribot
点取り占いです。
実は既にphaさんが点取り占いbotを作ってたんですが、勉強用だし仕様もちょっと違うし許される…かな…と。もし問題あれば連絡頂ければ削除しますので。
仕様。自分宛のreplyを読み込む→前回レスしたより新しいreplyがあるかチェック→あれば、それに対してランダムにテキストファイルの一行+ランダムな記号(○とか×とかね)+点数を返信。「@tentoribot 登録 ○○○」というreplyがあれば、"@tentoribot 登録 "というところを削除してファイルに追加。
phaさんの「プログラミングができなくても作れるTwitter botの作り方」という記事を参考にさせて頂きました。というか、ソースの半分くらいはそのままひっぱってきてます。目的にあわせて点数部分とか、登録という文字列が入ってたらファイルに追加、っていう部分とかを追加しただけかな。
ライブラリもphaさんのスクリプトもよくできてるっていうのもあるんですが、まったくの初心者のぼくでも3,4時間くらいでできました。たのしいなー。
ほんとはどっかサーバーに置いてcronで自動実行できればいいんですが、残念ながらWindows+XAMPPの環境なのでcronは動かず。cronNTっていうのを試したんですが、何故か一気に7回スクリプト動かされちゃって設定方法もいまいちようわからんので、メタタグでリフレッシュしてます。ブラウザで開いてないといけないのが残念だけど。

詰まったところ

  • foreachの中にどれを入れてどれを入れないべきか?(あとでチェックする)
  • preg_replaceの中で正規表現を使うときは//でくくる。(post最後の*Tw*とかを消すためにpreg_replace("/ .*/","",$newUranai);としてます)
  • array_randについて。
    $rand_keys = array_rand($tw,count($replies2));
    if(!is_array($rand_keys)){
        $rand_array[0] = $rand_keys;
        $rand_keys = $rand_array;
    }
    for($i=0;$i < count($replies2);$i++){    
        if(empty($text)){
            $text = $tw[$rand_keys[$i]];                            
        }
    }             

という流れ(不要っぽいところは略してます)がよくわかんない。返信が一個だった場合配列じゃなくなっちゃうから無理矢理配列にして、$textに$twという三次元配列の中の$i番目の$rand_keys番目を代入、ですよね。$rand_keysには返信するべき文字が入ってるんじゃないの?(試したけどだめでした。あとでechoして調べてみないと)
いや、ほんとにこのレベルなんですよ。
とりあえずスクリプト自体はそこまで難しくなくてできたので、みなさんも点取りbotで遊んでみて下さい。そして作ってみて下さい。

書き忘れてた!

元のファイルから変更したところがもう一点ありました。元は五分ごとにcronをまわすの前提な設計になってて、五分以内の発言にレスする、っていう形だったんですが、cronがそもそも動くかどうかわかんないぞ、と思ったので、前にレスした記事のタイムスタンプをファイルに保存して、それより新しい発言があればレス→レスした中で最新のタイムスタンプを保存、という形に変更してます。結果的にはcron動かないし変更したのは正解?だったのかな?でもreplyのタイムスタンプを保存とかせずにスクリプト動かした時点のタイムスタンプを保存ってしたほうが楽でしたね。