したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が900を超えています。1000を超えると投稿できなくなるよ。

TwitterBotPHP質問スレ

1pha:2009/12/01(火) 17:51:42
http://pha22.net/text/twitterbot.html
でphaが公開しているPHPのTwitterスクリプトについて、
スレッド立てるほどじゃない質問はこちらにどうぞー。
phaがときどき巡回しますが対応が遅れることも多いので、質問に答えてくれる人も募集しています!

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");
}
になってます

588585: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
↑こちらの質問になります。
よろしくお願いします。

593582: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
解決しました!

599589:2010/12/19(日) 23:34:29
>>590
レス遅くなりすみません、夜間にタイムラインに反応しないようにさせる事ができるようになりました。
ありがとうございました!

600582: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時云々入れるのか&hellip;
||の意味わかってる?「または」「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&quot;;
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関連の記述をすればいいのではないかと思うのです

614613: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);
}

を混ぜておけばいい気がします

615613: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&amp;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=○'); だけを置いたら成功しました。

ただ、データファイルまるごとに適用となってしまうので、どうしてもアイコン変更させたい反応語は
別ファイルに分岐させています。
ファイル数が増えるので、もっとスマートな方法があれば私も知りたいです…。

621619: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");
}


?>

642641:2011/02/16(水) 13:32:46
すみません、641です。
上のファイルの日付指定は昨日の物になっていますが、実際は今日の日付でやっています。
あと、この記述にしていると、TLの反応語句にはリプライするのですが、
自分宛の@で送られたリプライに対しては無反応になってしまいます。

643名無しさん:2011/02/16(水) 13:46:10
>>641
datew("j")

644641: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分の間に実行されていないのでは?と考えます

648646: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分の間に実行され、問題解決できるでしょうか。
お時間ありがとうございます。よろしくお願いします。

649646: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に書き換えただけなのですが、どこがダメ
なのでしょうか?

よろしくお願いします。

656655:2011/02/18(金) 17:18:37

自己解決しました。

お騒がせしましたが、アドバイスして下さった方ありがとうございました。
これからも何かあったらよろしくお願いします。

657名無しさん:2011/03/03(木) 18:12:00
他人宛のリプライにもTL反応させたいのですが、どこを触ればいいのか見当がつきません。
アドバイス頂けると嬉しいです。

また、bot同士の会話の為に反応させるので、(普段はTL反応させていない)迷惑にはなりません。
よろしくお願いします。

658名無しさん:2011/03/04(金) 04:38:52
>>657
過去ログにその回答があるので探して下さい

659名無しさん:2011/03/04(金) 18:10:55
バージョン2.04を使っております。
3/3の昼以降から一部機能(phpの一部)が動かなくなっております。

botの動き
(1)1日2回午前と夜に動くように指定しています。
(2)同じ人とは1度に3回以上リプライしないように指定しています。
(3)リプライにはお返事します
と指定しているのですが、現在(3)のみが稼働しているという状況です。

動かなくなったタイミングがレンタルサーバーがPHP5.3になったのと同じということと、
私自身がtxtはさわりましたがphpをさわったりしていなかったので
サーバーの影響なのだろうかと考えているのですが、
原因が分かる方いらっしゃいますか?

バージョン2.05にしたらなおりますかね?

660名無しさん:2011/03/04(金) 18:22:28
あ!補足です
5.3に対応したけれど5.3への切り替え自体はしていません
5.2のままにしているので メンテナンスがあった という事だけ
になります・・・ね

とりあえずレンタルサーバーの方へも問い合わせはしております。
返事はまだ無いです。

661名無しさん:2011/03/04(金) 19:35:58
【バージョン】 Ver.2.0x
【設置鯖名】 検討中
【PHPのバージョン】 不明
【手動】 まだ
【実行】 検討中
【実行間隔】 検討中
【不明点】 tw.txtが解凍フォルダに入っていない。

botを作ろうと思ってダウンロードしてみたら、つぶやきを書きこむファイルが見当たりません。
まだサーバも探し中で申し訳ないのですが、ぜひ使いたいので教えてください。よろしくお願いします。
テキストドキュメントは、データとライセンスが入っていました。

662名無しさん:2011/03/04(金) 20:25:33
>>661
phaさんの説明にある「tw.txt」は記述ミスです
「data.txt」というのがありますので、説明を読み替えて使用して下さい

663名無しさん:2011/03/04(金) 23:54:25
>>661
そんなときこそ上にリンクが貼ってある非公式wikiを見てください

664名無しさん:2011/03/08(火) 01:21:19
fizby.netのサーバーをを使っているのですが、1ヶ月ほど前から動作しない、
また動作してもやたら不安定(ポストしたりしなかったり3分間隔のはずのリプライを30分後とかに返したり)になってしまいました。
しかも2週間ほど前からはFTPまで接続できなくなってしまって…。
どなたか同じような現象になってる方いらっしゃいますか?
また、解決策わかる方おられないでしょうか

すれ違いだったらすみません

