したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

EasyBotter2.0

1pha:2010/02/08(月) 19:43:37
EasyBotter2.0のベータ版を公開しました。
http://pha22.net/twitterbot/

主な変更点は
・OAuth認証に対応した
・タイムラインの特定の言葉に反応する機能を追加
・自動フォロー返し機能を追加
・特定の時間帯や特定の日付だけ別の会話ファイルを読み込ませるのが設定しやすくなった
・正規表現によるパターン反応でできることが増えた
・前は動いてなかったbot同士の会話ループ制限機能をちゃんと作った(多分。。。)
・PHP5が動いているサーバーが必要になった(PHP4の人すみません。。。)
です。
ファイル構成など全体的に変わっています。前のバージョンのデータファイルはそのまま使えますが。
使ってみて感想など貰えたらうれしいです。

2名無しさん:2010/02/08(月) 22:14:35
バージョンアップありがとうございます!
大幅に変わりましたね……。おつかれさまでした。
早速DLさせていただいています。

reply_pattern.phpの5行目、
  $reply_pattern = array(
になっていまが、「reply_pattern.phpの編集」のページによると正しくは
  $data = array(
ですか?


同じファイルの冒頭コメントも
  raply_random.phpで特定の単語を〜〜
ですが、DLしてきた状態では「raply_random.php」が存在していないので初見では混乱するかもです。
(初期から使わせていただいているので分かりますが…)


それから、bot.phpの22行目、
  $response = $eb->reply(10,"data4.txt","reply_pattern2.php");
が//でコメントアウトされていないので、しておくと安全だと思います。

ところで「bot.php」は、コピーしておいてファイル名だけ変更して、
「reply_random.php」とか「post_rotation.php」など動作ごとにphpファイルを作ってcronで実行させれば良いですよね?


一通り設定をし終えてサーバにあげて手動で叩いてみたところですが、
エラーが出てしまうので、もう一度よく読みながらやり直してみます……。
phaさんの苦心して作られた新ver.で是非動かしたい…………。

3pha:2010/02/08(月) 23:47:19
>>2
おお、指摘ありがとうございます。指摘して貰った点を直しました。

>ところで「bot.php」は、コピーしておいてファイル名だけ変更して、
>「reply_random.php」とか「post_rotation.php」など動作ごとにphpファイルを作ってcronで実行させれば良いですよね?

これは、$eb->reply()と$eb->postRandom()を同じファイルで動作させることは可能です。

エラーでてしまいますか。。。なんでだろう。。。
ちゃんと動いてる人っていますかね。

4名無しさん:2010/02/09(火) 02:21:54
いつもソース利用させてもらっています。バージョンアップお疲れ様です。

さっそく使わせていただいたのですが、ひとまずポスト機能のみをオンにしてbot.phpを実行したら
「Warning: require_once(PEAR/Exception.php) [function.require-once]: failed to open stream: No such file or directory in /usr/local/www/htdocs/****/public_html/*****/PEAR/HTTP/Request2/Exception.php on line 47

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Exception.php' (include_path='.:/usr/local/lib/php:/usr/local/www/htdocs/****/public_html/****/PEAR') in /usr/local/www/htdocs/****/public_html/****/PEAR/HTTP/Request2/Exception.php on line 47」
というエラーが出てきました。知り合いに聞いたところ「ファイルが足りていない」と言われました。PEARフォルダにException.phpファイルを置くと動くようです。

それからreply_pattern.phpフォルダの冒頭を$dataに直せばば引き続き使えるそうですが、新しく配布されたファイルでも$reply_patternで始まっていますがこのままでも使えるのでしょうか?一応$dataに置き換えて使っていますが……

5pon:2010/02/09(火) 06:20:40
うちもだめですね。
何もない時は「○分内に受け取った@はないようです」と出ますが
@を送ったりするとエラーが出ます。

6名無しさん:2010/02/09(火) 08:47:39
エラーが出た人はエラーの内容を書いてくれると嬉しいです

7名無しさん:2010/02/09(火) 09:36:37
こちらも>>4と同様のエラーがでました。(環境はポストとリプレイ返し、自動フォローON)
また、ダメもとで問題箇所である47行目をフルパス
require_once 'C:/www/TwitterBot/PEAR/HTTP/Request2/Exception.php';
にした所、以下のエラーに変わりました。

Fatal error: Class 'PEAR_Exception' not found in C:\www\TwitterBot\PEAR\HTTP\Request2\Exception.php on line 60

当方が自鯖でbotを動かしてるための弊害かもしれませんが、確認お願いします。

8名無しさん:2010/02/09(火) 10:41:53
いつもソースを使わせていただいてます。ありがとうございます。
本日新しく2.0を使わせて頂こうとしたのですが、

Warning: require_once(PEAR/Exception.php) [function.require-once]: failed to open stream: No such file or directory in /home/sites/lolipop.jp/users/***/web/***/PEAR/HTTP/Request2/Exception.php on line 47

Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Exception.php' (include_path='.:/usr/local/php5/php:/home/sites/lolipop.jp/users/***/web/***/PEAR') in /home/sites/lolipop.jp/users/***/web/***/PEAR/HTTP/Request2/Exception.php on line 47

というエラーが出てしまいました。PEARフォルダ直下にException.phpというファイルが必要みたいなんですが、私ではどうしたらいいか分かりません……。
どうぞ、対処方法等ご教授下さいませ。

9pha:2010/02/09(火) 11:20:45
>>4
>それからreply_pattern.phpフォルダの冒頭を$dataに直せばば引き続き使えるそうですが、新しく配布されたファイルでも$reply_patternで始まっていますがこのままでも使えるのでしょうか?一応$dataに置き換えて使っていますが……

すみません、修正しました!

>>7
>>8
Exception.phpが必要ですか。。。
Exception.phpをzipに同梱してみました。もしよかったらそれをダウンロードして試してもらえたらうれしいです。
ひょっとしたらまた何か他のファイルが足りないって言われるかもしれないですが。。。

10うら:2010/02/09(火) 12:22:05
pha氏、乙です!

さっそくダウンロードさせていただきます。

11名無しさん:2010/02/09(火) 13:47:25
お世話になっております。2.0betaをダウンロードさせて頂き、
bot.phpへアクセスすれば、postが成功するところまで確認しました。

が、replyがある場合には
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 8 in /home/example/EasyBotter.php on line 233 というエラーが表示されます。(返信そのものは成功しています)

そして、cronでアクセスをすると
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/example/EasyBotter.php on line 4 というエラーが出て、投稿そのものが成功しません。

phpのバージョンは5.1.6です。
アドバイスを頂けましたら幸いです。

12名無しさん:2010/02/09(火) 14:23:10
とってもおもしろいブログだよ♪

たまに更新もしてるから見に来てください☆ミ
ちょっとエッチなプライベートブログです(*^^*)

ttp://stay23meet.web.fc2.com/has/

13名無しさん:2010/02/09(火) 14:24:21
とってもおもしろいブログだよ♪

たまに更新もしてるから見に来てください☆ミ
ちょっとエッチなプライベートブログです(*^^*)

ttp://stay23meet.web.fc2.com/has/

1411:2010/02/09(火) 15:08:28
たびたび失礼します。
先ほどのParse errorの件は、
こちらのサーバーのcronがphp5ではなかったことが原因でした。
php5として実行しましたら、問題なくpostできましたのでご報告させて頂きます。

ただ、今度は
Warning: simplexml_load_string() [function.simplexml-load-string]:xxx(ここは毎回違います) /EasyBotter.php on line 517
というエラーが、cronからは送られています。
特にpostに問題はないようではありますが、ご報告まで。

15名無しさん:2010/02/09(火) 17:04:04
お世話になります。最新版ダウンロードして使わせていただきました。
サーバーにアップしてみたところ
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR
というエラーが出てしまい困っています。
全角空けなど調べてみましたが何もありません。
サーバーもPHP5に対応しているはずなのですが、このエラーが出た場合どうしたらいいのかご助言いただけますと幸いです。

16tageri:2010/02/09(火) 18:44:21
いつもお世話になってます。最新版bot2.0betaをDLして
postRandomだけ動作させました。

サーバーにアップして確かめたところ、今のところ正常に動いているので報告します。
単にpostRandomのコメントアウトを外して、あとはデフォルト状態なので、これから
時間別などいじったらどうなるかわかりません。あと、気になることがあるのですが
POSTされるとき
Twitterへの投稿に成功しました。
@botID に投稿したメッセージ:セリフhttp://twitter.com/bot333/status/8848348021

と出てくるのですが、これは何なのでしょうか?アドレスの部分はTL上には
出てこないのですが、少し気になります。

ちなみにウチの環境ですが、以下の通りです。
・さくら鯖(スタンダード)
・PHPバージョン5.2.12(さくら標準)
・さくらのcron(1時間毎)

定時POSTが動いたので、次はリプライもテストしてみようと思います

17karin:2010/02/09(火) 19:07:57
初めまして、以前からこちらのプログラムを使わせていただいている者です。

EasyBotterを早速DLさせていただきました。
タイムライン上の語句に反応するようになったとのことで、
いままでは別の方の物を参考に動かしていたのですが、
ぜひphaさんの物を使わせていただこうと設定し、手動で叩いてみたところ、
設定した時間の間に存在する他人宛のリプライにまで反応してしまいました。
上手く説明できないのですが……
bot宛のリプライではなくて、例えば私がbot以外の友人にリプライを送り、
「おはよう」なら「おはよう」と呟いたそれにも反応する、ということです。
説明ベタですみません…。

もしかしたら私の設定の仕方がおかしかったのかとも思ったのですが、
きちんと動いている所を見ると別の原因があるのかな…と思いまして
投稿させていただきました。

18名無しさん:2010/02/09(火) 19:09:47
Fatal error: Uncaught #0 PEAR/HTTP/OAuth/Consumer.php(250): HTTP_OAuth_Consumer_Request->send()
#1 EasyBotter.php(511): HTTP_OAuth_Consumer->sendRequest('https://twitter...', Array, 'POST')
#2 EasyBotter.php(522): EasyBotter->_setData('https://twitter...', Array)
#3 EasyBotter.php(98): EasyBotter->setUpdate(Array)
#4 bot.php(12): EasyBotter->postRandom('data.txt')
#5 {main}
thrown in /PEAR/HTTP/OAuth/Consumer/Request.php on line 214


失礼します、bot.phpにアクセスすると以上の文章が帰ってくるのですが原因はわかりますでしょうか?

198:2010/02/09(火) 19:35:56
>>9

お早い対処ありがとうございます!
早速DLしたもので再挑戦してみましたら、無事にPOSTに成功致しました!!
本当に、本当にありがとうございます!

20名無しさん:2010/02/09(火) 22:56:31
いつもPhaさんのスクリプトにはお世話になっております。
昨日ダウンロードさせて頂きまして、色々書き換えた所
定期post・リプライ・TLへのワード反応全てうまく行きました!
凄く管理がしやすくなり感動しています…有難うございます!

高度な設定など準備中のものもあるようなので、
そちらの発表を心待ちにしつつ取り急ぎ御礼まで!

21pha:2010/02/10(水) 01:03:25
投稿失敗した場合、エラーを表示するように改良しました!
エラーが出る場合は表示されたエラー内容を書いてもらえると対応しやすいです!
既にダウンロード済みの人は新たにダウンロードして、EasyBotter.phpだけ入れ替えてくれたらうれしいです。

>>14
>Warning: simplexml_load_string() …
というのは、Twitter側の反応がおかしいときにときどき出るようです。
どうしようもないし、何度も繰り返してたら普通の反応になるようになると思います。

>>15
なんだろう。。。

>>16
それは変ですね。。。。

>>17
>設定した時間の間に存在する他人宛のリプライにまで反応してしまいました。

それはその他人をbotがフォローしている場合、それにも反応してしまいますね。。。
対応を検討します。

22名無しさん:2010/02/10(水) 01:24:39
いつもお世話になっております。
EasyBotter2.0で定期ポスト・リプライ・TLへの反応を設定してみたのですが、以下のような不具合が出ました。

・TLへ反応させようとすると他人あての@の内容にも反応してしまう
・会話を終了させようとすると[[END]]とそのまま投稿してしまう
・サーバーによるのかも知れませんが(FileQ使用)正規表現が上手く読み取ってもらえてない気がします
(ABとACという文字列に反応させようとA[BC]と書いたら、ADという単語にも反応してしまうなど)

このあたりの対処法など教えて頂けると幸いです。

2322:2010/02/10(水) 01:26:30
すみません、リロードしていませんでした
一つのphpファイルで複数の動作ができるのは大変便利なので期待しています。大変だと思いますが開発頑張って下さい

24名無しさん:2010/02/10(水) 01:40:05
いつもおせわになっております。
私も16さんと同じようにメッセージの後ろにURLが出ていました。
それでEasyBotter.phpの496行目の
$message .= " <a href='http://twitter.com/&quot;.$response-&gt;user-&gt;screen_name.&quot;/status/&quot;.$response-&gt;id.&quot;' target='_blank'>http://twitter.com/bot333/status/&quot;.$response-&gt;id.&quot;&lt;/a&gt;&lt;br /><br />";
が反応して出てきているのではと思います。
一応//で消して試した所、URLは消えたので

2522:2010/02/10(水) 01:45:01
たびたびすみません
定期ポストを毎時○○分に設定し、
if(date("i") == ○○){
$response = $eb->postRandom("data.txt");
}
としているのですが、二重投稿されてしまいます。
時間設定方法のミスでしょうか?

26名無しさん:2010/02/10(水) 03:15:55
いつもbotがお世話になっております!最新版とても嬉しいです。
さっそくためしてみたところ、目立ったエラーは無いのですが、
私も22さんと同じく
・「TL上の@付きの内容にも反応してしまう」
これがどうしてもネックでなかなか実装できません…!
この対処法を教えて頂けましたら本当に助かります!よろしくお願いします〜!

2716:2010/02/10(水) 07:38:38
>>24さん
EasyBotter.phpの496行目をコメントアウトしたらURL出なくなりました。
ありがとうございます

28名無しさん:2010/02/10(水) 09:27:08
エラーが表示されるようになった人のことですが
やはり戻ってくるのは>>18でした。
何卒ご助言よろしくお願いいたします。

29karin:2010/02/10(水) 11:00:36
>>21
ああ、なるほど…!
そういうことだったのですね。
今試したら確かに、bot側からはフォローしてない人宛に
反応語句つぶやいても反応しませんでした。
少しうるさくなるかなと言うことで今は前のに戻しているのですが、
もし対応されたらまたよろしくお願いします。
他の機能はこのbotとは別の物で使わせていただいています。
素晴らしいプログラムをありがとうございます…!

30うら:2010/02/10(水) 12:25:22
>>16,24
496行目ですが、次のように書き換えてみたらいかがでしょうか。
$message .= " <a href='http://twitter.com/&quot;.$response-&gt;user-&gt;screen_name.&quot;/status/&quot;.$response-&gt;id.&quot;' target='_blank'>http://twitter.com/&quot;.$response-&gt;user-&gt;screen_name.&quot;/status/&quot;.$response-&gt;id.&quot;&lt;/a&gt;&lt;br /><br />";
次の版では直してくると思いますけど。

31pon:2010/02/10(水) 13:01:28
うちのエラーも>>18と同じです。

32うら:2010/02/10(水) 13:20:05
>>22
> (ABとACという文字列に反応させようとA[BC]と書いたら、ADという単語にも反応してしまうなど)

phpとして正規表現が定義されてるので、鯖ごとに違うことはないはずです。
別の条件に反応している可能性はありませんか?
また入力した条件式は、その直後に*や?があったりしませんか?

テキストエディタにも正規表現を使って検索できる機能がある(ものもある)ので、
どうマッチするのか、試してみると良いかも。

こちらも参照
PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace - SAK Streets
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

33うら:2010/02/10(水) 14:50:07
>>25
そのif文の他にも、$eb->postRandom("data.txt");などを書いていませんか?

例えば
if(rand(0,10) == 0){
 $response = $eb->postRandom("data.txt");
}
if(date("i") == ○○){
 $response = $eb->postRandom("data.txt");
}
などとすると、11回に1回チェックの後、毎時○○分チェックを行います。
どちらも成立する時は、それぞれで投稿を行ってしまいます。
v.1.4の時の質問にもあったswitch〜caseで条件判定をしてみてください。

>>pha氏
bot.phpの15〜26行は、消すか後ろへ移動させた方が良いと思いますよ。

3418:2010/02/10(水) 14:59:52
>>31
同じ症状の人やっぱりいましたか
以前のバージョンは問題なく動いているんですがね…

35うら:2010/02/10(水) 15:49:15
>>34
OAuth認証がらみですね。
最後の行の箇所でリクエストした認証結果を処理し、エラー処理しているようですが、
想定外の結果が返ってきている、ので色々エラーとなってしまってるのかと。
以下のページでOAuthのキー類は取得、セットされているのでしょうか?

プログラミングができなくても作れるTwitter botの作り方 - setting.phpの編集
http://pha22.net/twitterbot/2.0/setting.php

36名無しさん:2010/02/10(水) 16:17:23
はじめまして。bot初心者ですが質問させて下さい。
ひと通り設定をしてbot.phpにアクセスをしたところ、

Twitterへのpostに成功しました。
@yourbotに投稿したメッセージ:(セリフ)

の画面が数十回に一回しか出ません。
何度アクセスしても空白の画面表示ばかりで、
原因が分からないのですが
このような場合どうしたらよいでしょうか。

3736:2010/02/10(水) 16:42:18
ごめんなさい自己解決しました。
bot.php中のif文を消せば良かったんですね。
スレ汚し失礼しました。

38名無しさん:2010/02/10(水) 16:43:07
>>35
はい、取得済みで
キーも以前のバージョンに埋め込んでみた物が正常に動作しています

39名無しさん:2010/02/10(水) 17:35:14
どなたか御知恵を拝借出来ると助かります。すみません。

//bot.phpを実行したときに、2月14日のみvalentine.txtのデータを、それ以外はdata.txtのデータを使う
if(date("n") == 2 && data("j") == 14){
$response = $eb->postRandom("oomisoka.txt");
}else{
$response = $eb->postRandom("data.txt");
}

上記の【特定の日だけ定期ポストのテキストを変える】ものを
【指定の日だけリプライのテキストを変える】にはどうすればいいのでしょうか?
以下のような書き方(本日の日付けに変更)にしてテストしてみましたが
reply_pattern.phpからの返答でした。

if(date("n") == 2 && data("j") == 14){
$response = $eb->reply(2, "tw.txt", "reply_pattern_0214.php");
}else{
$response = $eb->reply(2, "tw.txt", "reply_pattern.php");
}

40うら:2010/02/10(水) 17:53:54
>>38
うーん。じゃ分かんないです。すみません。
うらは今回初めてOAuth認証登録をして、ですんなり通ったものですから。

>>39
最初の行、タイプミスですから、以下と入れ替えで。
if(date("n") == 2 && date("j") == 14){

4139:2010/02/10(水) 18:05:30
>>40
ありがとうございました!

42名無しさん:2010/02/10(水) 18:34:34
>>40
そうですか…ありがとうございました…。

http://www.hosimitu.com/2009/11/2020-1358.php
ちなみに以前の1.4の時にはこちらを参考にしました

43名無しさん:2010/02/10(水) 19:35:58
導入しましたが、以下のエラーがでます。


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>/home/httpd/leon/public_html/PEAR/HTTP/OAuth/Consumer.php:250</td></tr>
<tr><td align="center">1</td><td>HTTP_OAuth_Consumer->sendRequest('https://twitter.&hellip;', Array, 'POST')</td><td>/home/httpd/leon/public_html/EasyBotter.php:511</td></tr>
<tr><td align="center">2</td><td>EasyBotter->_setData('https://twitter.&hellip;', Array)</td><td>/home/httpd/leon/public_html/EasyBotter.php:522</td></tr>
<tr><td align="center">3</td><td>EasyBotter->setUpdate(Array)</td><td>/home/httpd/leon/public_html/EasyBotter.php:158</td></tr>
<tr><td align="center">4</td><td>EasyBotter->reply(1, 'data2.txt', 'reply_pattern.ph&hellip;')</t in /home/httpd/leon/public_html/PEAR/HTTP/OAuth/Consumer/Request.php on line 214

原因等分かれば教えて頂けないでしょうか?

44名無しさん:2010/02/10(水) 19:45:07
>>43
うちでもcronから同じ内容のエラーが吐き出されます。
PHPのバージョンは5.2.9です。

45karin:2010/02/10(水) 20:47:07
度々すみません。

reply_pattern.phpの後の方に記載されている、
"([^\s、。]+?)は好き?"=> array(
"$1おいしいです",
),
のところなのですが、これをそのまま使ってbotに
「○○は好き?」
とリプライを送ると、
「?おいしいです」や「"おいしいです」と言ったように
文字化けして投稿されてしまいます。
文字コード、改行コード共に(TeraPadを使用しているので)
UTF-8N/LFで通常通り。他の「おはよう」などにはきちんと反応して
くれます。
他に同じ症状になられている方は居りますでしょうか…

46名無しさん:2010/02/10(水) 20:52:49
誘導でお邪魔します。
申し訳ありません。お手上げなので質問させて頂きます。
以前のバージョンでは問題なく動いたのですが、ver.2.0にすると
bot.phpにブラウザでアクセスした時
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in (URL)/EasyBotter.php on line 4
というエラーが出てしまいます。
以前のレスに↑はphp5でないと出るエラーとありましたので、php5以上のサーバーでも試してみたのですが
エラーこそ出ないものの画面が真っ白になり何も表示されません。
EasyBotter.phpの中は特にいじってないのですが、どなたか原因わかる方いらっしゃるでしょうか…?
情報が少なすぎて申し訳ないです。

ちなみに一応、EasyBotter.phpの4行目付近の記述です。(配布のものと変わっていないはずですが…)
<?php
class EasyBotter
{
private $_screen_name;
private $_consumer_key;
private $_consumer_secret;
private $_access_token;
private $_access_token_secret;

47名無しさん:2010/02/10(水) 21:37:19
TL反応はひとまず
//タイムラインへの反応を作る
ところにある//リプライパターンと照合の直後に
if(!preg_match("/\@/i",$text)){をいれて
if(empty($status)){の前に
}で〆ると@付きには反応しないかと思います

48名無しさん:2010/02/10(水) 21:44:38
>>42さん
似たようなエラーが出たような気がするので書き込んでみます。
すぐにリロードしたりファイルをアップしたのでチラッとしか見てなかったので
同じかどうか分かりませんが、1.4でOAuthキー取得していたならありそうなので

・1.4の時で取得してアップしたOAuth.phpとtwitterOAuth.phpを2.0用と同じところに入れる
・setting.phpに入れる4つの値が間違っていないかもう一度確かめる

私はこれで直りましたが、もし違っていたらすいません

49名無しさん:2010/02/10(水) 22:29:08
ロリポサーバーです。
Parse error: syntax error, unexpected T_DEC in /home/sites/lolipop.jp/users/アカウント/web/bot/bot.php on line 14
と出たのですが…ロリポのPHPの設定を5にしてあります。
ぐぐったところ、加算子/減算子とでたのですが何処をいじればいいのか謎です。

50karin:2010/02/10(水) 23:43:40
>>47

>>17の者です。
試してみたらうまく行きました。
情報ありがとうございます!

51pha:2010/02/11(木) 04:08:26
phaです。
取り急ぎお返事できそうなものにお返事。

>>16 >>24 >>30
すみません、ただの消し忘れです。修正しました。

>>22 >>45
正規表現周りか・・・ちょっとチェックしてみます

>>33
>>bot.phpの15〜26行は、消すか後ろへ移動させた方が良いと思いますよ。
うわ、ほんとですね。。。消しました。。。

>>18 >>31
うーん、なんだろう。。。

>>43
多分これはTwitterの調子が悪い時に出るんだと思います。。。
何回か繰返したらうまく動かないでしょうか

>>46
バージョン2.0以上はPHP5以上でないと動きません。
真っ白になるというのは、bot.phpの中身の設定がうまくいってなくはないですか。

>>47
おお、GJ!!

>>49
うーむ、bot.phpの中身の書き方が間違ってそうな予感・・・

52名無しさん:2010/02/11(木) 04:10:41
EasyBotter.php128行目の
function reply($cron = 2, $replyFile = "data.txt", $replyPatternFile = "reply_pattern.php"){
この行はどういう意味があるのでしょうか?
data.txtはリネームして使っているのでここでファイル指定する必要はないと思うのですが

53名無しさん:2010/02/11(木) 05:40:16
>>48
やってみたところエラーメッセージがかわり
Fatal error: Class 'HTTP_OAuth' not found in PEAR/HTTP/OAuth/Message.php on line 43
となりました

やっぱり2.0はダメなんですかね…

54名無しさん:2010/02/11(木) 07:23:18
>>46
>エラーこそ出ないものの画面が真っ白になり何も表示されません。
参考になるかわかりませんが…同じ状況で躓いていたのですが、
画像広告なしのサーバーに移動した所、動くようになりました。

55名無しさん:2010/02/11(木) 10:29:54
reply_pattern.phpファイルに↓のように書いて
"テスト"と@を飛ばしたのですが
"「」ですね。"としか返ってきません。
2.0では、{tweet}は使えないのでしょうか?

<?php
$data = array(
"テスト"=> array(
"「{tweet}」ですね。",
),
);

56名無しさん:2010/02/11(木) 10:37:55
初めてbotを作り初めて知識も乏しく初歩的な質問で申し訳ないのですが、例えば30分に1回通常ポスト、5分に1回リプライしたい場合、通常ポスト用のものとリプライ用のbotの2種類を作らなければならないという事でしょうか?

57名無しさん:2010/02/11(木) 12:17:05
object(SimpleXMLElement)#10 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(19) "Incorrect signature"
}

実行したところこのようなエラーを吐きました。
どこがおかしいのでしょうか

58名無しさん:2010/02/11(木) 13:23:30
OAuth認証で手動投稿フォームみたいなものはつくれますか?

59名無しさん:2010/02/11(木) 13:53:11
>>51
いつも有難う御座います。
会話数の制限ですけど、出来れば指定した対象には*回まで、と設定出来ないものですかね?
自分でいろいろ試してみて出来はしたんですけど&hellip;
リプライパターンファイルをランダムにしている場合、カウントきちんと出来てないみたいで&hellip;
その辺まではphpよくわからなくてお手上げでしてor2

>>55
//文章の変換をする、のところの
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{year}",date("Y"),$text);
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{month}",date("n"),$text);
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{day}",date("j"),$text);
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{hour}",date("G"),$text);
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{minute}",date("i"),$text);
&nbsp; &nbsp; &nbsp; &nbsp; $text = str_replace("{second}",date("s"),$text);
以下に
//相手の発言を取得する
&nbsp; &nbsp; &nbsp; &nbsp; if(strpos($text, "{tweet}") !== FALSE){
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $tweet = preg_replace("@\.?\@[a-zA-Z0-9-_]+\s@u","",$reply->text); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $text = preg_replace("@{tweet}@u",$tweet,$text);
&nbsp; &nbsp; &nbsp; &nbsp; }
入れてみて、自分ではこれで動いてます

6043:2010/02/11(木) 14:30:48
>>51
ご指摘ありがとうございます。
アドバイス通り何回か繰り返しましたが、改善しませんでしたのでご報告します。
下記PHP対応サーバで使用しているのですが、問題ありますか?
http://land.to/newshiyou.php

OAuth認証は、phaさんページにて取得したアクセストークンです。
http://pha22.net/twitterbot/oauth/link.php

6143:2010/02/11(木) 14:35:53
>>60 の追記
ちなみにcronした時全てエラーが出るわけではなく、postしようとした時にエラーがでている感じです。
あくまで素人も目測なので、間違ってるかも知れませんが・・。

エラー内容
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>/home/httpd/leon/public_html/test/PEAR/HTTP/OAuth/Consumer.php:250</td></tr>
<tr><td align="center">1</td><td>HTTP_OAuth_Consumer->sendRequest('https://twitter.&hellip;', Array, 'POST')</td><td>/home/httpd/leon/public_html/test/EasyBotter.php:511</td></tr>
<tr><td align="center">2</td><td>EasyBotter->_setData('https://twitter.&hellip;', Array)</td><td>/home/httpd/leon/public_html/test/EasyBotter.php:522</td></tr>
<tr><td align="center">3</td><td>EasyBotter->setUpdate(Array)</td><td>/home/httpd/leon/public_html/test/EasyBotter.php:158</td></tr>
<tr><td align="center">4</td><td>EasyBotter->reply(2, 'data2.txt', 'reply_pat in /home/httpd/leon/public_html/test/PEAR/HTTP/OAuth/Consumer/Request.php on line 214

6243:2010/02/11(木) 14:39:29
>>61 の追記
たびたびすみません。
オートフォローは、動いているようですので報告します。

63名無しさん:2010/02/11(木) 14:43:25
reply_pattern.phpの後の方に記載されている、
"([^\s、。]+?)は好き?"=> array(
"$1おいしいです",
),
のリプライの「○○」部分には二文字しか反応しないのでしょうか?
ひらがなと漢字の4文字だと最後の漢字一文字。漢字3文字だと先頭の漢字がなくなって後ろに文字だけが出てきます。

64名無しさん:2010/02/11(木) 15:16:24
質問です。
五回に一回ランダムで実行ではなく、五回に一回実行するようにするのはどうしたらよいのでしょうか。
御教授お願います。

65pon:2010/02/11(木) 16:21:12
>>43の人と全く同じ状況なのでひとまずland.toから
moeplaというところに変えてみたのですが
そちらではこの様なエラーが出ました。
Fatal error: Call to undefined function hash_hmac() in /home/○○○/public_html/cgi-bin/twitterbot/test/PEAR/HTTP/OAuth/Signature/HMAC/SHA1.php on line 57

6618:2010/02/11(木) 16:35:43
ブラウザで見ると>>43さんと同じエラーであることがわかりました
とりあえず報告だけ

67名無しさん:2010/02/11(木) 16:41:28
>>64
2分毎にcronを実行してるなら、
0分、10分、20分、30分、40分、50分のときに実行するようにしたらいけますね
たとえば

if(date("i") % 10 === 0){
$response = $eb->postRandom("data.txt");
}

かな。これは「分の桁が10で割ったとき余りがでない、つまり10の倍数のとき」に実行するという意味です

68名無しさん:2010/02/11(木) 16:56:34
>>67
分かりやすい返答ありがとうございます。
早速試させていただきます。

69名無しさん:2010/02/11(木) 17:44:52
ロリポップでbot.phpを実行させると
Fatal error: Class 'HTTP_Request2' not found in /home/sites/lolipop.jp/users/boy.jp-xrex/web/tetsu_bot/EasyBotter.php on line 47
というエラーが出てしまいます。
PHP5にしているのですが、何か設定がおかしいのでしょうか?

70名無しさん:2010/02/11(木) 19:18:36
"[[END]]",を使っても、相手に[[END]]を返されてしまいます。
return;のような会話の終了方法はないのですか?
それと、多重リプライに反応しない方法、特定IDには反応語句以外には反応しないようにするのには
どうすればよいでしょうか?

7170:2010/02/11(木) 19:23:28
修正、特定IDの呟きにTL反応させないようにするにはどうすればよいでしょうか?

72名無しさん:2010/02/11(木) 19:39:54
エラーはでていないのですが、@で話しかけられたときに反応しません。
行の頭の//は削除してあります。
先に@で話しかけ2分後(cron実行間隔を2分に設定してあります。)にbot.phpにアクセスしても
”2分以内に受け取った@はないようです。”と表示されます。
申し訳ございませんが、ご教授おねがいします。

73名無しさん:2010/02/11(木) 23:27:49
>>22 >>25の者です。
二重ポストの件は、>>33のうらさんがおっしゃる通りif文を重複して設定していたので(アドバイスありがとうございました)
それを直したのですが、やはり1度に2つ投稿してしまうのは直りませんでした。
同じ方法でもう一つBOTを動かしているのですが、そっちは二重投稿はしませんでした。
仕方ないので二重投稿してしまうBOTの方は定期ポスト専用のbot.phpを作って定期的に動かすことで対処しています。

それと、「ABとACという文字列に反応させようとA[BC]と書いたら、ADという単語にも反応してしまう」の件は
*や?の記号は使っておらず、他のソースでは同じ正規表現の記述でちゃんと動作していました。
どうも[]の中が無視されている気がします。
A[BC]と書いても、Aだけあれば反応してしまうようです。
例えば、[噴吹]いた に反応させようとすると、全く関係のない「書いた」にも反応してしまっていました。

74名無しさん:2010/02/12(金) 00:26:26
いつもお世話になってます。
早速使わせて頂いているのですが、@を送るとリプライ返すと同時に通常文がpostされます。
また、深夜帯には休ませているため、呟けない時間(cron設定外)にも多重postしているようなのですが、これはどこの設定によるものでしょうか。
お手数ですがよろしくお願い致します。

75名無しさん:2010/02/12(金) 00:34:26
二重投稿とか言ってる人は、bot.phpでファイル指定してる部分をコピペした方がいいと思う
そうでないとファイル指定や記述方法が間違っているのか、
スクリプト・サーバー・CRONに問題があるのかわからないから

76名無しさん:2010/02/12(金) 02:06:39
>>73
正規表現の件は自分もたまにあるよ
該当する言葉しゃべってないのに、その反応しちゃったり
だから[]じゃなくて(|)でやってる

77うら:2010/02/12(金) 12:35:15
うむ、皆様。
v.2.0はまだベータでバグ出し中なので、
チャレンジャーな方以外はv.1.4を使うのが吉かと。

78うら:2010/02/12(金) 12:52:16
>>52
それは関数の初期値を設定しています。
もしreply()に値を渡さない場合に使われます。

>>56
単純に
if(date("i") % 30 === 0){
$response = $eb->postRotation("data.txt");
}
if(date("i") % 5 === 0){
$response = $eb->reply(5,"data.txt","reply_pattern.php");
}
と記述を。ただし、どちらも成立する場合、両方投稿します。

>>58
できますよ。うらはv.1.4のform.phpにOAuthを読み込んで関数を作成し、
Twitterのupdate.xmlに投げています。

79うら:2010/02/12(金) 13:05:43
>>74
reply処理の後、通常文処理が行われる設定ですね。
仕様です。
処理を分けたいなら、それぞれphpを作って、別に叩かないと。

あと、呟けない時間(cron設定外)に〜というのは、
cron等で叩いていないのにpostされているということですか?
基本、アクセスされれば処理されるので、何らかが叩いているということかと。
それか、処理全体を
 if(date("G") > 6 && date("G") < 23) { 〜 }
で囲って、深夜アクセスされても処理しないようにするとか。

80うら:2010/02/12(金) 13:25:40
>>58
というか、v.1.4のform.phpの20〜39行を下と入れ替えで。

<?php
if(isset($_POST["submit"])){
 require_once("EasyBotter.php");
 $eb = new EasyBotter();
 $message = $_POST["message"];
 $response = $eb->setUpdate($message);
 $eb->showResult($response);
}

もちろん各種設定はすんでbot.phpも正常動作してる状態でね。
テストしてないけどw、たぶん動くと思います。

81space:2010/02/12(金) 18:34:24
はじめまして、spaceと申します。

他アカウントからBotではないアカウントへのリプライにも、Botから他アカウントへのリプライにも、TL反応語があると、反応してリプライしてしまいます。この全リプライに対するTL反応語を回避するにはどうすればいいのでしょうか?

82space:2010/02/12(金) 18:36:14
連投すみません。
>81の補足。
Botアカウントへのリプライだけ正常にTL反応語を反応させたいのです。指南してくださる方よろしくお願い致します。

83space:2010/02/12(金) 20:49:13
またまた連投すみません焦

>82については気にしないでください。

そして追加で、
ある日だけに実行されるphpファイルや、定期ツイート用のファイルとかを作りたいとき、どうすれば上手く動作できるのでしょうか?

84名無しさん:2010/02/12(金) 21:16:55
質問です。
2.03betaにアップデートしたところ、TLの自分の発言にも反応するようになってしまい、
そのままreplyがループしてしまいます。
自分自身には@を飛ばさないように設定できませんでしょうか。
宜しくお願い致します

85名無しさん:2010/02/12(金) 21:49:36
ダウンロードしたファイルをIDとOAuthだけ触っていましたが>>61さんと同じようなエラーが出ます。

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>/home/httpd/********/public_html/********/PEAR/HTTP/OAuth/Consumer.php:250</td></tr>
<tr><td align="center">1</td><td>HTTP_OAuth_Consumer->sendRequest('https://twitter.&hellip;', Array, 'POST')</td><td>/home/httpd/*******/public_html/******/EasyBotter.php:511</td></tr>
<tr><td align="center">2</td><td>EasyBotter->_setData('https://twitter.&hellip;', Array)</td><td>/home/httpd/*****/public_html/*****/EasyBotter.php:522</td></tr>
<tr><td align="center">3</td><td>EasyBotter->setUpdate(Array)</td><td>/home/httpd/loabotyou/public_html/bottest/EasyBotter.php:98</td></tr>
<tr><td align="center">4</td><td>EasyBotter->pos in /home/httpd/******/public_html/******/PEAR/HTTP/OAuth/Consumer/Request.php on line 214

214を見ても何もなさそうだし…(いじっていませんし)なんなんでしょうか?
よろしくお願い致します。

86名無しさん:2010/02/13(土) 01:46:14
私も昨日こちらからダウンロードした2.03βバージョンでエラーが出ています。ほぼsetting.txtしか触っていない状態です。

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>/home/****/PEAR/HTTP/OAuth/Consumer.php:250</td></tr>
<tr><td align="center">1</td><td>HTTP_OAuth_Consumer->sendRequest('https://twitter.&hellip;', Array, 'POST')</td><td>/home/****/EasyBotter.php:511</td></tr>
<tr><td align="center">2</td><td>EasyBotter->_setData('https://twitter.&hellip;', Array)</td><td>/home/****/EasyBotter.php:522</td></tr>
<tr><td align="center">3</td><td>EasyBotter->setUpdate(Array)</td><td>/home/****/EasyBotter.php:98</td></tr>
<tr><td align="center">4</td><td>EasyBotter->postRandom('data.txt')</td><td>/hom in /home/****/PEAR/HTTP/OAuth/Consumer/Request.php on line 214

87名無しさん:2010/02/13(土) 01:48:36
上記setting.txtはsetting.phpの間違いでした、失礼しました。

88うら:2010/02/13(土) 08:47:26
「Fatal error: Uncaught」エラーが出ている方、
それは2.0から導入されたOAuth認証で、認証がうまくいっていないため発生します。

下のページを見て、もう一度確認を。
プログラミングができなくても作れるTwitter botの作り方 - setting.phpの編集
http://pha22.net/twitterbot/2.0/setting.php

あと、>>48でも書かれているこちらも。
・setting.phpに入れる4つの値が間違っていないかもう一度確かめる

89うら:2010/02/13(土) 08:56:07
>>84
setting.phpで、$screen_nameの値にBot名を入れてます?
EasyBotter.phpでは、これを元に自分の発言を除外していますので。

90うら:2010/02/13(土) 09:09:40
>>83
Botを動かす5つの処理、これに条件設定をつけてやります。

if ( 条件 ) {
 して欲しい処理
}

これで、条件を満たす時、処理が実行されます。
条件については、bot.php 43行目以降に色々書いてあります。
条件部分だけ抜き出し:
5回に1回ランダムに … rand(1,5) === 0
午前中だけ … date("G") < 12
2月14日だけ … date("n") == 2 && date("j") == 14

if の {} 内にまた if を入れ子にすることも出来ます。
また } の後に else を書いて、条件以外の時の処理を書くことも出来ます。
これを機会にphpの勉強をおすすめ。

91space:2010/02/13(土) 10:30:27

>>90

うらさん、ご回答ありがとうございます!!

>>84について自分の名前の大文字小文字もきっちり判定されるんでしょうか?

bot.phpで全ての動作の処理が行われるのですね!!

ほぼ初めてPHPに触れたもので、どこに手をつけていいか
少し迷っていたので助かりました!!

これを機会にPHPの勉強をしたいと思います!!

ありがとうございました!!

92space:2010/02/13(土) 10:57:09

連投すみません。

>>84について、>>91横入り質問してしまってすみませんm(_ _)m

是非この質問も回答頂けたらありがたいです。

93名無しさん:2010/02/13(土) 11:20:22
>>88
何度確かめてもダメでした
1.4では正常にポストしているキーをそのままつかってもFatal error: Uncaughtが出ます

94うら:2010/02/13(土) 12:38:55
>>91
> 自分の名前の大文字小文字もきっちり判定されるんでしょうか?
そうですね。
Hoehoe と hoehoe は、違うと判定されます。

> bot.phpで全ての動作の処理が行われるのですね!!
処理は、 EasyBotter.php に集約、
設定は、 setting.php に、
動作設定は、 bot.php に入っています。
で、 bot.php に「こういう時こう処理する」という流れだけ記述。
bot.php を叩いた時に、他のファイルを読み込んで処理を行います。
さわるのは setting.php と bot.php だけ。
初心者向きの親切設計ですね。

95space:2010/02/13(土) 14:56:57
うらさん、2回もご回答ありがとうございました!

お蔭さまでボットの自アカウントへのTL反応語リプライがなくなり、TL反応語とリプライ専用語に別けることができました。

しかし、他1アカウントから他2アカウントへのリプライの中にあるTL反応語に反応して、自アカウントから他1アカウントへリプライしてしまう現象が未だに治りません…。防ぐにはどうすればいいのでしょうか・・・?教えていただけたら幸いです。

何回も質問してしまってすみません><

96名無しさん:2010/02/13(土) 15:51:03
>>95
どうしてこのスレ内だけでも全部見てみようと思わないのかな&hellip;
たった95レスなのだから読んで探してみようね

97space:2010/02/13(土) 16:01:47
>>96さんその他さんすみませんでした!!><

質問してからスレッドの古いほうへ行くボタンを発見して
同じ内容に対する回答が>>47にありました。

みなさん、ありがとうございました!!

9843:2010/02/13(土) 16:42:13
以前エラーがでると言った者です。
サーバを変更したら動作しましたので、報告します。

ご迷惑おかけしました。

99名無しさん:2010/02/13(土) 16:46:01
THA BLUE HERB Bot (tbh_bot) on Twitter
https://twitter.com/tbh_bot

10076:2010/02/13(土) 17:24:27
いろいろやってわかったけど"でき[るた]"等が正しく動かないのはメタ文字u入れてないからですね
日本語を比較してるところは全部@uにした方がよさそうです
"@".$pattern."@"&rArr;"@".$pattern."@u"
これで正規表現きちんと使えるようになりました




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