2009年10月05日

Twitterbotの特定の単語に反応してリプライ反応するサンプルスクリプト ver.2

前回アップしたスクリプトが、リプライワードがなかった場合にサブルーチンから抜ける処理を忘れていたので(リプライできるPOSTがなかったときに空リプライしてしまう)
それを修正しました。
ついでにRTに反応させないようにしてみました。

reply2.zip
posted by 8bit at 10:07| Comment(19) | TrackBack(0) | Twitterbot
この記事へのコメント
こんにちは、さっそく使わせていただいました!
ありがとうございます!
Posted by みかん at 2009年10月05日 16:19
こんにちは。
早速使わせていただいたのですが、何も無い時に「$cron分以内に送られたリプライはありません」が表示されず、画面は真っ白のままのようです。
Posted by STI at 2009年10月08日 04:01
こんにちは!いつもありがとうございます。

早速なのですが、STIさんと同じで、画面が真っ白のまま何も表示されないです。以前アップされていた、reply1の方も試しにやってみたのですが、同様に真っ白のままでした。よろしければ対処方法をお伺いしてもよろしいですか?
Posted by Fu at 2009年10月08日 04:24
>>STIさん
>>Fuさん

コードミスでした。修正しておきました。
ただ、エラーが出ずちゃんと返信をすれば真っ白の画面が出るだけで動いているということですので、そのままでも問題はないです。
Posted by 8bit at 2009年10月08日 13:29
修正ありがとうございます。気になる箇所があって、実行して、こんにちはの方は無事にリプライする事ができたのですが、眠いの方はリプライが出来ず、実行しても「2分以内に送られたリプライはありません」と出てしまいます。
自分で修正を試みたのですが、うまくいかずでした…
よければご教授お願いします。
Posted by Fu at 2009年10月08日 15:57
>>Fuさん
わかりにくいですが「眠い」は通常POSTだった場合に反応します。
リプライで「眠い」と送ってたりしませんか?
Posted by 8bit at 2009年10月08日 16:29
大変失礼しました。仰るとおりです。
リプライに対する反応語句を増やすには、こんにちはの下のelseをいじる感じでしょうか?
無知なもので大変申し訳ないです…。
Posted by Fu at 2009年10月08日 16:38
>>Fuさん

ifは{}で繋いだ所に「もしも〜だったら」という処理を施します。elseifは「〜ではなかった場合、もしも〜だったら」です。elseは「以上のどれでもなかった場合」なので、if処理の最後に書きます。