665名無しさん:2011/03/09(水) 13:11:20
初めて質問させていただきます。
曜日と時間ごとに違うツイートを(30分ごとに)させたいのですが、
if(date("i") % 30 === 0){
switch(true){

case (date("w") == "1″ && date("G") > "6″ && date("w") == "1" && date("G") < "12"):
$response = $eb->postRandom("data1.txt");
break;
}
みたいな表記ではできませんか?ここからcaseをずらーっと足していく形で・・・。
一応調べてはみたのですが、曜日と時間に分岐させる方法はあっても、それらを30分ごとにツイートさせる方法がみつかりませんでした。
よろしくお願いします。

666名無しさん:2011/03/18(金) 07:05:07
【バージョン】 Ver.2.0.5
【設置鯖名】 @PAGES
【手動】 エラー表示されますが、正常にリプライします。
【実行】 GAE-Cron
【実行間隔】 6分
【不明点】
 本日、縮小運営でbotを再開させた者です。
 対botに対してのリプライ制限を設けたく、非公式wikiにある「特定のアカウントとのリプライ回数を制限したい」を実装させたところ、動作に問題はないもののエラーが出てしまい解決策が分からずにいます。
 動くので大丈夫かとも思いましたが、botとの会話過多はどうして避けたいと思い、現状ではどうしても不安が残ってしまうのでぜひご教授いただければと思います。
 
 EasyBotter.phpへの変更点は「特定のアカウントとの〜」のみです。
 kaiwalog.txtは自動で作れなかったので空のテキストを手動でサーバーに上げました。アクセス権は606へ変更済みです。
 通常post用とリプライ用のcronは別々に設定、鯖にも別々のファイルで上げました。
 
 
 [手動でbot.phpを叩いた際の表示文]
 Warning: file_put_contents(kaiwalog.txt) [function.file-put-contents]: failed to open stream: Permission denied in (略)/reply/EasyBotter.php on line 263
 
 Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 27 in (略)/reply/EasyBotter.php on line 271
 
 Twitterへの投稿に成功しました。
 @(botアカウント)に投稿したメッセージ:@(ID略) リプライ文 http://twitter.com/botアカウント/status/48498980673433600
 
 Warning: file_put_contents(log.dat) [function.file-put-contents]: failed to open stream: Permission denied in (略)/reply/EasyBotter.php on line 69

667名無しさん:2011/03/19(土) 01:30:38
>>>666
kaiwalog.txtとlog.datのパーミッションはあなたのレス番と同じ666で試してみようか

668名無しさん:2011/03/20(日) 20:09:04
>>667
ありがとうございます。
kaiwalog.txtとlog.datのパーミッションを666に変えて再度試したところ、
「Warning: preg_match〜」のエラーを1つ減らせることができました!

ですが、「Warning: file_put_contents〜」エラーは未だ表示されてしまいます。
こちらは解消できないでしょうか・・・、再びご教授いただけると嬉しいです。
>>666からの変更点はパーミッションのみです。


[手動でbot.phpを叩いた際の表示文]
Warning: file_put_contents(kaiwalog.txt) [function.file-put-contents]: failed to open stream: Permission denied in (略)reply/EasyBotter.php on line 263

Twitterへの投稿に成功しました。
@botIDに投稿したメッセージ:@ID略 リプライ文 http://twitter.com/(botID)/status/49419672…(数字略)

Warning: file_put_contents(log.dat) [function.file-put-contents]: failed to open stream: Permission denied in (略)/reply/EasyBotter.php on line 69


[エラーが出ているEasyBotter.phpの前後文]
233 //■■会話数制限(リプライ返し)■■
(略)
260 $botdata=implode(",",$botdata);
261 $botdata=(string)$reply->user->screen_name.",".$botdata;
262 }
263 file_put_contents($filenameb,$botdata);
264 if($botkey == "0"){
265 continue;
266 }


66 //どこまでリプライしたかを覚えておく
67 function saveLog(){
68 rsort($this->_repliedReplies);
69 return file_put_contents($this->_logDataFile,$this->_repliedReplies[0]);
70 }

669名無しさん:2011/03/21(月) 18:57:45
【バージョン】 Ver.2.0
【設置鯖名】 @pages
【手動】 動かない
【不明点】曜日と時間ごとに違う内容を30分ごとに呟くbotを作ろうとしています。
ifの入れ子で出来るかな?と試してはみたのですが、bot.phpにアクセスするとNULLという単語と二分以内に受け取った@はないようです。と表示されます。
NULLは意味のない、とかそういう意味ですよね?bot.phpの中身が間違っているということでしょうか?
ご教授願います。

670名無しさん:2011/03/21(月) 21:57:47
>>669
まずは非公式wikiの通りに、一通りの設置テストをしてください
いきなりifで括らず、デフォルトの動作の確認を

671名無しさん:2011/03/22(火) 22:28:18
【バージョン】 Ver.2.05
【設置鯖名】 @pages
【手動】 @リプ、TL反応リプは正常
【不明点】
18分、36分、54分の時に通常ポストをさせたくて
if(date("i") % 18 == 0){
$response = $eb->postRandom("data.txt");
}
と書いたのですが、54分と0分にポストします。どこを直せば良いのでしょうか?ご教授お願いします。

672名無しさん:2011/03/22(火) 23:45:20
>>671
@pagesはサーバータイムが大幅にずれていることが散見される
初心者スレ3の279を参考に、まずはサーバータイムが正確かどうかを確かめて下さい
サーバータイムが正しいようであればあとは書き方の問題になってくる

手動/CRONとサーバータイムがずれていたり、鯖重過ぎなどでジャストタイムで動かない時は
%を使わず前後1分、または前後どちらか1分を含めた時間で動かすと良い
||で全部の時間を書き出すか、%を「== 0」以外にするかはお好みで

673名無しさん:2011/03/23(水) 10:28:08
>>672
ありがとうございます。
修正したのですが、今度は
Parse error: syntax error, unexpected $end in /〜bot.php on line 82
とエラーが出てきました。82行目は[EOF]があるだけで一切いじってないのですが…どこが悪いのでしょうか


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板