レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
EasyBotter2.0
EasyBotter2.0のベータ版を公開しました。
http://pha22.net/twitterbot/
主な変更点は
・OAuth認証に対応した
・タイムラインの特定の言葉に反応する機能を追加
・自動フォロー返し機能を追加
・特定の時間帯や特定の日付だけ別の会話ファイルを読み込ませるのが設定しやすくなった
・正規表現によるパターン反応でできることが増えた
・前は動いてなかったbot同士の会話ループ制限機能をちゃんと作った(多分。。。)
・PHP5が動いているサーバーが必要になった(PHP4の人すみません。。。)
です。
ファイル構成など全体的に変わっています。前のバージョンのデータファイルはそのまま使えますが。
使ってみて感想など貰えたらうれしいです。
>>850
通常リプライではin reply to情報を残して非公式RTだと消すという風にするのはそれでできますか?
>>851
通常リプライではそのまま
非公式RT時には""を代入すれば出来ると思います
RT,QTを除くの部分を削除しても他人宛の非公式RTに反応しないんですがどうやったら反応するようにできますか?
>>853
タイムラインから返事をする文を作る処理の中に
「半角の@」に「半角のアルファベット」がつながっているとスルーする処理が含まれています
失礼します。初心者ながら先日からbotを作成しているのですが
Fatal error: Uncaught <table border="1" cellspacing="0">
<tr><td colspan="3" bgcolor="#aaaaaa" align="center"><b>Exception trace</b></td></tr>
<tr><td align="center" bgcolor="#cccccc" width="20"><b>#</b></td><td align="center" bgcolor="#cccccc"><b>Function</b></td><td align="center" bgcolor="#cccccc"><b>Location</b></td></tr>
<tr><td align="center">0</td><td>HTTP_OAuth_Consumer_Request->send()</td><td>/usr/local/www/htdocs/kaorunrun/public_html/twitbot/PEAR/HTTP/OAuth/Consumer.php:257</td></tr>
<tr><td align="center">1</td><td>HTTP_OAuth_Consumer->sendRequest('http://twitter.c …', Array, 'GET')</td><td>/usr/local/www/htdocs/kaorunrun/public_html/twitbot/EasyBotter.php:520</td></tr>
<tr><td align="center">2</td><td>EasyBotter->_getData('http://twitter.c …')</td><td>/usr/local/www/htdocs/kaorunrun/public_html/twitbot/EasyBotter.php:538</td></tr>
<tr><td align="center">3</td><td>EasyBotter->getReplies()</td><td>/usr/local/www/htdocs/kaorunrun/public_html/twitbot/EasyBotter.php:135</td></tr>
<tr><td align="cente in /usr/local/www/htdocs/***/public_html/twitbot/PEAR/HTTP/OAuth/Consumer/Request.php on line 224
というエラー?が出ました。
最後の「224」が「214」の場合の解決策は見つかったのですが、「224」の場合はどうすればよいのでしょうか?
よろしくお願します。
855です
ツイッターの調子がたまたま悪かったようで、無事なんとかなりました。失礼しました。
botを作りたいと思っているのですが、
フォロー、または合言葉を言わなければ
言葉がわからないbotを作ってみたいと思うのですが…
不可能なのでしょうか?
可能なのであれば難しくてもやってみたいのですが…
たとえばbotが
「!"!#!"#」
と言っている言葉が、そのbotをフォロー(or合言葉)した途端
「おはようございます」
と読めるようになる、様な…
reply_pattern.phpに何個もarray文を書くと
一番上のものしかrelpyされません。
複数のreplyを有効にするにはどうすればいいのでしょうか?
>>858
私は配列結合(array_merge)使うようにしています。
こんな感じです。最後に$dataと$data2を結合してます。
以下、サンプル。
$data = array(
"おはよ"=> array(
"こんばんは、いいいいいいい",
),
"こん(に)?ち[はわ]"=> array(
"こんばんは、ろろろろろろろろ",
),
"こんばん[はわ]"=> array(
"こんばんは、はははははは",
"こんばんは、にににににに",
),
);
$data2 = array(
"おやすみ"=> array(
"おやすみ。ほほほほほほほほほほ",
"おやすみ。へへへへへへへへへへ。",
"おやすみ。とととととととととと。",
),
);
//配列結合
$data = array_merge($data,$data2);
>>859
返事遅れて申し訳ありませんでした。
上手く動いているようです。
大変ためになりました。ご指導ありがとうございました。
ありがたく使わせてもらっています。
たった今
http://pha22.net/twitterbot/file/EasyBotter2.05.zip
をDLして中身がどう変わったのかを眺めてたんですが、
bot.phpの
if(date("n") == 2 && date("j") == 14){
が、2.05では
if(date("n") == 2 && datew("j") == 14){
となっています。
これは打ち間違いでしょうか?それとも仕様変更でしょうか?
>>861
あなたの書き込みがソースからのコピペではない為、掲示板上ではわかりませんが本来はどちらも打ち間違いです
昔の2.04での間違いを修正した際の入力ミスであると思われます
整理age
質問失礼します
EasyBotter2.05で現在3つのアカウントでbotを作成しているのですが、
そのうちの一つのアカウントのみ、リプライ反応をしません。
エラーもでず、ただ「〇分以内にTLに反応する語句はありません」的な
メッセージが出ます。TL反応や通常ポストはされます。
また正常に動いているソースをそのまますり替えて見ましたが、
結果は同じでした。原因を教えていただけますでしょうか
質問失礼します
EasyBotter2.05で現在3つのアカウントでbotを作成しているのですが、
そのうちの一つのアカウントのみ、リプライ反応をしません。
エラーもでず、ただ「〇分以内にTLに反応する語句はありません」的な
メッセージが出ます。TL反応や通常ポストはされます。
また正常に動いているソースをそのまますり替えて見ましたが、
結果は同じでした。原因を教えていただけますでしょうか
>>865
テンプレ使ってくれないか?それだけじゃ分からないよ
>>843 で原因が出ていました。申し訳ありません。
質問です。
手動でbot.phpを叩くとParse error: syntax error, unexpected $end in /usr/local/www/htdocs/ユーザー名/public_html/EasyBotter.php on line 556
と表示されました。556行目に間違いがありますよ。というのは理解できたのですが、
確認してみた所、EasyBotter.phpは555行目で終わっていて556行目は存在していません。
555行目にもソースはなく、プログラム終了を表す[EOF]があるだけです。
自動フォロー後にリプライを返したくて、EasyBotter.phpに非公式wikiのソースをコピペしたのですが、
それもうまくいかず、コピペしたソースは消去済みです。
存在しない行のエラーなので、何がエラーを起こす原因になっているのか検討もつきません。
参考に、555行目周辺のソースを貼ります。全く手をつけていない部分です。
function followUser($screen_name)
{
$url = "http://twitter.com/friendships/create/".$screen_name.".xml";
return $this->_setData($url);
}
[EOF]
とても困っていますので、是非よろしくお願いします。
質問です。
自分宛の非公式RT(〇〇RT @easybotter: ×× の形、他人のIDは入っていない)に反応させたいのですが、「RT、QTを除外する」部分をコメントアウトしても反応しません。
>>854 さんが指摘している仕様が原因だと思うのですが、
//タイムラインへの反応を作る
以下で心当たりのある
if(empty($status)){
continue;
}
if(preg_match("@{.+?}@",$status) == 1){
$status = $this->convertText($status, $tweet);
}
$reply_name = (string)$tweet->user->screen_name;
$in_reply_to_status_id = (string)$tweet->id;
$re["status"] = "@".$reply_name." ".$status;
$re["in_reply_to_status_id"] = $in_reply_to_status_id;
$replyTweets[] = $re;
}
部などをコメントアウトして試してみたのですが構文エラーを履き続けるばかりです。
どうかもう少しヒントを頂けないでしょうか。
>>868
PHPのエラーが最終行を示す場合は、その殆どが{}()[]などのカッコが閉じてない場合に発生します。修正した部分の周辺を中心に、特に{}をチェックしてみては。
>>869
第一の間違い…そこじゃない
第二の間違い…消しすぎだ
>>870
確認してみたところ、自動フォローの所に}が一つ足りていませんでした。
アップロード後に叩いてみたら、今度は396行目に同じエラーが発生しました。カッコの閉じ忘れもないようです。
ソースを貼ります。 foreach($〜のところが396です。
よろしくお願いします。
//自動フォロー返し
function autoFollow(){
$response = $this->getFollowers();
$followList = array();
foreach($response as $user){
$follow = (string)$user->following;
if($follow == "false"){
$followList[] = (string)$user->screen_name;
}
}
}
foreach($followList as $screen_name){
$response = $this->followUser($screen_name);
}
>>872
function autoFollow(){
$response = $this->getFollowers();
$followList = array();
foreach($response as $user){
$follow = (string)$user->following;
if($follow == "false"){
$followList[] = (string)$user->screen_name;
}
}
} //←ここでautoFollow関数が閉じてる
//↓なんでautoFollow関数の外に追い出されてるの?実際にフォローを実行するのはここなのにww
foreach($followList as $screen_name){
$response = $this->followUser($screen_name);
}
このレベルだと、正直なところ、あなたには改造はちょっと早いかな〜・・・。
ソースを元に戻す事をおすすめします。
>>873
ご指摘ありがとうございます。
改造に手を出すのは早すぎたみたいです。
>>871 さんのヒントを元に数時間ソース及びgoogle先生とにらめっこしましたがやっぱりよくわかりません。
「そこじゃない」ってのはそもそも>>854 さんのヒントを元にするのが間違っているということでしょうか?
よく考えたら「RT」が付いていないbotへの@付きの発言には反応を返すので、>>854 さんのは他人宛の@に反応しないということなんでしょうか。
…だとすると、「RT/QTを除外」部をコメントアウトしても自分宛のRTに反応しないのは何故なんでしょう。
>>875
854さんは間違ってない。
もう一度言います。
そこじゃない。消しすぎだ。
ピンとこなければ、以後の運用、メンテナンスも考慮して、
改造はとてもオススメできない。
>>876
>>854 さんを参考にするのが間違ってないなら、「そこじゃない」と「消しすぎだ」は両立しないと思うんですが…?
まあRT返しレベルの基本的な動作なら改造以外の方法もあるでしょうしもうちょっと頑張ってみます。ありがとうございました
>>877
昔のTweenレベルのRTなら
http://www26.atwiki.jp/easybotter_wiki/pages/26.html #id_3abdcd8f
の応用でいける。やり方は自分で考えること。
分からないなら改造はあなたには早い。
>>877
いや、ね
「そこじゃない」そして「消し過ぎ」であってるんだよw
>>879
代弁ありw
>>878
ありがとうございます。
別に改造して俺SUGEEEEEしたいわけじゃなくて全ての自分宛の@に返信できるよう制限を外したいだけなんです…改造しなくて住むならそれに越したことはないです。
クイズ系のbotなんでそれ以外の機能を改造で付ける予定は全くありませんし、問題を追加するだけなら容量はわかりますから、この問題さえどうにかなればサーバさんにこれ以上迷惑はかけないですむかと思います。
非公式RTのループ防ぎはver1.4.1で選択できるようになったみたいですが、設定項目が見当たらないので。
そのURLを参照して「RT」につぶやきを返すようにしてみましたが動作しませんでした。よく考えたら「自分宛@に返す」を>>854 の仕様が無効にしているのに「RTに返す」が無効化されないのも変な話ですね。
>>879
…?日本語が間違ってる?
「消しすぎ」なら「そこ」でしょう。あれ?頭がこんがらがってきました
>>881
あなたがプログラムを理解してないからそう思うだけで
> 「そこじゃない」そして「消し過ぎ」
は言葉のトリックではあるけど、間違いじゃないよ
つ【PHPのお勉強】
>>881
>>882 さんじゃないけど>>882 のヒント
プログラムは記述したとおりにしか動かない
そして、間違った記述や記述が足りないのがどこか一つでもあると動かない
だから「そこじゃない」そして「消し過ぎ」は両立できる
すみません、どなたかご教示下さい。
Reply_pattern_phpの反応語句を増やしたら、@に対して反応しなくなってしまいました。
手動ならきちんと反応するのですが…。
サーバーは@PAGES、cronはGAE-cronです。
スレをざっと見たのですが発見できず…。
どなたかご教示、またはヒントレス番号を教えてくだされば幸いです。
>>884
追加して反応しなくなるのは大抵
半の動く側 " の付け忘れ or 正規表現ミス
リプ項目側 ", or " or , の付け忘れ
がほとんど
>>885
半の動く側ってなんだでてことで修正
半の動く側→反応語句側
>>885-886 さん
ありがとうございます。
すみません、私の書き方が悪かったです。
手動でbot.phpを読み込むと反応するのに、@をもらったときに自動ではまったく反応しなくなってしまった、ということです。
>>887
CRON側はちゃんとbot.PHPを叩いてる?
あとログファイルあたりのパーミッションとか
初心者レベルのミスか鯖側の問題じゃないかね
>>887
えーと、それはテストでBOT主であるあなたがBOTに@付きを送った時、手動では動くけど自動では送らないと言う解釈でOK?
>>888 さん はい、叩いています。それまでは何の問題もなく動いていました。
語句を増やしたら反応しなくなってしまったんです…。
パーミッションも正しく動いていたときから変えていません。
やはり鯖側の問題でしょうか…。
>>889 さん はい、その通りです。bot.phpを直接ブラウザで叩いてやれば何の問題もなく反応するのですが…
最近、テキスト内の{following_id}、{following_name}などが適切なものに置き換わらず、
空白になって投稿されている事に気づいたのですが、
これはTwitter側の設定に何かしら変更があったという事でしょうか?
(BOT自体は何もいじってはいません)
>>891
EasyBotter初心者質問スレ3 531参照
>>892
APIのURLが古かったという事ですね。
新しいURLに直して解決しました。ありがとうございました。
非公式wikiの「特定のアカウントとのリプライ回数を制限したい」で特定のIDは制限したまま、botの回数制限は外したいんですが、何か方法はありますか?
>>894
if(preg_match("@bot@i",(string)$reply->user->screen_name) || in_array((string)$reply->user->screen_name,$bottername)){
の所を
if(in_array((string)$reply->user->screen_name,$bottername)){
にする でいけるはず。
答えておきながらだけどまずは自分で考えよう
>>894
追記。
BOTとの回数制限解除だからエンドレスリプライになるのは自己責任で
巡回して勝手にフォローするBOTを考えると解除はオススメは出来ない。
>>895
特定のフォロワーさん数人がリプを送りすぎてAPI制限を何度か食らってて、制限してたんですが会話させてもらっているbotさんまで制限されてて困ってたのでありがとうございました。とりあえず、自分でphp構文ある程度読めるようにします。
botにはbot専用のリプライを返すように設定しているので反応する単語がなかったら止まるので大丈夫かと思ってます。
1人か2人しかいない(ブロックしてる)BOTのリプライ制限を外したいのですが、何か方法はありますでしょうか。
ご教示くだされば幸いです。
時間別・曜日指定について質問させてください。
毎日昼に昼用ポスト、火曜木曜土曜の朝のみ朝用ポスト、それ以外は通常ポストというようにしたくて以下のようにしたのですが、火木土の朝用ポストと通常ポストの二重ポストになってしまいます。
二重ポストしないようにするにはどのあたりを直したらいいかヒントをいただけないでしょうか。
if(date("w") == 2 || date("w") == 4 || date("w") == 6){
if(date("G") > 7 && date("G") < 9){
$response = $eb->postRandom("morning.txt");
}
}
if(date("G") > 11 && date("G") < 13){
$response = $eb->postRandom("noon.txt");
}
else{
$response = $eb->postRandom("data.txt");
}
>>899
IF文難しく考えすぎw
全て排反事象なら、こうでしょ。下にいくほど優先。おまけ付き。
$dateWTime = date("Y-m-d D H:i");//現在時刻を 2011-06-18 Sat 16:30 形式でセット
//$dateWTime = "2011-01-01 Tue 08:13";//テスト用
$postRandomTxt = "data.txt";//通常ポスト
//毎日昼(12時台)に昼用ポスト
if (preg_match("/....-..-.. ... 12:../",$dateWTime)){
$postRandomTxt = "noon.txt";
}
//火曜木曜土曜の朝のみ朝(8時台)用ポスト
if (preg_match("/....-..-.. (Tue|Thu|Sat) 08:../",$dateWTime)){
$postRandomTxt = "morning.txt";
}
//時報 cronズレ考慮 3分間隔の例
if (preg_match("/....-..-.. ... ..:(00|01|02)/",$dateWTime)){
$postRandomTxt = "jihou.txt";
}
//毎年元旦
if (preg_match("/....-01-01 ... ..:../",$dateWTime)){
$postRandomTxt = "gantan.txt";
}
//7月第3月曜日(海の日)
if (preg_match("/....-07-(15|16|17|18|19|20|21) Mon ..:../",$dateWTime)){
$postRandomTxt = "uminohi.txt";
}
//var_dump($dateWTime);
//var_dump($postRandomTxt);
$response = $eb->postRandom($postRandomTxt);
>>899
>>900 がいいんだろうけど、どうしても編集する上で分かりづらいとかなら
if(date("G") == "8"){//8時台
if(date("w") == 2 || date("w") == 4 || date("w") == 6){//火木土のみ
$response = $eb->postRandom("morning.txt");
} else {//月水金
$response = $eb->postRandom("data.txt");
}
} else if(date("G") == "12"){//毎日12時台
$response = $eb->postRandom("noon.txt");
} else {
$response = $eb->postRandom("data.txt");
}
テストしてないけど時間で区切ってるから行くはず
>>900
そのような指定の仕方もあったのですね。
勉強不足でした。
>>900 を参考にさきほど「土曜の20時台に夜用ポスト」でテストしてみたところ、うまくいきました!
ありがとうございました!
色々細かく指定できることも教えていただいて助かりました。
>>901
ありがとうございます。
時間で区切ればよかったんですね…。
まず曜日で区切ってから〜と考えていたので勉強になりました。
EasyBotter2.05を使用していますが、
>>118 >>121 と同じ現象が発生してしまっています。
bot.phpで「$response = $eb->replyTimeline(1,"reply_pattern.php");」のみコメントアウトして、
コマンドラインからphp bot.phpとし実行したところ、以下のメッセージが表示されます。
PHP Notice: Undefined variable: results in /********/easybotter/EasyBotter.php on line 210
同じreply_pattern.phpを指定している@反応に関しては正常に動作しているため、
reply_pattern.phpの問題ではないと判断しています。
EasyBotter.phpそのものも再度DLして置き換えをしたため、内部の変更点等はないはずです。
210行目は「return $results;」のみの記述ですし、
その前の処理に関しては基本的にifで分岐しているだけなので
TL取得そのものに失敗しているか何かかとも思うものの、
確認方法、検証方法がわかりません。
何か対応方法等アドバイスいただければと思います
>>903 で修正です。
誤:bot.phpで「$response = $eb->replyTimeline(1,"reply_pattern.php");」のみコメントアウトして、
正:bot.phpで「$response = $eb->replyTimeline(1,"reply_pattern.php");」のみコメントアウトをはずして、
スレも終盤で無駄にレスを消費して申し訳ないorz
APIは最新?>>903
現在公開されているものをDLしているので最新だという認識だったのですが…
>>906
ここ3ヶ月内にTwitter側で複数の仕様変更がありますが?
Twitter公式の動向もチェックしなよ
調整上げ
つぶやきはしているのにリプライやTLに一切反応してくれなくて困っています。
バージョンは2.05
サーバーはETOWNS
CRONはGAE?GEA?
リプライのファイルはパーミッション666にしてあります。
いつでも返してくれるリプと時間別に変化するリプの2種類あるので、
通常リプはreply_pattern.phpに、時間別の物は各自の時間帯に合わせてWIKIを見ながら
設定しました。
bot.phpでの設定は以下のようにしています↓
$response = $eb->postRandom("data.txt");
$response = $eb->reply(2,"data.txt","reply_pattern.php");
$response = $eb->replyTimeline(2,"reply_pattern.php");
if(date("i") % 30 === 0){
$response = $eb->postRandom("data.txt");
}
if(date("G") > 5 && date("G") < 11){
$response = $eb->replyTimeline(2,"morning.php");
} else if(date("G") > 10 && date("G") < 16){
$response = $eb->replyTimeline(2,"noon.php");
} else if(date("G") > 15 || date("G") < 1){
$response = $eb->replyTimeline(2,"evening.php");
} else {
$response = $eb->replyTimeline(2,"night.php");
}
対応方法等あれば宜しくお願いします。
>>909
APIは最新のものに変更しましたか?
わからなければ板内のログをよく探す事
>>909
$response = $eb->reply(2,"data.txt","reply_pattern.php");
$response = $eb->replyTimeline(2,"reply_pattern.php");
リプライとTL反応が同じreply_pattern.phpなんだが…
>>910
APIの変更…ですか?色々調べていますがAPIはツイッター側が設定する事で
利用者は変更できないとかそんな感じの情報しかでてこないのですが…
>>911
別々のファイル名をTLのはtl_reply_pattern.phpに変えて試してみましたが
未だに無反応です。リプライにもまったく答えてくれません。
つぶやきは普通にしているのに
>>912
ここ2ヶ月あちこちのスレで頻出過ぎる件
もう一度書きます
「API」は「最新のもの」に「変更」しましたか?
わからなければ「板内のログ」をよく探す事
EasyBotterのバージョンが古いとAPIかもな
鯖性能知らないが、API読めてないか書き込み段階でタイムアウトなんじゃね?
>>912
postRandom出来てreplyしない症状だと、ツイッター本体の不具合を除けば、
reply_pattern.phpの
・parse error
・UTF-8じゃない
・BOMが付いてる(割と落とし穴)
・正規表現が間違ってる
あたりが非常に臭いです。
手打ちして、白画面とか500とかfatal errorだったら、しかもそれがBOT宛の@がある時だけ発生したら、ほぼ間違いなくreply_pattern.phpの記述でしょう。
多少でもPHPがわかるようでしたら、要所要所にvar_dumpでも入れて、どこまで動いて、どこで止まっているかを、変数の変化を見ながら調べられるのですが、こればっかりは説明のしようが・・・。
改造系のスレ、こちらで合ってますでしょうか。
初心者質問スレで誘導を受けての再投稿のため、マルチポスト申し訳ありません。
以下が質問事項になります。
【バージョン】 Ver.2.04
【設置鯖名】 @pages
【PHPのバージョン】不明
【手動】 動く
【実行】 GAE
【実行間隔】 2分間隔
【不明点】 1.リプライでのフォロー&リムーブを設定し、正常に機能しています。
できればオートフォローにも対応させたいのですが、可能ですか?
2.リプライに返すリプライと、TL発言に返すリプライを別ファイルで扱っています。
TL発言に返すリプライに、TL発言を混ぜたいのですが
//TL発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$re["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
の記述では、リプライデータの在り処が違うせいで、上手く行かないようです。
リプライへのリプライはデータが膨大なため、これをTL発言にも反応するようにする事は避けたいです。
なんとか現状のファイル構成のままで、TL発言にTL発言で返す事は出来ないでしょうか?
わかりにくいかもしれませんが、教えていただけると嬉しいです。
よろしくお願いします。
>>916
1.可能か不可能化と言えば可能
2.EasyBotterに下記を該当する部分に挿入すればいける筈、チェックしてないけどどうぞ
当然挿入場所間違えると機能しない、変な動作するので注意
//タイムラインへの反応を作る
::
::
$in_reply_to_status_id = (string)$tweet->id;
switch(true)
{
//TL発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$re["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
//その他
default:
$re["status"] = "@".$reply_name." ".$status;
}
>>917
ありがとうございます。試してみました。
Easybotter.phpの編集として問題は無く、正常に機能するのですが
[[TLH]]を入れた発言をしてくれません。リプライばかり飛んできます。
エラーは出るのですが、内容が
object(SimpleXMLElement)#6 (2) {
["error"]=>
string(22) "Status is a duplicate."
["request"]=>
string(20) "/statuses/update.xml"
}
というもので、調べたら連投規制のものと酷似していました。
現在テストしているものは、リプライ2種、TL発言にしたい[[TLH]]つきのツイート2種が入っているのですが
リプライばかり飛んできて、[[TLH]]をつけた内容は現われず、リプライとしても来ません。
何が行けないのでしょうか?現在、該当箇所近辺のeasybotter.php内記述はこんな形です。
//リプライパターンと照合
(中略)
$reply_name = (string)$tweet->user->screen_name;
$in_reply_to_status_id = (string)$tweet->id;
switch(true)
{
//TL発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$re["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
//その他
default:
$re["status"] = "@".$reply_name." ".$status;
}
$re["status"] = "@".$reply_name." ".$status;
$re["in_reply_to_status_id"] = $in_reply_to_status_id;
$replyTweets[] = $re;
}
return $replyTweets;
}
また、これはついでで結構なのですが、オートフォローにも対応させる方法、
ご存知でしたら御教授いただけないでしょうか?
注文が多くて申し訳ありませんが、よろしくお願い致します。
>>918
2種なら普通に連投規制されてるだけじゃないかな
Twitterは@含めて同じ内容のものは10ツイート内では投稿できないし
2種ならリプライ、TL反応でも同じ挙動しかしてくれない
>>919
どうやら投稿されてないのではなく、[[TLH]]を無視してリプライしているようです。
連投規制は普通に引っかかってただけのようで…。
似たような文章で作っていたので気付くのが遅れました。
[[TLH]]は文章には表示されないのですが、TL発言にしようとそれを組み込んだ発言も全てリプライになってしまいます。
どうしたらいいのでしょうか?
現在の該当部分の記述の
//TL発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$re["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
//その他
default:
$re["status"] = "@".$reply_name." ".$status;
}
$re["status"] = "@".$reply_name." ".$status;
$re["in_reply_to_status_id"] = $in_reply_to_status_id;
$replyTweets[] = $re;
}
return $replyTweets;
}
では、
$re["status"] = "@".$reply_name." ".$status;
が2つ入ってしまっているのが少し気になるのですが、これは問題ないのでしょうか?
リプやTL反応で空リプ?をよくします。
@アカウント で反応したフォロワーのアカウントだけツイートしてしまう感じです。
これは直せるのでしょうか?
>>916 ,918,920
解決しました!挿入する位置を変更したり、前後の文章を消したりの格闘で
なんとかTL発言への反応をTL発言で返せるようになりました!
教えてくださった皆様ありがとうございます!
引き続き、リプライ要請でのフォロー&リムーブと、オートフォローを同時に運用する方法を模索しているので
こちら教えていただけるととても嬉しいです。よろしくお願い致します。
>>922
> リプライ要請でのフォロー&リムーブ
は別所で配布されてるプログラムがあるから
無理にEBに組み込むより別プログラムで動かす方がいいのでは?
>>923
自動フォロー&リムーブに関してはそれを試した事があるのですが
公開されている物をそのままコピペ、要所を自分用データに書き替えただけなのに作動せず
断念した経緯があります。
半自動のものは見つけられなかったのですが、どのように探せばいいのでしょうか?
改造のスレからこちらに誘導されてきました。
何度か誤って書き込みしているので、
しつこいと思われたら、すみません。
過去スレなどで検索をかけてみたのですが、なかなか見つからなかったので質問させていただきます。
もし私の見落としで似たような質問があったら、すみません。
【バージョン】Ver.2.05
【設置鯖名】 @Pages
【PHPのバージョン】不明
【手動】 動きます
【実行】 GAE-Cron Crubで提供されているもの
【実行間隔】 3分間隔
【不明点】少し長くなってしまいますが、下記のことについて質問させてください。
cronを3分に一回の周期で使っているのですが、TL返信の際に同じ相手に2回返事してしまいます。
一度対応語句に反応して、3分後に作動したときもう一度返信してしまう、ということです。
説明が下手ですいません。
たとえば、
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
bot「@A おはよう!」(7:03)
となってしまうということです。
この二回目の返信をしないようにしたいのですが、いくつか条件があります。
まず、Aが次にツイートしたもののうちに、違う対応語句が入っていた場合にはTL返信できるようにしたい。
例)
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「いってきます」(7:03)
bot「@A いってらっしゃい」(7:03)
二つ目に、リプライには反応するようにしたい。ただし、TL返信と同じように同一のリプライに反応はさせたくない。
○例)このような反応なら大丈夫です。
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「@bot おはようありがとう。元気?」(7:03)
bot「@A 元気です」(7:03)
×例)このようにはしたくありません。
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「@bot おはようありがとう。元気?」(7:03)
bot「@A 元気です」(7:03)
《ここでAが返信をしなかったとして》
bot「@A 元気です」(7:06)
条件が面倒ですみません。
すべての条件に当てはまらなくてもよいので、同一のツイートに反応しないようにするPHPを教えていただきたいです。
一応PHPの説明などは読んでみたのですが、
一定の時間内に何回リプライをもらったら返事を止める、などの記述は見つかったのですが、同じツイートに返事しないようにする、ということに当てはまった記述がなかなか見つけられなかったので質問させていただきました。
初歩的な質問なのかもしれませんが、回答お待ちしています。
>>925
分かりづらいけど要するにはこうだよね
同じ反応語句で2度反応しないようにしたい。ただし、違う反応語句があった場合はTL返信したい。
そもそも同じリプライは本来できない筈だからTwitter側の問題な気もするけど・・・
単純に同じユーザーにリプライ返したくないならこの2種の応用改造だと思うよ
ttp://www26.atwiki.jp/easybotter_wiki/pages/29.html#id_ec12d6da
ttp://www26.atwiki.jp/easybotter_wiki/pages/28.html#id_9cd5da71
後者はランダムポストにも対応してるものだから注意
>>926
説明が下手ですみません…
はい、おっしゃる通りです。
前者のページを読んでみても、うまく解決策が考えられなかったのですが、とりあえず後者の方を使ってみたいと思います。
回答ありがとうございました。
また、この他にも解決策あるようでしたら、意見お待ちしております。
調整あげ
{timeline_name}を使用するとbot自身の名前までポストしてしまいます
自分の名前や特定の名前を弾きたいのですが
色々試してみても思い通りに弾いてくれません
どなたか教えて頂けないでしょうか…
>>楽に稼げるアルバイトの件。情報載せておきます(*・ω・)!! http://tinyurl.k2i.me/Xxso
>>929
セッティングファイルでbotのスクリーンネームは正しい?
>>931
はい。間違いありません
世の中には簡単で儲かる仕事があるもんだ(・_・)。 http://tinyurl.k2i.me/Afjh
愛子様botでございます。よろしくお願い申し上げます。
https://twitter.com/Aikosama_bot
reply_pattern.phpやdate.txtなどが、沢山かきすぎると
ポストをしなくなってしまうのですが、回避するべく
reply_pattern.phpの中に無かったらreply_pattern2.phpを探すという
風に書き換えることは可能でしょうか?
また以前似たような書き込みを見たのですがどうしても
見つけられなかったため、その時に解決策が出ていたら検索の
ヒントを教えて頂けると嬉しいです。よろしくおねがいします
>>935
マルチ乙
とてもナイスでした!ヾ(*′∀`*)ノ→ http://nn7.biz/image/show.cgi?20110506S004
【書き込み前の注意】
初心者さん
→EasyBotter初心者質問スレ3
改造してる人・NOT初心者
→EasyBotter2.0
雑多な質問
→スレ立てるほどじゃないその他の質問スレ
CRON・定期実行
→Twitterbotのcronスレ
自作・他botプログラム等
→TwitterBotPHP質問スレ
EasyBotter公式サイト・非公式Wiki・初心者スレ>>1-3 も読もう!
逆引きを加えておこう
EasyBotter初心者質問スレ3
→初心者さんかつ改造未導入であること
EasyBotter2.0
→慣れきたので改造をしてみたい、改造を自己責任で行える方
botにこんな機能があったらいいなスレ
→考案及び提示
phaがときどき見るかもしれないスレ
→EB製作者様への感想・意見・バグ報告
EB参考リンク
リンク先に迷惑を掛けないこと
本家配布元
http://pha22.net/twitterbot/
EasyBotter 非公式wiki
http://www26.atwiki.jp/easybotter_wiki
SAK Streets - PHP 開発言語資料
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3php.htm
そふぃのPHP入門
http://nyx.pu1.net/
「指定したユーザーのTLからキーワードを見つけると、BOTのTL上にそのツイートを投稿する(拡散)」という機能を作ろうとしています。
TLReplyで{tweet}を使用したいのですが、方法はあるでしょうか?
また、指定外ユーザーのTLに反応しないようにする方法はあるでしょうか?
>>941
{tweet}を使うならそれを取得してる所の前後で改造しなきゃいかんのだが
その場所とか、指定したユーザーのTLを抜く方法とかわかってる?
メソッドがわかってるんだったら、過去に出てきた質問・回答でできると思うが
フォローワーとフォローワー以外でリプへの反応を変更したいのですが、次のソースを追加したのだとうまくいきません。
詳しい方、助言を頂けませんでしょうか。
case stristr($status, "[[FOLLOWS]]"):
$status = str_replace("[[FOLLOWS]]","",$status);
$follow = (string)$reply_name->following;
if($follow != "false"){
$re["status"] = "@".$reply_name." ".$status;
}else {
$re["status"] = ""; #フォローワー以外は反応しない
}
リプライの時間わけについてお時間のある方知恵を貸してください。
「おはよう」のリプライを「10時まで」「10〜12時」「12時以降」
「おやすみ」のリプライを「13〜20時」「それ以外の時間帯」
それ以外の単語は全時間帯共通
以上の条件でリプライをさせたいのですが、ifやswitchを使って1つのファイルに書き込むと反応しなくなります。
ファイルを別けるにしても、それぞれ時間帯が違い、他は共通の単語なので4つの時間帯に区切って共通単語についてはまったく同じものをコピーすることになるのですが、スマートな方法はないでしょうか…?
詳しい方アドバイスをいただけたらうれしいです。
>>944
「1つのファイルに」の場合は初心者スレのように「やっちゃった」ケースかな。
1つのファイルにまとめたくなるけどその場合は改造になっちゃうのでやっぱり簡単かつスマートにするにはファイルを分けたほうが早いし処理も早くなると思われる。
bot.phpの方にこんな感じにしたほうがスマートだと思う。
おはようの方を書いたからおやすみはこれを参考にして。
それぞれをおはよう・おやすみ専用にさせて、共通の方はおはよう・おやすみでリプライを返さないように空リプにすればいい。
switch(true){
case (date("G") > 11)://12時以降
$response = $eb->reply(2,"該当なしファイル名","返信用ファイル名");
break;
case (date("G") > "9" && date("G") < "12")://10時〜12時
$response = $eb->reply(2,"該当なしファイル名","返信用ファイル名");
break;
case (date("G") < "10")://〜10時
$response = $eb->reply(2,"該当なしファイル名","返信用ファイル名");
break;
}
今回は書いたけど出来る限り自分でも考えてみてね
>>945
とても丁寧にありがとうございます。
たしかに、ファイル数は減りますが中身が重くなるしプログラムが増えるのでファイルを分けてしまったほうがスマートですね。
ファイルを減らす=管理が容易ということに凝り固まりすぎて気付けませんでした。
1つにまとめるには改造まで必要になるのですね…。リプライのファイルをいじればなんとかなると思っていました。
プログラムもありがとうございます。
手詰まりになってしまいここを頼りましたが、次からはもう少し違う方法も考えつつ答えをだしてみます。
まだまだ勉強しないとだめですね。
でもこれで前に進めそうです。ありがとうございました。
どっかでフォロワーが診断メーカーやったときにTL上に出てきたその診断を
botが勝手にやるってのがあった気がするんだが、どこにその記述書いてたか分かる人居ませんか?
ググッてみてもそれが出てこない・・・見間違えだったかな
>>947
こことかにあるけど診断メーカー側の仕様変更か機能しないことも
動くようだったらちょっと悪いけど報告くれないかな
http://ruzyus.blog136.fc2.com/
以前質問があったのですが、答えが出てなかったと思うので、改めて質問させて下さい
最近ユーザー名を名前@○○○○と長くする人が多く、{name}を使うとものすごく長くなってしまうので
@以降を削除させようと思うのですが、うまくいきません。
$name = str_replace("@以降の文字","",$reply->user->name);
$text = str_replace("{name}",$name,$text);
の@以降の文字の部分の正規表現は何を入れたらいいのでしょうか?
そもそもいじる場所はここで良いのでしょうか?
ご存じの方、よろしくお願いします
>>949
.
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板