前回アップしたスクリプトが、リプライワードがなかった場合にサブルーチンから抜ける処理を忘れていたので(リプライできるPOSTがなかったときに空リプライしてしまう)
それを修正しました。
ついでにRTに反応させないようにしてみました。
reply2.zip
2009年10月05日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32678890
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/32678890
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
ありがとうございます!
早速使わせていただいたのですが、何も無い時に「$cron分以内に送られたリプライはありません」が表示されず、画面は真っ白のままのようです。
早速なのですが、STIさんと同じで、画面が真っ白のまま何も表示されないです。以前アップされていた、reply1の方も試しにやってみたのですが、同様に真っ白のままでした。よろしければ対処方法をお伺いしてもよろしいですか?
>>Fuさん
コードミスでした。修正しておきました。
ただ、エラーが出ずちゃんと返信をすれば真っ白の画面が出るだけで動いているということですので、そのままでも問題はないです。
自分で修正を試みたのですが、うまくいかずでした…
よければご教授お願いします。
わかりにくいですが「眠い」は通常POSTだった場合に反応します。
リプライで「眠い」と送ってたりしませんか?
リプライに対する反応語句を増やすには、こんにちはの下のelseをいじる感じでしょうか?
無知なもので大変申し訳ないです…。
ifは{}で繋いだ所に「もしも〜だったら」という処理を施します。elseifは「〜ではなかった場合、もしも〜だったら」です。elseは「以上のどれでもなかった場合」なので、if処理の最後に書きます。
elseif( preg_match("/こんにちは/",$text)){
ここで「もしもポスト内にこんにちはという文字があれば」の処理を行っていますので、
この処理で囲まれた部分を丸々コピーしてつなげていきます。
ちなみにこれは基本的なphp構文の問題なので、botを作る為には最低限覚えておいたほうがいい知識です。
リファレンスサイトなどで勉強したほうがいいです。
こちらのスクリプトを使わせていただきました。ありがとうございます。
そこで、2点質問があります。
@$twitternameで指定しても相手の名前が表示されません。何故でしょうか…
Apha様作成のランダムリプライ用スクリプトと併用した場合、特定語句に反応+ランダムリプライで、リプライ返しを2回してしまうのですが、反応語句があった場合にはランダムリプライをしないようにする事は可能でしょうか?
よろしければ、教えて頂けると有難いです。
よろしくお願いします。
@について
通常なら、台詞内に$twitternameを埋め込めば名前に変換するはずです。
よくわからないのですが、表示されないというのは、POST内に名前が出る部分が空白になるということでしょうか?
念のため${twittername}と指定してみてください。
Aについて
これはちょっと難しい話になるのですが、
TwitterにはAPIというものがあって、一時間の使用量が制限されています。pha::home様の「リプライを送るとランダムにリプライを返すスクリプト」は、APIを一つ使いますので、pha::home様のスクリプトとこちらで配布しているスクリプトを使うと、APIが一度に2つ使うことになり、Twitterにも負荷がかかる上制限にかかりやすくなるのでお勧めできません。
http://8bitnote.sblo.jp/article/32783688.html
こちらの記事でphpの構文について勉強して、
私が配布しているスクリプトに何もなかった場合にも返信するように処理を組み込むしかないです。
if文(条件分岐)について覚えれば簡単なことですので、是非チャレンジしてください。
単語に反応するbot作りに躓いていたのでとても助かりました。
が…スクリプトを動かすと、エラーは出ないのですがリプライに反応してくれません。
反応する単語も組み込んでリプライを飛ばしているのですが…
自分では原因が検討もつかないので、知恵を貸して頂きたいです。
どうぞよろしくおねがいします。
「プログラミングができなくても作れるTwitter botの作り方」のそのその1をcronで定期的に実行する事が出来たので、反応はこちらのスクリプトを使わせていただきました。
IDとパスを入れてそのままpost_random.phpと同じところにアップし、「こんにちは」と話しかけてみて手動で起動させてみたのですが、返事をしてくれませんでした。
数分待ってみたのですが、投稿される様子はありませんでした。
画面は真っ白で、エラーも確認できませんでした。
使っているサーバーはxreaの有料です。
自力で調べるのにも限界を感じ、エラーも出ていない状態ですが、私では原因の検討が付かず、アドバイス等何か頂けると幸いです・・・。
リプライを認識していないということなのでしょうか?
@の質問については、${twittername}と指定したら上手くいきました。
Aについては、if文について少し勉強して応用しようと思います。
丁寧に教えて下さり、ありがとうございました!
度々お聞きしてすみませんが…反応させる単語をいくつか指定したい場合は、「|」で区切るだけで良いのでしょうか?
どうぞご教授願います。
まず、アカウント名とパスワードは間違っていませんか?
アカウント名とパスワードのみを変更した初期の状態で反応しますか?
数日前、反応するPOSTがなかった場合に画面が真っ白になるバグを修正して再アップロードしましたので、以前にDLした場合は更新してみてください。
また、最近になって、Twitterが10POST間でまったく同じPOSTがあるとPOSTが出来ない仕様になりましたので、
該当するとPOST出来ません。
エラーが出ていないということは、反応するPOSTがなかったということですので、
反応しない原因がないか探ってみてください。
ちなみに当スクリプトはpha::home様と違って「リプライ」ではなく「タイムライン」を取得します。つまりbotがリプライを送るユーザをフォローしていないと発言が見えませんので注意してください。
>>roolさん
そうですね、単語を区切るには「|」を使用します。
正規表現の解説サイトを見ればわかると思います。
最初、パスワードを間違えていたら、エラーが表示されたので、真っ白に表示された今は、再度確認しましたが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を詳しくないので、こちらで手を加えてみても駄目でしたので、何か他に原因になりそうな所を教えて頂けませんでしょうか・・・。
safe modeは有り無しは該当する記事が見つからなかったので、入っているかいないかはわかりませんが、PHPは4.3以上のサーバーでした。
もう少し自力で頑張ってみようと思います。
有難う御座いました。
このソースを@に反応させないようにするにはどうしたら良いですか?
自力でと頑張ってはみたのですが、わからなくて…
説明も凄く丁寧でとても分かり易かったです。どうもありがとうございました!