elseif( preg_match("/こんにちは/",$text)){

ここで「もしもポスト内にこんにちはという文字があれば」の処理を行っていますので、
この処理で囲まれた部分を丸々コピーしてつなげていきます。

ちなみにこれは基本的なphp構文の問題なので、botを作る為には最低限覚えておいたほうがいい知識です。
リファレンスサイトなどで勉強したほうがいいです。
Posted by 8bit at 2009年10月09日 05:45
こんにちは。
こちらのスクリプトを使わせていただきました。ありがとうございます。

そこで、2点質問があります。
@$twitternameで指定しても相手の名前が表示されません。何故でしょうか…
Apha様作成のランダムリプライ用スクリプトと併用した場合、特定語句に反応+ランダムリプライで、リプライ返しを2回してしまうのですが、反応語句があった場合にはランダムリプライをしないようにする事は可能でしょうか?

よろしければ、教えて頂けると有難いです。
よろしくお願いします。
Posted by rool at 2009年10月15日 23:19
>>roolさん
@について
通常なら、台詞内に$twitternameを埋め込めば名前に変換するはずです。
よくわからないのですが、表示されないというのは、POST内に名前が出る部分が空白になるということでしょうか?
念のため${twittername}と指定してみてください。

Aについて
これはちょっと難しい話になるのですが、
TwitterにはAPIというものがあって、一時間の使用量が制限されています。pha::home様の「リプライを送るとランダムにリプライを返すスクリプト」は、APIを一つ使いますので、pha::home様のスクリプトとこちらで配布しているスクリプトを使うと、APIが一度に2つ使うことになり、Twitterにも負荷がかかる上制限にかかりやすくなるのでお勧めできません。

http://8bitnote.sblo.jp/article/32783688.html
こちらの記事でphpの構文について勉強して、
私が配布しているスクリプトに何もなかった場合にも返信するように処理を組み込むしかないです。
if文(条件分岐)について覚えれば簡単なことですので、是非チャレンジしてください。
Posted by 8bit at 2009年10月16日 22:21
スクリプトをDLさせてもらいました。
単語に反応するbot作りに躓いていたのでとても助かりました。
が…スクリプトを動かすと、エラーは出ないのですがリプライに反応してくれません。
反応する単語も組み込んでリプライを飛ばしているのですが…
自分では原因が検討もつかないので、知恵を貸して頂きたいです。
どうぞよろしくおねがいします。
Posted by しぎ at 2009年10月16日 23:44
こんにちは。
「プログラミングができなくても作れるTwitter botの作り方」のそのその1をcronで定期的に実行する事が出来たので、反応はこちらのスクリプトを使わせていただきました。

IDとパスを入れてそのままpost_random.phpと同じところにアップし、「こんにちは」と話しかけてみて手動で起動させてみたのですが、返事をしてくれませんでした。
数分待ってみたのですが、投稿される様子はありませんでした。
画面は真っ白で、エラーも確認できませんでした。
使っているサーバーはxreaの有料です。

自力で調べるのにも限界を感じ、エラーも出ていない状態ですが、私では原因の検討が付かず、アドバイス等何か頂けると幸いです・・・。
Posted by mado at 2009年10月16日 23:49
↑↑の補足ですが、リプライが無い場合にTL上から単語を拾ってくる動作は正常に動いてるみたいです。
リプライを認識していないということなのでしょうか?
Posted by しぎ at 2009年10月17日 10:04
ご回答ありがとうございます。
@の質問については、${twittername}と指定したら上手くいきました。
Aについては、if文について少し勉強して応用しようと思います。
丁寧に教えて下さり、ありがとうございました!

度々お聞きしてすみませんが…反応させる単語をいくつか指定したい場合は、「|」で区切るだけで良いのでしょうか?
どうぞご教授願います。
Posted by rool at 2009年10月17日 10:39
>>しぎさん、madoさん
まず、アカウント名とパスワードは間違っていませんか?
アカウント名とパスワードのみを変更した初期の状態で反応しますか?
数日前、反応するPOSTがなかった場合に画面が真っ白になるバグを修正して再アップロードしましたので、以前にDLした場合は更新してみてください。
また、最近になって、Twitterが10POST間でまったく同じPOSTがあるとPOSTが出来ない仕様になりましたので、
該当するとPOST出来ません。
エラーが出ていないということは、反応するPOSTがなかったということですので、
反応しない原因がないか探ってみてください。
ちなみに当スクリプトはpha::home様と違って「リプライ」ではなく「タイムライン」を取得します。つまりbotがリプライを送るユーザをフォローしていないと発言が見えませんので注意してください。

>>roolさん
そうですね、単語を区切るには「|」を使用します。
正規表現の解説サイトを見ればわかると思います。
Posted by 8bit at 2009年10月17日 11:13
お世話になっています。

最初、パスワードを間違えていたら、エラーが表示されたので、真っ白に表示された今は、再度確認しましたがID供にあっていました。
使っているのは、新しく配布されたもので、IDとパスだけ入れた初期の状態でも反応しませんでした。
BOTと私とは、お互いにフォローし合っていて、BOTのTL上には私のテストつぶやきも表示されているのですが、手動で動かしても何分経ってもBOTは反応してくれませんでした。
「こんにちは」以外に(テスト1)とか(テスト2)とか添えてつぶやきを変えてみても反応してくれませんでした。

ちなみにパスとIDを居れないで(また、間違っていた時)出たエラーは
Warning: array_reverse() [function.array-reverse]: The argument should be an array in /virtual/*****/public_html/twitter/*****/reply2.php on line 26
Warning: Invalid argument supplied for foreach() in /virtual/*****/public_html/twitter/*****/reply2.php on line 34

pha::home様や他の反応するBOTについて書いてる人の記事などを参考にして原因を探っているのですが、あまりPHPを詳しくないので、こちらで手を加えてみても駄目でしたので、何か他に原因になりそうな所を教えて頂けませんでしょうか・・・。
Posted by mado at 2009年10月17日 17:58
↑を書いてから最新記事を読みました・・・すみません・・・。

safe modeは有り無しは該当する記事が見つからなかったので、入っているかいないかはわかりませんが、PHPは4.3以上のサーバーでした。

もう少し自力で頑張ってみようと思います。
有難う御座いました。
Posted by mado at 2009年10月17日 18:30
ソースお借りしました!

このソースを@に反応させないようにするにはどうしたら良いですか?
自力でと頑張ってはみたのですが、わからなくて…
Posted by nyamo at 2010年02月05日 08:42
ソースお借りしました!
説明も凄く丁寧でとても分かり易かったです。どうもありがとうございました!
Posted by TOSHI at 2010年02月16日 14:35
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32678890
※言及リンクのないトラックバックは受信されません。

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