[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
この機能を使うにはJavaScriptを有効にしてください
|
レス数が900を超えています。1000を超えると投稿できなくなるよ。
TwitterBotPHP質問スレ
1
:
pha
:2009/12/01(火) 17:51:42
http://pha22.net/text/twitterbot.html
でphaが公開しているPHPのTwitterスクリプトについて、
スレッド立てるほどじゃない質問はこちらにどうぞー。
phaがときどき巡回しますが対応が遅れることも多いので、質問に答えてくれる人も募集しています!
556
:
名無しさん
:2010/11/21(日) 20:07:55
>>553
それ@pagesのせいかもよ、場合により重複回避上手く出来ないって話聞いた事があるから
動作確認でさくらの無料期間とか使って一時的に別のTwitterアカウントから
同じファイルでPostさせてログ見てみるといい
多分きっちり指定した数ログ保存されるはずだから
557
:
名無しさん
:2010/11/21(日) 22:12:10
>>555
お答えいただきありがとうございました!
目的がタイムラインの語句に反応してリプライするのではなく、
受け取ったリプライにリプライを返す際に返信数に上限を設けるためだったので、
//古い順にする
$replies = array_reverse($replies_);
if(count($replies) != 0){
//リプライの文章をつくる
$replyTweets = $this->makeReplyTweets($replies, $replyFile, $replyPatternFile);
の下に
//リプライ回数の制限 ここから
$reply_max = 3;//1回のreplyTimeline実行でリプライできる最大数
//$replyTweetsが$reply_max件になるまで配列から要素を削除
while(count($replyTweets) > $reply_max){
array_splice($replyTweets,array_rand($replyTweets),1);//ランダムで1件削除
}
//リプライ回数の制限 ここまで
を組み込んだのですが、どうもうまく動作せず、全てのpostが停止してしまいました…
これは挿入箇所が違うということでしょうか?;
558
:
名無しさん
:2010/11/21(日) 23:56:52
>>557
入れるところは合ってます。何が理由で止まったかは、私の記述やロジックが間違っているかも含めて、テストしてみてください。とりあえず、挿入した全行間にvar_dumpやechoを入れてどこで止まっているか、変数の値はどう変換はしているかをチェックする事をオススメします。もし自力で調べてデバグ出来ないようなら、改造は諦めた方が懸命です。では、ご武運を。
559
:
名無しさん
:2010/11/24(水) 01:31:46
>>558
テストしてみたところ、
if(count($replyTweets) > $reply_max){
を挿入してうまくリプライ制限されるようになりました!
ありがとうございました!!
560
:
名無しさん
:2010/11/24(水) 01:56:23
>>559
wikiに追加しておくから詳細あるとうれしいな
//古い順にする
$replies = array_reverse($replies_);
if(count($replies) != 0){
//リプライの文章をつくる
$replyTweets = $this->makeReplyTweets($replies, $replyFile, $replyPatternFile);
の下に
//リプライ回数の制限 ここから
$reply_max = 3;//1回のreplyTimeline実行でリプライできる最大数
//$replyTweetsが$reply_max件になるまで配列から要素を削除
if(count($replyTweets) > $reply_max){
array_splice($replyTweets,array_rand($replyTweets),1);//ランダムで1件削除
}
//リプライ回数の制限 ここまで
でいいのかな
561
:
名無しさん
:2010/11/24(水) 09:30:33
>>559
コードを、生かして頂いて、ありがとうございます。
562
:
名無しさん
:2010/11/24(水) 22:00:12
現在、wikiを見ながら、会話数制限(リプライ返し)と特定の人には別パターンで
bot同士の会話数を5回に制限し、
なおかつbot同士のリプライを別パターンで発言させているのですが、
毎回3回目あたりで別パターン以外のリプライから発言してしまいます。
何をどうしたらきちんとなるのか、教えていただければ幸いです!
563
:
名無しさん
:2010/11/25(木) 21:16:47
TLの反応率を下げたくて空リプ("",)を増やしてみたのですが
結局言葉の入っているリプライを返してしまい反応率が変わりません。
空リプを増やす以外でTL反応率を下げるにはどうしたらいいでしょうか?
564
:
名無しさん
:2010/11/25(木) 22:51:14
>>563
お勉強頑張れ
> bot.phpで必要な知識
> ├演算子
> ├比較演算子
> ├条件分岐(if、switch)
> └date関数
565
:
名無しさん
:2010/11/25(木) 23:39:26
>>563
bot.php側で確率をつけ弄る
566
:
名無しさん
:2010/11/26(金) 08:25:46
>>562
ソースを見れば、答えられるかもしれない。
567
:
名無しさん
:2010/11/27(土) 10:20:16
>>562
そのパターンファイルを見れば詳しく教えてもらえると思うですよ
ソース晒すのが嫌で自分で解決してみたいなら
その""を"スルー予定"に設定して試す
のはどうですか
この段階でスルー予定が一度も出ないなら他に原因があるんだと思いますよ
言うまでもありませんがTwitter側の仕様で短時間10ツイート以内に同じ発言があるとツイートが反映されないのでご注意
今現在は該当する発言を削除すればまた同じ発言で大丈夫です
568
:
567
:2010/11/27(土) 10:25:46
間違えた
さっきのレスは
>>563
宛です
569
:
名無しさん
:2010/11/27(土) 23:20:20
>>560
ソースの詳細ですが、
//古い順にする
$replies = array_reverse($replies_);
if(count($replies) != 0){
//リプライの文章をつくる
$replyTweets = $this->makeReplyTweets($replies, $replyFile, $replyPatternFile);
の下に、
//リプライ回数の制限 ここから
$reply_max = 3;//1回のreply実行でリプライできる最大数
if(count($replyTweets) > $reply_max){//$replyTweetsが$reply_maxよりおおきかったら
//$replyTweetsが$reply_max件になるまで配列から要素を削除
while(count($replyTweets) > $reply_max){
array_splice($replyTweets,array_rand($replyTweets),1);//ランダムで1件削除
}
}
です。
570
:
名無しさん
:2010/11/27(土) 23:27:41
>>569
whileの前のif文いらない気が…
571
:
名無しさん
:2010/11/28(日) 00:36:43
>>569
いや、
>>557
で動かないと言ってるんだ…
572
:
名無しさん
:2010/11/28(日) 00:37:27
>>570
だった
573
:
名無しさん
:2010/11/28(日) 01:39:19
まったくの初心者です・・・Easybotter様を使用しています
時間別にリプライを設定したくて、色々調べたんですが具体的に書いてあるところがなく困っています
自分なりに理解しようと思いずっと悩んでいたんですが・・・
どこにどの構文を入れればいいのかが良くわかりません・・・
おはよう、という@をもらったら
5〜7時の間は「早起きだね」、12時〜16時だと「寝坊だよ」等の返信を行いたいのです
同様に、おやすみについても時間指定で返信がしたいです
ご教授いただけたらと思います、お願いします・・・
574
:
名無しさん
:2010/11/28(日) 01:48:16
>>573
とりあえず、下記URLを読む、読んでわからないところを調べる
http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1287944674/1-3
575
:
名無しさん
:2010/11/28(日) 07:44:03
>>570
>>571
if挿入に関してですが、
whileだけで実行したところ、
受け取った$replyTweetsが$reply_maxに満たなかった際に、
whileの中で$replyTweetsが空になるまで削除されてしまってpostされず、
それならばということでifで指定した次第です。
指定した後は、$replyTweetsが$replx_max以上でも未満でも動いています。
php初心者なので、ifしか思いつかなかったので、
もしかしたら他に書き方があるのかもしれませんが…。
576
:
名無しさん
:2010/12/05(日) 12:59:23
Easybotter2.04を利用しています。
例えばですが、カウントダウンタイマーの様な仕様で
記念日まであと○日○時○分○秒○○と言った様な発言を
botにさせることは可能でしょうか。
phpは初心者なので取っ掛かりも良くわからずにいます。
お知恵をお借りできたら嬉しいです。
577
:
名無しさん
:2010/12/05(日) 13:18:53
因みにですが、カウントダウン発言ばかりを繰り返すbotではなく
通常発言の一つとして、ランダムに吐いたり吐かなかったりする
仕様を探してます。
カウントダウンのPHPを探してもどう組み込めばいいのか、
今一つかめません。何か参考になるような物も探しています……。
578
:
名無しさん
:2010/12/05(日) 13:50:40
>>576-577
カウントダウンは一応既出、過去ログを探してみよう。
カウントダウン発言と通常発言とファイルを分けたらいけると思う
579
:
名無しさん
:2010/12/06(月) 02:06:52
>>578
初心者質問の最初の方に出ていた内容は総て拝見させて頂いてたのですが
あのスクリプトをどう組み込めばいいのかが判りませんでした。
また、記念日まで●日●時●分●秒●●と、詳細にわたる表記も可能でしょうか?
何度も恐れ入りますがお知恵をお借りできれば助かります。
580
:
名無しさん
:2010/12/06(月) 07:47:43
>>579
ここはコピペすればいいような教え方や
手取り足取り教えるところでないよ
ヒントはもうでているんだ。しつこい
581
:
名無しさん
:2010/12/06(月) 21:29:45
wikiを利用して、
特定の人には別パターンというのをつけているのですが、
用意したリプライファイルを読まず、data.txtを読んでしまいます。
やりたい事は、1つのアカウントで1ファイルを使いたいのです。
なので、wikiに書いてあるような2アカウントで1ファイルみたいなのではないんですが・・・。。
$userName = (string)$reply->user->screen_name;
switch(true){
//Abot
case $userName == "a_bot"://abcdというアカウント名に対して
$replyPatternFile = "a_pattern.php";//xxx_pattern.phpを適用する
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
break;
//Bbot
case $userName == "b_bot"://abcdというアカウント名に対して
$replyPatternFile = "b_pattern.php";//xxx_pattern.phpを適用する
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
break;
default://それ以外
$replyPatternFile = $org_repfile; //デフォルトのパターンファイル名
}
582
:
名無しさん
:2010/12/13(月) 10:45:08
質問させていただきます。
日曜日の11時〜17時まで違うポストパターンを読み込ませるのにif文で分岐させているのですが、このプログラムに間違いはありますか?
何度やってもtrueに入ってくれません。
if(date("G") > 10 && date("G") < 18 && date("w") == "0")
{
特別なポストパターン
}
else
{
通常のポストパターン
}
583
:
名無しさん
:2010/12/13(月) 11:15:00
それでいいはず。
とりあえず今日は月曜だから =="1" で実行したら真になったし。
どっか他の部分で分岐してる可能性があるから番号順にechoするとかでそこまでの動作を逐次出力してみれば。
584
:
名無しさん
:2010/12/14(火) 00:34:10
>>582
http://www26.atwiki.jp/easybotter_wiki/pages/30.html
を参考にして、
それでちゃんと動作するか簡易ローカルチェックで試す方がいいかな
今回の場合は
<?php
ifdate("G") > 10 && date("G") < 18 && date("w") == "0"){
echo "特別なポストパターン";
}
else{
echo "通常ポストパターン";
}
?>
な感じで
・・・後、間違いはどこか分かったかな?
585
:
名無しさん
:2010/12/14(火) 09:14:20
質問です。
23時にpostをするには
if(date("G") == 23 && date("i") == 0){
ファイル名
}
であっているのでしょうか?
586
:
名無しさん
:2010/12/14(火) 09:22:37
>>585
CRON精度が高いならDate関数とif文は合ってるよ
ファイル名だけじゃ動かないけど
587
:
名無しさん
:2010/12/14(火) 09:38:34
>>586
if(date("G") == 23 && date("i") == 0){
$response = $eb->postRandom("***.txt");
}
になってます
588
:
585
:2010/12/14(火) 09:53:06
解決しました。ありがとうございます!
589
:
名無しさん
:2010/12/14(火) 15:28:47
通常はフォロワーさんのタイムラインやリプライに反応し、おはようやおやすみを呟き
夜の時間は眠り、寝言を呟くbotを作りたいと思っています。
夜の眠っている間だけ、フォロワーのタイムラインに反応しないようにしたいのですが
今の状態ですとリプライだけでなく、タイムラインの反応ワードも拾ってしまっているため
フォロワーさんに「寝てたんじゃないの?」とツッコまれる状態になってしまっています。
$response = $eb->autoFollow();
//$response = $eb->postRandom("data.txt");
//$response = $eb->postRotation("data.txt");
$response = $eb->reply(5,"feeling.txt","reply_pattern.php");
$response = $eb->replyTimeline(5,"timeline.php");
//2時から寝ます
$now_g = date('G');
$now_i = date('i');
if(($now_g > '2') && ($now_g < '7') ){
$now_g = 'sleep';
}
if(date("i") % 60 == 0){
//おやすみpost(1時)
if(date("G") == 1 && date("i") == 00){
$response = $eb->postRandom("night.txt");
//寝言post(2〜6時)
} else if(date("G") > 1 && date("G") < 7){
$response = $eb->postRandom("sleeping.txt");
//おはようpost(7時)
} else if(date("G") == 7 && date("i") == 00){
$response = $eb->postRandom("morning.txt");
//通常post
} else {
$response = $eb->postRandom("shiwasu.txt");
}
}
夜の時間にタイムラインに反応させなくする方法をご存知の方がおられましたら、お教えいただけると幸いです。
590
:
名無しさん
:2010/12/14(火) 18:58:46
>>589
上の
$response = $eb->replyTimeline(5,"timeline.php");
の部分を
if(date('G')<2 || date('G')>6){
$response = $eb->replyTimeline(5,"timeline.php");
}
に変更すれば2,3,4,5,6時台にはTLに反応しないように出来ると思います
591
:
名無しさん
:2010/12/14(火) 20:51:27
>>590
ここ初心者スレじゃないんだから、安易に答え出しちゃダメでしょ
592
:
名無しさん
:2010/12/14(火) 21:33:50
すみません、どなたか教えてください。
>>581
↑こちらの質問になります。
よろしくお願いします。
593
:
582
:2010/12/14(火) 23:42:36
>>583
>>584
様
アドバイスどうもありがとうございました。
チェックしてみたのですがまだ真に入りません。
もう少し考えてみます。
594
:
名無しさん
:2010/12/15(水) 01:24:06
>>593
合ってるからこそ入らないんじゃないの?
595
:
名無しさん
:2010/12/15(水) 23:12:13
今日水曜日なんだから真になるはずもないわな。
596
:
名無しさん
:2010/12/16(木) 01:24:39
12月15日だけ特別ポストをしようと思い、
if(date("n") == 12 && data("j") == 15 ){
$response = $eb->postRotation("post_15.txt");
}
と入れたのですが以下のエラーが出てしまいます。
Fatal error: Call to undefined function data() in /virtual/(省略)/bot.php on line 15
15行目は「if(date("n") == 12 && data("j") == 15 ){」にあたります。
サンプルのif(date("n") == 2 && data("j") == 14 ){」をはじめ、10月や11月に変更してもエラーは出ないのですが、原因がわかる方お教えいただけると幸いです。
597
:
名無しさん
:2010/12/16(木) 02:28:21
>>596
if(date("n") == 12 && data("j") == 15 ){
↑
この一文にケアレスミスがあります、よーく見て見ましょう
598
:
名無しさん
:2010/12/16(木) 07:30:18
>>597
なるほど、ありがとうございます
サンプルから引っ張ったので間違いないと思い込んでました
申し訳ないorz
解決しました!
599
:
589
:2010/12/19(日) 23:34:29
>>590
レス遅くなりすみません、夜間にタイムラインに反応しないようにさせる事ができるようになりました。
ありがとうございました!
600
:
582
:2010/12/21(火) 19:54:29
>>594
>>595
そこはちゃんと値を変えてやっています。
無事解決しました。
別のところでエラーが出ていました。
ありがとうございました。
601
:
名無しさん
:2010/12/24(金) 21:10:43
だすしかない
http://linkhunter.pa.land.to/get.php?u=www.iiv.ne.jp/juicy/nikkan/kawaharayouko/images/060710_1.jpg
http://61.203.92.62/Photo/Zosan/Across/Web-KY3/DSC_1330.jpg
602
:
名無しさん
:2010/12/25(土) 01:49:38
>>601
は全然ツイッターBOTに関係ないので無視してください
一応危険は無いみたいだけど・・・(上はアメリカ鯖、下は日本鯖)
603
:
名無しさん
:2010/12/27(月) 15:41:15
if(date("G") > 23 || date("G") < 7 && date("w") == "0"){
$response = $eb->postRandom("data_yoi.txt");
}
日曜日の0時〜6時の間、特別なポストデータを読み込ませるにはこれでいいでしょうか><
if(date("G") > 6 || date("G") < 0){
$response = $eb->postRandom("data.txt");
}else if(date("G") > 23 || date("G") < 7){
$response = $eb->postRandom("data_night.txt");
}
さらに質問があるのですが、日曜日の0時から6時以外、つまり通常時のポストを↑のような形にしたいのですが可能でしょうか。
ご教授、構文お願いします><
604
:
名無しさん
:2010/12/27(月) 16:47:07
最初の奴、なんでわざわざ23時云々入れるのか…
||の意味わかってる?「または」「OR」だよ。
0を使いたくないだけなら「かつ」0ではない時にするべき。
23より大きい数字なんてないから最後の
}else if(date("G") > 23 || date("G") < 7){
は無意味だよ。後者だけで0-6時の間動く。
それと日曜の件を最優先にしたいならそれを最初に持ってこないと無意味。
605
:
名無しさん
:2010/12/27(月) 19:39:02
>>603
後半
それで希望通りに動く
但し、落ち着いてよく見てみましょう
この場合はelseの次は0時から6時までしかまわってこないから、そこで更に「もし0時から6時の間だったら」の判断はいらないですよ
606
:
名無しさん
:2010/12/29(水) 22:32:05
質問なんですが、POSTしたときに0,5,15,30分のときpostRotationを実行させて、以降のPOSTが0,5,15,30でなくともRotaitionを続けることは可能ですか?
607
:
名無しさん
:2010/12/30(木) 01:30:43
>>606
日本語でおk
608
:
名無しさん
:2011/01/08(土) 11:21:23
EasyBotter.phpを改造したらreply_pattern.phpを読み込まなくなってしまいました
絶対に反応するはずの単語を投げかけてもreply_pattern.phpに該当する単語がない場合の反応を返してしまいます
ソースも何回も確認したのですが、原因がわかりません
この場合、原因として例えばどんなものが考えられますか
609
:
名無しさん
:2011/01/08(土) 11:38:15
>>608
書いてある内容から判断すると一番考えられるのは改造ミスです
それ以上の答えが必要なら「どこをどのように改造したのか」の情報が必要だと思います
改造範囲が狭いならその部分のコピペを、全体にわたるなら出来ればソース全部をどこかのアップロダに上げてURLを貼るなど
そうすれば時間のある人が答えてくれるかもしれませんよ
610
:
名無しさん
:2011/01/12(水) 07:47:22
getFriendsTimelineで読み込む件数は20件ですが
読み込む件数を増やす事は可能でしょうか?
もし増やせるのならどこを弄ればいいのでしょうか
611
:
名無しさん
:2011/01/12(水) 10:40:00
>>610
本体改造なので慎重に、自己責任で
function getFriendsTimeline(){
$url = "
http://api.twitter.com/1/statuses/friends_timeline.xml";
return $this->_getData($url,array("count"=>"100"));
}
function _getData($url,$value = array()){
$response = $this->consumer->sendRequest($url,$value,"GET");
$response = simplexml_load_string($response->getBody());
return $response;
}
手を加えるのは以上二つのfunction
コピペでどうぞ
取得が100件じゃなければ 100 のところを1〜200までの数値に変更
612
:
名無しさん
:2011/01/12(水) 15:37:13
特定ユーザーのあるpostがあったときにbotの一部機能だけを止めて、再び別のpostがあったときに止めていた機能を再度動かせるように改造したいと思っています。
botの緊急停止機能のようにテキストファイルでフラグを立ててやればうまくいくと思のですが、一部機能だけを止めたいのでどうすればいいのか悩んでいます。
replytimeline.php
replytokutei.php
がそれぞれ2分ごとに実行されていて、replytimeline.phpで特定ユーザーからのワードを拾いreplytokutei.phpの動作を止めたいと思っています。
613
:
名無しさん
:2011/01/13(木) 00:47:56
>>612
緊急停止機能が
http://twbot.blogspot.com/2010/03/botbotphp.html
で紹介されている方法なのであれば
bot.phpの中で
replytimeline.phpを含む「必ず動かしたい」動作の記述を行いその下に
if (file_exists('stop_flg.txt')){ die('STOP! stop_flg.txt exists.'); }//stop_flg.txtがあれば強制終了
の記述を行い更にその下に
replytokutei.php関連の記述をすればいいのではないかと思うのです
614
:
613
:2011/01/13(木) 01:05:44
>>612
あああ、あわてて投稿したらフラグをどうするか書かなかった
以下は一つの案なのでそのつもりでいて下さい
replytimeline.php内に
"止めるための反応"=> array(
"{STOP}",
),
"動かすための反応"=> array(
"{START}",
),
の記述を混ぜる
function convertText内のどこかに
if(strpos($text,"{START}") !== FALSE){
unlink ("stop_flg.txt");
}
if(strpos($text,"{STOP}") !== FALSE){
$fp = fopen("stop_flg.txt","w");
fclose($fp);
}
を混ぜておけばいい気がします
615
:
613
:2011/01/13(木) 01:16:51
ああ、特定の人じゃないとダメなのか
function convertText内のどこかに
if(strpos($text,"{START}") !== FALSE && $reply->user->screen_name == "特定のscreen_name"){
unlink ("stop_flg.txt");
}
if(strpos($text,"{STOP}") !== FALSE && $reply->user->screen_name == "特定のscreen_name"){
$fp = fopen("stop_flg.txt","w");
fclose($fp);
}
616
:
名無しさん
:2011/01/14(金) 12:43:33
>>613
詳しくありがとうございます!挑戦してみたいと思います。
617
:
名無しさん
:2011/01/15(土) 14:17:18
特定の単語をリプされたとき、人格が変わるようなbotを考えています。
1単語を言われたときに分岐
2発言したユーザーIDを記録(同じなら上書き)
3ユーザーIDが記録されている人に対しては特定のリプライファイル
4更に特定の単語を言われたら終了(ユーザーIDを削除)
という流れで考えた為、以下のようにしたのですが巧く動きません
(具体的には同時に複数の人が記録されていると巧く分岐しない、
一人ではなく全部の記録を削除してしまう時があるなど)
そもそも非推奨の関数を使っているせいもあると思うのですが、他に方法がありましたらご教授いただけませんでしょうか?
※初心者過ぎて非常に馬鹿な書き方をしている気がしますが……
if(preg_match("/(単語|単語)/",$reply->text, $matches) === 1){
$userName = (string)$reply->user->screen_name;
$fs = fopen('ファイル.txt','r');
while(!feof($fs)){
$str = fgets($fs);
$items = explode("\t",$str);//開いたデータを配列に
$name = trim($items[0]);
if (trim($name) != ''){
if (preg_match('@'.$name.'@',$userName)){
$data = file('ファイル.txt');
$data = ereg_replace($userName, $userName, $data);
file_put_contents( 'ファイル.txt', implode('\n', $data) );
}}else{
//ファイルに書き込み
$fp = fopen('ファイル.txt','a');
flock($fp,LOCK_EX);
fputs($fp,$userName."\r\n");
fclose($fp);
}
}
}
//終了
if(preg_match("/(単語)/",$reply->text, $matches) === 1){
$userName = (string)$reply->user->screen_name;
$data = file('ファイル.txt');
$data = ereg_replace($userName, "", $data);
file_put_contents( 'ファイル.txt', implode('\n', $data) );
}
//分岐対応
$fs = fopen('ファイル.txt','r');
while(!feof($fs)){
$str = fgets($fs);
$items = explode("\t",$str);//開いたデータを配列に
$name = trim($items[0]);
if (trim($name) != ''){
$userName = (string)$reply->user->screen_name;
if (preg_match('@'.$name.'@',$userName)){
$replyPatternFile = "reply_patternX.php";//reply_patternX.phpを適用する
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}
}
}
618
:
名無しさん
:2011/01/17(月) 04:02:19
>611
ありがとうございます!
早速使わせていただきます
619
:
名無しさん
:2011/01/20(木) 20:51:00
ブログに書き込みが出来なかったのでこちらで質問いたします。
ttp://twbot.blogspot.com/2010/12/blog-post.html
「簡単じゃない twitter bot」 の作り方メモさんのアイコン変更の最新記事を読み、
手動でURLにアクセスする事によってアイコンの変更は出来たのですが
bot.phpでURLを呼び出す方法がどうしても分かりません。
例にある、
$chgicon = file_get_contets('
http://www.hoge.com/change_icon.php?icon=bird_blue.png&check=3');
のURLを変更して書き込むとエラーになります。
どなたかアドバイス頂けないでしょうか。
620
:
名無しさん
:2011/01/21(金) 22:58:56
>>619
bot.phpに書くなら、同氏のブログの
ttp://twbot.blogspot.com/2010/09/cron.html にある書式をマネしたらいいですよ。
またはポストするデータファイルをPHPにして、
<?php直後に $○○なしで、file_get_contents('URL〜check=○'); だけを置いたら成功しました。
ただ、データファイルまるごとに適用となってしまうので、どうしてもアイコン変更させたい反応語は
別ファイルに分岐させています。
ファイル数が増えるので、もっとスマートな方法があれば私も知りたいです…。
621
:
619
:2011/01/22(土) 12:29:16
>>620
ありがとうございます
何とか思い通りに動くようになりました
622
:
名無しさん
:2011/01/23(日) 23:30:18
失礼します。初心者です。
@Pagesで設置したBotのうち、reply_pattern.phpだけこのようなエラーが・・・。
Parse error: syntax error, unexpected ';', expecting ')' in /usr/local/www/htdocs/(ユーザー名)/public_html/twitterbot/reply_pattern.php on line 33
詳しい方、よければご教示願います。
623
:
名無しさん
:2011/01/24(月) 11:06:35
>>622
そのreply_pattern.phpの30行から35行くらいまでをコピペで貼ってください
624
:
名無しさん
:2011/01/25(火) 00:09:44
すいません、パーミッションの変え方が分からないのですが
どなたか説明してもらえませんか?
それとボットを動かす場合はbot.phpにブラウザでアクセス
って書いてあるのですがこちらも上手く理解できません、どなたかお願いします
625
:
名無しさん
:2011/01/25(火) 11:20:25
初心者の皆さんへ
まずは
EasyBotter初心者質問スレ3
http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1287944674/1-3
を熟読して下さい
626
:
名無しさん
:2011/02/03(木) 06:58:31
現在bot.txtをbot.phpと変えて、複数のつぶやきをランダムにつぶやいています。
ですがmysqlのデータベースからランダムに取り出せないかと思っております。
もしどなたかお分かりになる方がいらっしゃいましたら教えていただけませんでしょうか?
宜しくお願い致します。
627
:
名無しさん
:2011/02/03(木) 10:46:50
626の続きです。
現在mysqlのテーブルから特定のフィールドの値は取り出せています。
$data = array(
"いろはにほへと"
)
この部分をどのように書いたら良いのかが分かりません。もしお分かりになる方がいらっしゃいましたら、教えて下さい。宜しくお願い致します。
628
:
名無しさん
:2011/02/04(金) 02:38:32
>>626-627
そこ弄るより、本体からmysql呼び出す方が早いんじゃない?
629
:
名無しさん
:2011/02/04(金) 18:15:46
毎日、日没の時間などに呟くBOTが作りたいのですが、
どういう風に作ったらいいのでしょう。
何処からかデータを参照してそのデータに基づいて呟くということだと思うのですが・・・。
630
:
名無しさん
:2011/02/04(金) 18:40:52
>>628
本体ってEasyBotter.phpですよね?
function postRandomあたりをいじるってことですよね?
どなたかアドバイスをいただけると助かります。宜しくお願い致します。
631
:
名無しさん
:2011/02/07(月) 11:46:16
「reply_pattern.php」はbotへのつぶやきとTLに反応して返信するようになっていると思うんですが、
登録したワードのうち「bot宛てのつぶやき」にだけ返信するワードを指定できるのでしょうか。
もしできるのであれば指定の仕方を教えて欲しいのですが。
632
:
名無しさん
:2011/02/07(月) 12:47:27
>>631
サンプルのbot.php内の
$response = $eb->replyTimeline(2,"reply_pattern.php");
を実行するとbotのタイムラインに反応しますが@+アルファベットがあるとスルーされます
$response = $eb->reply(2,"data.txt","reply_pattern.php");
を実行するとbot宛のリプライに反応します
実際にはいくつか例外がありますが
大筋そんな理解で問題ないと思います
で、bot宛のリプライのみ反応するようにさせたい場合は
タイムライン反応用にreply_tl_pattern.php
リプライ反応用にreply_pattern.php
と二種類のパターンファイルを作成してbot.php内で
$response = $eb->reply(2,"data.txt","reply_pattern.php");
$response = $eb->replyTimeline(2,"reply_tl_pattern.php");
のように指定すれば出来るのではと思います
633
:
名無しさん
:2011/02/10(木) 14:56:10
>>632
遅くなりましたが、ご回答ありがとうございました。
634
:
名無しさん
:2011/02/13(日) 11:45:40
【バージョン】 Ver.2.0x
【設置鯖名】tok2
【PHPのバージョン】?
【手動】 一部動く
【実行】 GAE-Cron
【実行間隔】 60分間隔(CRON等で定期的に実行している場合)
【不明点】 (エラーメッセージがあればコピペ推奨)
自分のケースに合うようなパターンが検索から見つれられなかったので、こちらに書かせていただきます。
(もし既出のないようでしたらすみません)
普通に定期POSTはできるのですが、
リプライが一切応答しません。
手動でbot.phpにアクセスしましたが
それでも反応しないようです。
下記にbot.phpの編集後のものを書いてみましたが、
どこか誤りがあるでしょうか。
ちなみに、時間に関係なく60分に1度定期POSTしたいので、
cronを60分に設定しました。
あと、関係はないと思いますが、
reply_pattern.phpにアクセスしても表示されないのですが、
これは特に問題はないのでしょうか。
【bot.php】
<?php
//=============================
//EasyBotterを呼び出します
//=============================
require_once("EasyBotter.php");
$eb = new EasyBotter();
//=============================
//botの動作をここに書いてください
//先頭に//がある行はコメント扱いなので実行しません。実行したい行の頭の//を削除してください。
//=============================
$response = $eb->autoFollow();
$response = $eb->postRandom("data.txt");
$response = $eb->reply(2,"data2.txt","reply_pattern.txt");
$response = $eb->replyTimeline(2,"reply_tl_pattern.php");
//===================================================
//// cronを実行するたびに毎回実行するのではなく、
//// 実行する頻度を変えたい場合の例は以下のとおりです。
//// PHPのdata()の応用の仕方は以下のURLを参照ください。
////
http://php.net/manual/ja/function.date.php
//bot.phpを実行したときに毎回実行される
$response = $eb->postRandom("data.txt");
?>
635
:
名無しさん
:2011/02/13(日) 12:24:56
>>634
タイムライン用のパターンとリプライ用のパターンを別に準備しているということでいいですね?
で、
$response = $eb->reply(2,"data2.txt","reply_pattern.txt");
となっていますが、reply_pattern.txtのファイルの中身の形式は
サンプルのreply_pattern.phpと同じになっていますか?
だとすれば拡張子を.phpにしてbot.phpの該当部分も修正して試してみて下さい
636
:
名無しさん
:2011/02/13(日) 14:41:26
>>635
reply_pattern.txt の中身は以下のように若干、リプライバターンを増やしています。
(語句)の部分ですね。実際には言葉を入れていますが。
<?php
//特定の単語を受け取った場合に特定の反応を返したいときに使う、反応のパターンを書くためのファイルです。
//複数のパターンに一致する場合は上のものが優先されます。PHPの正規表現にも対応しています。
$data = array(
//「おはよ」を含む発言(「おはよ」「おはよう」「おはよー」など)を受け取ると「おはようございます、御主人様」もしくは「Good Morning, Master.」と返すサンプルです
"おはよ"=> array(
"(語句)",
),
//「今日の運勢」を含む発言を受け取ると6種類の中からランダムな返答を返すサンプルです
"今日の運勢"=> array(
"大吉",
"中吉",
"小吉",
"末吉",
"吉",
"凶・・・",
),
//「こんにちは」「こんにちわ」「こんちは」「こんちわ」を含む発言を受け取ると「こんにちはこんにちは!」と返す正規表現のサンプルです
"こん(に)?ち[はわ]"=> array(
"(語句)",
"(語句)"=>array(
"(語句)",
),
"(語句)"=>array(
"(語句)",
),
"(語句)"=>array
"(語句)",
),
,
),
//「◯◯は好き?」という発言を受け取ると「◯◯おいしいです」と返す正規表現のサンプルです
//ただし「◯◯」の前には空白か「、」か「。」を入れないと「は好き?」以前の文章が全て繋がって表示されます
"([^\s、。]+?)は好き?"=> array(
"$1おいしいです",
),
//「会話終了」を含む発言を受け取るとリプライを返さなくするサンプルです
"会話終了"=> array(
"[[END]]",
),
);
ちなみに、txtの部分をphpに直したのですが、
やはりリプライしません。(bot.txtの該当部分も修正済み)
パターンを追加した時の記述の仕方に問題があるのでしょうか。
637
:
名無しさん
:2011/02/13(日) 18:14:49
>>636
新しく足された部分は反応語句と一対一であると仮定して違う部分を修正してみました
目で追っただけですが多分これで動くと思います
<?php
//特定の単語を受け取った場合に特定の反応を返したいときに使う、反応のパターンを書くためのファイルです。
//複数のパターンに一致する場合は上のものが優先されます。PHPの正規表現にも対応しています。
$data = array(
//「おはよ」を含む発言(「おはよ」「おはよう」「おはよー」など)を受け取ると「おはようございます、御主人様」もしくは「Good Morning, Master.」と返すサンプルです
"おはよ"=> array(
"(語句)",
),
//「今日の運勢」を含む発言を受け取ると6種類の中からランダムな返答を返すサンプルです
"今日の運勢"=> array(
"大吉",
"中吉",
"小吉",
"末吉",
"吉",
"凶・・・",
),
//「こんにちは」「こんにちわ」「こんちは」「こんちわ」を含む発言を受け取ると「こんにちはこんにちは!」と返す正規表現のサンプルです
"こん(に)?ち[はわ]"=> array(
"(語句)",
),
"(語句)"=>array(
"(語句)",
),
"(語句)"=>array(
"(語句)",
),
"(語句)"=>array(
"(語句)",
),
//「◯◯は好き?」という発言を受け取ると「◯◯おいしいです」と返す正規表現のサンプルです
//ただし「◯◯」の前には空白か「、」か「。」を入れないと「は好き?」以前の文章が全て繋がって表示されます
"([^\s、。]+?)は好き?"=> array(
"$1おいしいです",
),
//「会話終了」を含む発言を受け取るとリプライを返さなくするサンプルです
"会話終了"=> array(
"[[END]]",
),
);
638
:
名無しさん
:2011/02/13(日) 22:00:47
>>637
さん
アドバイスありがとうございました。
しかしながら、どうしても反応しないようです。
もう一度だけ一式ダウンロードから
一からはじめてみようと思います。
もし、それでも反応できないようでしたら、
いろいろと自分で考えられること、
皆さんからのアドバイスはやりつくしたと思いますので、
あきらめようと思います。
非力な私に力を貸していただき、ありがとうございました。
639
:
名無しさん
:2011/02/13(日) 22:17:58
>>638
拡張子を勝手に変えないこと、違いを軽視しないこと
拡張子が.txtのままダウンロードしたファイルは改行の形式がCR+LFに変更される場合があるので注意、再アップ前の保存時に確認
保存形式が変わっている場合と変わらない場合の区別が出来て慣れるまでは保存直前に必ず保存の形式を確認する
わりとみんな通る道です
少なくともここに一人
640
:
名無しさん
:2011/02/15(火) 02:05:07
botの名称(名前)を自動変更することは可能でしょうか?
641
:
名無しさん
:2011/02/16(水) 13:25:29
日付を指定した呟きではなくリプライについて質問です。
リプライ専用のファイルでcronを動かしているのですが、色々やってみてもわかりませんでした。
すみませんが、間違っている部分を教えていただけませんでしょうか。
直接このファイルを叩いても、
「3分以内のタイムラインに反応する単語がないようです。」とだけしか出てくれません。
よろしくお願いします。
<?php
//=============================
//EasyBotterを呼び出します
//=============================
require_once("EasyBotter.php");
$eb = new EasyBotter();
$response = $eb->replyTimeline(3,"tl_pattern.php");
if(date("n") == 2 && datew("j") == 15){
$response = $eb->reply(3,"norep.txt","valentine.php");
}else{
$response = $eb->reply(3,"norep.txt","reply_pattern.php");
}
?>
642
:
641
:2011/02/16(水) 13:32:46
すみません、641です。
上のファイルの日付指定は昨日の物になっていますが、実際は今日の日付でやっています。
あと、この記述にしていると、TLの反応語句にはリプライするのですが、
自分宛の@で送られたリプライに対しては無反応になってしまいます。
643
:
名無しさん
:2011/02/16(水) 13:46:10
>>641
datew("j")
644
:
641
:2011/02/16(水) 14:27:15
>>643
さん
即レスありがとうございました!できました!!!
もう少し早く書き込んでいたらバレンタインに間に合ったのにorz
bot.phpに書いてあるのをコピペしただけだったんですが…
645
:
名無しさん
:2011/02/16(水) 17:12:22
>>644
責任転嫁イクナイ、PHPエディタ使えば解決
646
:
名無しさん
:2011/02/16(水) 19:14:46
初めて質問させていただきます。
1時間おきにランダムポストされるように
if(date("i") == "0"){
$response = $eb->postRandom("data.txt");
}
と設定していました。
最初は問題なく1時間おきに動作していたのですが、突然なにもつぶやかなくなってしまいました。
*リプライには反応します。
*一度サーバーからファイルを全部削除してアップロードし直しましたが駄目でした。
*if(date("i") == "0"){}の部分をを消すと投稿される。
最初はこれで上手く動いていたのですが…。しばらく様子を見てみると直るということもあるのでしょうか。
何かやった方がいい事があればご教示ください。お願いします。
647
:
名無しさん
:2011/02/16(水) 20:06:40
>>646
「if(date("i") == "0"){}の部分をを消すと」
消した状態で投稿された時間は正確ですか?
その確認をしてみて下さい
推測ですがcronが00分の間に実行されていないのでは?と考えます
648
:
646
:2011/02/16(水) 20:52:53
>>647
if(date("i") == "0"){}を消して、手動で動かしてみました。
cronは、「cronが使えないサーバのための擬似cron」
http://www.synck.com/contents/technote/technote_1236834699.html
というのを利用させて貰っていて、PCの電源が入っている時のみ動くような状態です。2分おきの設定にして動かしています。
お話伺っていると、この擬似cronが00分調度のタイミングの時のみ投稿される…という事なんですよね。勉強不足ですみません。
文字通りプログラミングなどできない者で…
検索したりして調べてはみたのですが
if(date("i") =="5")
という書き方をすれば、00分から05分の間に実行され、問題解決できるでしょうか。
お時間ありがとうございます。よろしくお願いします。
649
:
646
:2011/02/16(水) 22:05:20
>>647
さん、ありがとうございます。解決しました!
この擬似cronを実行する時に、偶数分でスタートさせたら上手くいきました。いただいたお返事がとても参考になりました。
ありがとうございます!!!
650
:
名無しさん
:2011/02/17(木) 00:19:24
>>649
老婆心でアドバイスしておくと
「毎時1分以内の時」の設定にした方が、今後ズレが生じた時の為になるよ
651
:
名無しさん
:2011/02/18(金) 04:49:25
atpagesでcronはGAEをつかっています。
定期的にランダムで呟くようにはできたのですが
自動でフォロー返しさせようとしても
Twitterへの投稿に失敗しました。
ユーザー名:@
object(SimpleXMLElement)#5 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(22) "Status is a duplicate."
}
とでます。どなたかアドバイスお願いします。
652
:
名無しさん
:2011/02/18(金) 10:50:17
>>651
phaさんの公式ページ、手動編参照
http://pha22.net/twitterbot/2.0/faq.php
653
:
名無しさん
:2011/02/18(金) 15:48:03
>>652
コピペしたんですが、
やはりエラーになります。
Bot.phpに
$eb = new EasyBotter();
これと↑
$response = $eb->autoFollow();
これの↓間に
?>
入れればいいんですよね?
なぜエラーになるんでしょうか?
object(SimpleXMLElement)#5 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(22) "Status is a duplicate."
}
["error"]=>
string(22) "Status is a duplicate."
ここって、22行目が間違ってるってことでしょうか?
654
:
名無しさん
:2011/02/18(金) 16:25:11
Status is a duplicate でぐぐってください
655
:
名無しさん
:2011/02/18(金) 16:33:38
>>654
ありがとうございます
ただ、data.txtには30パターンほど入れてるのですが、自動フォロー返しにしようとすると
毎回表示されます。ランダムリプライ自体は作動しているのですが、フォローは
かたくなに、してくれません。
Bot.phpは
<?php
//=============================
//EasyBotterを呼び出します
//=============================
require_once("EasyBotter.php");
$eb = new EasyBotter();
$response = $eb->reply(6,"data.txt","reply_pattern.php");
$response = $eb->postRandom("data.txt");
$response = $eb->autoFollow();
?>
をコピペして、cronの作動時間に合わせて、6に書き換えただけなのですが、どこがダメ
なのでしょうか?
よろしくお願いします。
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板