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

TwitterBotPHP質問スレ

220名無しさん:2010/02/12(金) 18:17:38
>>218
@で話しかけてみて直接bot.phpにアクセスした時はどう?
cronでアクセスしないで。それで反応ある?
ないならreply_pattern.phpで記述ミスだと思う
反応あってcronでアクセスする時だけダメなら自分にはわからん
それはcronの問題だよ

221名無しさん:2010/02/12(金) 18:43:47
>>219>>218
@で話しかけて直接bot.phpにアクセスしたらリプライ返ってきました

さくらは5分ごとは駄目ということですが
定期POSTは5分ごとに返ってきています
定期はできてリプライはできないというのはどういう仕組みなんでしょうか?

222名無しさん:2010/02/12(金) 19:08:08
>>221です
そのままにしていたらなぜか今リプライ返ってきました
どうしてなのかわからないままですがしばらく様子見てみます

223名無しさん:2010/02/12(金) 19:54:56
最新版をDLして使わせていただいています。

通常POSTを30分ごとに、リプライは2分ごとにと設定する場合は
bot.phpのどの部分を改変すればよいでしょうか?
>>217さんの記述を探してみましたが見当たりません。
最新版ではそういった設定は不可能なのでしょうか?

224名無しさん:2010/02/12(金) 21:14:40
>>223さん
私は
38行目辺りの
//@で話しかけられたときにリプライしたい
$response = $eb->reply(2, "data.txt", "reply_pattern.php");
と、62行目から65行目あたりにある
//bot.phpを実行したときに、0分、15分、30分、45分だったら実行される
if(date("i") % 15 === 0){
$response = $eb->postRandom("data.txt");
}
を//を消したりして使っています。
if(date("i") % 15 === 0){
の15の部分は私は10分置きにしているので「10」に変更していますが。

225名無しさん:2010/02/13(土) 00:01:08
質問です。
こちらのEasyBotterを利用して
・夜の間は寝るようにして呟きをしないようにする
・寝る前におやすみと言う
・寝ている間のリプライは通常リプライと異なるものにする
にはどうしたらいいでしょうか?

226名無しさん:2010/02/13(土) 00:44:17
こちらのPHPをダウンロードしてbotを動かしています。初心者ながらも調べたり試行錯誤を繰り返しまして、無事に設置されて今は順調に安定して動いています。
毎時0分と30分にランダムpost。リプライへの反応は5分間隔の自動botです。
新しい返答を用意したいと思い格闘していたのですが、行き詰って途方にくれてしまいましたので、この場をお借りさせて下さい。

たとえは「おみくじ」に対して予め用意した幾つかの中からランダムで選んでリプライする…という設定は出来ているのですが

//おみくじ
"おみくじ"=> array(
"大吉",
"中吉",
"小吉",
),

こういう感じで記述してちゃんと動いています。

たとえば、「握手」という言葉に反応させたくても、
・握手して
という場合と、
・握手
という場合と、
「握手して」の場合は「相手から握手を求めている」ですし、「握手」だと「相手から握手をしてきている」という風に、意味が違いますので、それぞれ別の反応をさせたいのです。

現在、
//
"握手して"=> array(
"はい、握手",
),

//
"握手"=> array(
"ありがとう",
),

…という風に記述しているのですが、どうもこうすると、「握手して」と投稿しても、botの反応が下の「握手」の方の反応になってしまい、「して」の記述での返答を無視してしまいます。

こういう場合、どのように記述するとそれぞれに対応してくれるのでしょうか。上記の「握手」を例で構いませんので、教えていただけないでしょうか。お願い致します

227名無しさん:2010/02/13(土) 00:46:02
上記226の者です。
申し訳ありません、5行目からの
【たとえは「おみくじ」に対して予め用意した幾つかの中からランダムで選んでリプライする…という設定は出来ているのですが
//おみくじ
"おみくじ"=> array(
"大吉",
"中吉",
"小吉",
),
こういう感じで記述してちゃんと動いています。


という部分を削り忘れたまま投稿してしまい、変な文章になってしまっています。上記部分を飛ばして、その続きの「たとえば〜」からお読み下さい。申し訳ありません

228名無しさん:2010/02/13(土) 00:56:47
>>225
うちの子はこんな感じ
cron,replyは2分で post30分単位,毎時0分には時報post
0時におやすみpostして8時からpost再開

if(date("G") > 8){
//定期post
if(date("i") % 30 === 0){
//時報post
if(date("i") < 10){
$response = $eb->postRandom("post_jiho.php");
//通常post
}else{
$response = $eb->postRandom("post_random.txt");
}
}
//タイムラインの単語に反応してリプライしたい
$response = $eb->replyTimeline(2,"tl_pattern.php");
//@で話しかけられたときにリプライしたい(起床中)
$response = $eb->reply(2,"reply.txt","reply_pattern.php");
}else{
//@で話しかけられたときにリプライしたい(おやすみ中)
$response = $eb->reply(2,"reply_xxx.txt","reply_pattern_xxx.php");
}

//0時報post
if(date("i") % 30 === 0){
if(date("i") < 10 && date("G") == 0){
$response = $eb->postRandom("post_jiho.php");
}
}

229名無しさん:2010/02/13(土) 02:03:04
はじめまして。
こちらのPHPをお借りして、初めてbotを作っているのですが、
どうしてもわからないことがありましたので、質問いたします…!

botに対して@を送ったときに、

bot @n 〇〇◯〜。
bot ■■■!
bot ▽▽▽〜

…というように、リプライの下に通常のつぶやきが同時に投稿されてしまいます。
これを、リプライのみにするには、どうしたらいいでしょうか?
ちなみに、色々試行錯誤してしまったので、
ボットジェネレーターで時間指定のつぶやきを、
10分毎につぶやかせるために、GAEを…と、ごちゃごちゃさせています…

意味不明なことを言っていたらすみませんが、よろしくお願いします…!

230名無しさん:2010/02/13(土) 11:00:27
>>228
レスありがとうございます
そのままコピペさせていただいたのですが上手く動作しません

時報なしで23時におやすみpostしたいんですが
その場合以下で合ってますか?

if(date("G") > 8){
//定期post
if(date("i") % 30 === 0){
//通常post
}else{
$response = $eb->postRandom("post_random.txt");
}
}
//タイムラインの単語に反応してリプライしたい
$response = $eb->replyTimeline(2,"tl_pattern.php");
//@で話しかけられたときにリプライしたい(起床中)
$response = $eb->reply(2,"reply.txt","reply_pattern.php");
}else{
//@で話しかけられたときにリプライしたい(おやすみ中)
$response = $eb->reply(2,"reply_xxx.txt","reply_pattern_xxx.php");
}

//23時報post
if(date("i") % 30 === 23){
if(date("i") < 10 && date("G") == 23){
$response = $eb->postRandom("post_jiho.php");
}
}

これをbot.phpの

//=============================
//botの動作をここに書いてください
//先頭に//がある行はコメント扱いなので実行しません。実行したい行の頭の//を削除してください。
//=============================

の下にそのまま置いたんですが
うまく動作せず困っています。
間違っている箇所がありましたら指摘くださると幸いです。
またpost_jiho.phpの中身はどのように記述したらよいでしょうか?
合わせてご指南いただけたら助かります。

231名無しさん:2010/02/13(土) 12:02:01
TL上の言葉を拾って反応するようにしたいのですが
他の人宛のツイートには反応しないようにするにはどう記述したらいいですか?
(@なしの呟きと、bot宛ての@のみ反応させたいです)
今はTLの言葉を拾うようにしていますが、それだと他人宛のありがとう等にも
どういたしまして、と答えてしまい困っています。

232名無しさん:2010/02/13(土) 12:11:40
>>230
んーと&hellip;if(date("i") % 30 === 0){}の0は0時の0じゃないんで23にしちゃだめですw
bot.phpの説明をよく読みました??
if(date("i") % 30 === 0){}っていうのは30分単位。30で割れる分数。
つまり0分(60分)と30分にこの動作をするってこと。30が15なら15,30,45,60分
そしてif(date("G") > 8){}っていうのは時刻が8より大きい時のみ作動するってこと。
date("G")は簡単に言えば時間を表します。iなら分数。
だからこの場合、if(date("G") > 8){}の中身は9時より動き出す。。

else{}っていうのは、その条件に合わないときってこと。
たとえば
if(date("G") > 8){
echo "9〜23時だよ";
}else if(date("G") == 0){
echo "0時だよ";
}else{
echo "1〜8時だよ";
}
とあるとすると&hellip;これを10時にアクセスしたとしよう。返ってくるのは「9〜23時だよ」
0時にアクセスしたら「0時だよ」 3時にアクセスしたら「1〜8時だよ」
もう一度考えてみて。
ただし>>230の場合おやすみ時報は23時にさせたいみたいだから、私がやってる通り(>>228)じゃうまくいかないです。23は0と違って8より大きいからね。
if(date("G") > 8){}の中にpost,replyを混ぜるんじゃなくて
postはpost、replyはreplyで時間設定したほうがいいかな。

あと半角スペースやTABキーで段差つけてわかりやすいようにするといいかも。
if(date("G") > 8 && date("G") != 23){
&nbsp; &nbsp; &nbsp;echo "9〜22時だよ";
}else if(date("G") == 23){
&nbsp; &nbsp; &nbsp;echo "23時だよ";
}else{
&nbsp; &nbsp; &nbsp;echo "0〜8時だよ";
}

233名無しさん:2010/02/13(土) 12:20:43
>>231
2.0スレの>>47見て

234196:2010/02/13(土) 12:59:15
>>197
大変遅くなりましたが…ありがとうございます!ためしにやってみます。

235名無しさん:2010/02/13(土) 16:44:26
>>233
ありがとうございます!多分うまくいったと思います!

236名無しさん:2010/02/13(土) 17:46:00
質問です。
オートフォローしたのと同時に、相手へpostしたいのですが、
可能でしょうか?

237名無しさん:2010/02/13(土) 19:05:59
素朴な疑問なんですが
>>228さんのように
$response = $eb->reply(5,"reply.txt","reply_pattern.php")

reply.txtとreply_pattern.phpの両方を設定するのはなぜですか?
ファイルの中身はどう違うのでしょうか?
phpファイルだけでもリプライはできますよね?

238名無しさん:2010/02/14(日) 01:47:09
バージョン1.42をつかっています。
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in /home/sites/lolipop.jp/users/***/web/***/reply_random.php on line 174
というのはどういうことでしょうか?
reply_random.phpの174行目だと、触らないで下さい、という部分なので本当はこういうエラーが出ないと思うのが

239名無しさん:2010/02/14(日) 03:17:31
reply_patter.phpで記述ミスじゃない?()閉めてないって

240238:2010/02/14(日) 04:05:07
238です、初心者なので、サイトの通りに"***",の言葉を作る部分だけしか触れていません。
状態としましては、上記の文章を2回繰り返した後、

Twitterへの投稿に成功しました。
@***に投稿したメッセージ:@*** ),

と出るのですが、
"***"=> array("A","B","C",),に該当するものではなく、閉めにあたる ), をリプライしています。

241名無しさん:2010/02/14(日) 14:28:24
>>240
初心者ですみませんが、 ),を離してみては?

それで駄目なら、下に余分な)があったりしませんか??

242名無しさん:2010/02/14(日) 14:39:28
>>240
以前私も同じところで困っていたのですが、どうやらサーバーとの相性があるみたいです。@PAGESだと動かないのかもしれません。
根本的な解決にはなってませんが、一度別のレンタルサーバーで試してみてはどうでしょう。

243名無しさん:2010/02/14(日) 17:49:34
最新版を使わせていただいて、設置・動作まではうまく行ったのですが
もう少し手の込んだ事をしたいので知恵をお貸し下さい

時間によって挨拶に対して返す言葉を変えたいのですが
(午前3時のおはようには早起き、午前10時のおはようには寝坊など)
2時間ごとなどかなり小刻みに反応を変えていきたいと思っています

bot.phpの中でif(date("G") < 3)などを使って時間指定していくと
対応するreply_pattern.phpの数も増やしていかない上に
時間によって変えたくない反応の部分はそれぞれのファイルに増やさないといけないので
色々と煩雑になってしまう気がします

なにかスマートなやり方はないでしょうか

244名無しさん:2010/02/14(日) 18:56:27
よくある質問中に「原因調査中」と記載されている多重リプライですが、
最近酷くて、1つのリプライに対し3,4Tweetしています。
自分で調べようにもプログラムの知識はほぼ皆無なので手のつけようがありません。
何かしら原因に目処がついているならそれだけでも教えていただければと思います。
(風柳さん製作のGAE Cronで動かしています。)

245名無しさん:2010/02/14(日) 19:42:01
初心者です、調べてみてもどうしてもわからないので質問させて下さい、すみません;
2.03betaに変えて、ランダムにポストする機能やタイムラインへの反応は上手くいくのですが
botにリプライを送ってみると次のようなエラーが何行も出ます
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in ...

reply_patternをサンプルのまま使っても反応しないのですが、
何が原因なのでしょうか・・・

246名無しさん:2010/02/15(月) 11:14:51
>>244
途中からなったのであればreply_randomのファイル名を変えてみてはどうでしょう

247名無しさん:2010/02/15(月) 14:25:05
>>244
自分もそれなったけど一度cron消して鯖ファイルも消して
やり直したら直った

>>243
//リプライの文章をつくる
あたり弄れば挨拶系のみ変えることも出来るよ

248243:2010/02/15(月) 16:57:10
>>247
ありがとうございます!色々格闘してみます!

249名無しさん:2010/02/16(火) 06:59:41
\PEAR\HTTP\OAuth\Consumer\Request.php on line 214

bot.phpにブラウザでアクセスすると上記の部分で止まります (OAuth認証済み)
anhttpd1.42p+PHP5.0.4

250名無しさん:2010/02/16(火) 07:31:55
まったくの素人ですみません。
「Twitterへのpostに成功しました。」と表示出て、ツイッターでちゃんとしゃべるようにはできました。

その後cronの設定するところなのですが、
wadaxサーバー使用してまして、cron使用可能なんですが
「cronでPHPを実行する場合、以下のようにPHPのパスを記入する必要が御座います。
(例)* * * * * /usr/local/bin/php /home/FTPアカウント/public_html/●●●.php 」

というのが意味わかりません。パスってどこの何をさしてるのか教えてください。
素人な質問すぎてお話にならないようでしたらスルーしてくださって結構です。
よろしくお願いします。

251名無しさん:2010/02/16(火) 11:47:15
>>250
それはそのサーバーのサポートに聞くか
HP製作系のスレで聞いておいで
phpのことじゃないから

252250:2010/02/16(火) 13:25:17
了解です!
どこに書くかわかりました!
ありがとうございます!
まだ手動でしか動かないけどがんばります!

253名無しさん:2010/02/17(水) 18:58:08
こんにちは
まったくのPHP初心者でしたが、こちらのバージョン2.0beta、バージョン1.42を使ってbotを作成することができました
少しずつですが構文も解るようになってきて楽しいです

ところでbotに追加したい機能がありまして、例えば「今日誕生日の人は?」という問いかけに対し、
あらかじめ用意したテキストの中からその日の日付に従った答えを呼び出す事はできるでしょうか?

過去ログの中に「その日の天気を外部から呼び出す事ができる」などの情報があったので、
手を加えれば「日付に紐付けて指定の文章を呼び出せる」という事は分かりました
ただそこにリンクされていた解説は私には難しく、
それをアレンジして「同一の質問を受けて、日付でセリフを変える」ようにはできませんでした

バージョン2.0beta、バージョン1.42、どちらでも構いませんので、どこにどう手を加えればいいのか、教えてくだされば嬉しいです
(初心者むけのスレに行くべきだったかもしれません、その際はすみません)

254名無しさん:2010/02/18(木) 02:41:33
>>253
「今日誕生日の人は?」程度なら簡単にできるよ
簡単なのは365日分のリプライ用ファイルを用意、2月14日なら0214.txtというファイル名にしておく
「今日の誕生日の人は?」という単語が含まれていた場合、その日の月日を取得する
リプライパターンは月日.txt(0214.txtなど)を読み込むという風にすれば良い

255名無しさん:2010/02/18(木) 11:36:58
始めまして、ついさっきTwitterBotのことを知り、色々と探っているところです。
試験的にローカルで動作しているWinXP+Apache+PHPでTwitterBotを利用しようとしたのですが。
手動投稿用フォームを利用しても、IDとパスをチェックしてくださいのエラーが発生しています。
利用しているバージョンは1.42です。
Apache、PHPはデフォルトインストールしているだけで特に設定は変えていません。
PHPは<?php phpinfo(); ?>のページが表示されているのでとりあえずは動作していると思っているのですが。

唯一設定変更したのはphp.iniでdefault_charset = "UTF-8"と変更したぐらいです。
アクセスしているURLは http://127.0.0.1/twitter_bot/easybotter/form.php なのですが。
127.0.0.1のような逆引きが出来ないところからはPOSTを受け付けないとかになっているのでしょうか。
何か確認事項がありましたら、教えていただけないでしょうか。

256うら:2010/02/18(木) 12:26:28
>>255
基本的にWebにアクセスできる環境なら投稿できるはずですよ。
というか、URLにずらずらくっつけてAPIに投げても投稿できます。

投稿失敗の可能性としては、ID、Passの打ち間違いですけど。
大文字小文字あってますよね?
form.phpから呼ばれるServicesフォルダ以下のファイル関連だと
エラーメッセージが違ってくるでしょうし。

257名無しさん:2010/02/18(木) 12:51:48
easyPHPでも初期のままだとエラー出る
PHPで何か解放しないとだめなのかな

258名無しさん:2010/02/18(木) 13:41:09
>>256
ご返答ありがとうございます。
こちらもIDパスの間違いが濃厚か?と思っていましたのでテキストにパスワードも打ってみて間違っていないかどうかをチェックしました。
結果、IDパスは問題ないので残るとするならば、こちらのネットワーク環境ではないか?と思って考えてみたところ。
お恥ずかしい話、今試験的に利用しているPCでは外部へのアクセスが出来ず、外部へHTTPアクセス(80)する場合は
内部に設置したProxyを経由しないとダメっていう設定になっていました。
これだと・・・POSTを受け取ったローカルPCが外部にあるTwitterへPOSTするなんて無理ですよね。
イメージとしてはこんな動作をしているんですよね?

1.Client側がform.phpを利用して127.0.0.1にIDとPass、投稿内容をPOST
2.ClientからPOSTされたデータを127.0.0.1がTwitter鯖へ必要な手続きを踏み、POSTする
3.Twitter鯖へPOSTし、結果の有無によってform.phpの表示を切り替える(成功or失敗)

「1」までは孤立したローカルエリアでも可能ですが、外部へPOSTする際にF/Wでブロックしていると元も子もないですよね。
大変失礼しました。
もっと考えて質問するべきでした。

259名無しさん:2010/02/22(月) 04:40:17
reply_pattern.phpを編集していたら可笑しくなったので質問させて戴きます。
),
//
"食べ(ません|ない)"=> array(
"○○",
),
//
"食べ(る|ちゃう)"=> array(
"△△",
といった感じで、肯定と否定で返す言葉を変えたいのですが、
同じ文字(食べ)が入っていると、バグって(?)
reply_randomの$fileで指定されている文章を返すようになりました。
更にこの2つの文章を消して元通りにしたはずなのに、他の設定した文章までもが
reply_randomの$fileで指定されている文章を返します。
(元々入っている"おはよ"を打ってもreply_randomの$fileの文章を返してきます)
このようなことは何故起こったのでしょうか?解決するにはどうしたら良いのでしょうか?
教えて下さると、嬉しいです。(verは1.42です)

260名無しさん:2010/02/22(月) 05:06:58
>>259
記述ミスじゃないかなあ
),で閉じるの忘れてるとか&hellip;まるまる貼ってくれればわかるのだけど
PHPエディタでチェックしてみるのもいいよ

261259:2010/02/23(火) 00:42:02
回答ありがとうございました。
1括りずつ追加・更新をして行ったら、何故か指定した通りに返すようになりました。
PHPエディタでチェックしてみても間違っているところはありませんでしたし、
本当に何が原因か分かりませんが、引き続きbot作成を頑張ろうと思います。

262名無しさん:2010/02/25(木) 20:40:38
キャラクタbotを作ろうと色々試しているのですが、投稿がvia Easybotterとなっている部分を改変するには、どのファイルのどこを改変する必要があるのでしょうか。

263あずき:2010/02/25(木) 20:55:51
>>262
http://twitter.com/oauth_clients
こちらからどうぞ

264262:2010/02/26(金) 06:40:48
>>263
こちらのアドレスからアプリケーションを登録する、という事で良いのでしょうか。
ですがEasybotterと動作は同じで名称だけ変えるのですから、他は設定を同じにする必要がありますよね?
ApplicationType以下の設定はどうすればいいのでしょうか。
また、この登録が終わったら、あとはEasybotterの認証キー取得と同じ方法で、キーを取得すればいいのでしょうか。もしくは、そのまま使えるのでしょうか。
重ね重ね質問してすみません。

265名無しさん:2010/02/26(金) 07:22:05
>>264
散々既出の質問です。過去ログに目を通して下さい

http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1265625817/

あと、矢継ぎ早に問いただすより先にすることは無いのでしょうか…
あなたは自分がこのような言われ方して答えたい気持になりますか?
私はあんまり答えたいと思いません

266名無しさん:2010/02/26(金) 11:32:36
>>264
聞く前にまず試す、試して駄目だったら質問する
問題解決する努力しなよ

267262:2010/02/26(金) 16:41:47
失礼しました、既出質問だという前に公式の方からのリンクでOAuthに関してのページがありまして、そちらを見落としていました。
そちらの方を参考に、問題を解決する事ができました。不快な気分にさせてしまったようですみませんでした。
自身の見落としで深く反省しております。
botの方が落ち着いたら、こういう真似をせずに済むよう、スレで出た質問についてまとめでも作ろうと思います。すみませんでした。

268名無しさん:2010/02/28(日) 17:33:28
はじめまして。
PHP未経験者なのですが、easybot2を使って作っていくうちに色々と欲が出てきてしまい、他の方の書き込みやPHPについて調べながら手を加えていっています。
そこで自分では解決できない疑問が出てきましたので、もし宜しければお力をお貸し頂けないでしょうか。
初歩的な質問だとは思いますが、ヒントだけでも頂ければ嬉しいです。

【バージョン】 EasyBotter2.03beta
【設置鯖名】 @pages
【PHPのバージョン】 5.2.6
【実行】 GAE-Cron
【不明点など】 以下に記載


▼条件別に複数ファイルの読み込み

時間ごとに別の発言をさせたいと思い、他の方の書き込みを参考に複数のtxtファイルを作りifの条件で読み込むファイルを変えました。

=============================
$g = date("G");

if(rand(0,20) === 0 and 7 < $g && $g < 11){
$response = $eb->postRandom("gozen.txt");
}
elseif(rand(0,20) === 0 and 11 < $g && $g < 13){
$response = $eb->postRandom("lunch.txt");
}
elseif(rand(0,20) === 0 and 13 < $g && $g < 18){
$response = $eb->postRandom("gogo.txt");
}
elseif(rand(0,20) === 0 and 18 < $g && $g < 21){
$response = $eb->postRandom("dinner.txt");
}
elseif(rand(0,20) === 0 and 21 < $g || $g <= 2){
$response = $eb->postRandom("night.txt");
=============================

これでもうまく動いてはくれているのですが、例えば全部の時間で使いたいテキストを追加する時、各txtファイル全てに書き加えないといけないのが非常に面倒だと思い、ベーシックな発言をするdata.txtと、時間ごとの発言のみのnight.txtに分けて両方を読み込みたいと考えました。
で、リプライの方を真似て("data.txt","night.txt")としてみたり、色々調べたりしたのですが上手くいきませんでした。

例えばひとつの条件に対して、「night.txtもしくはdata.txtをランダムに選んで読み込む」というような事は出来ないでしょうか?



また、
$response = $eb->reply(4,"data_reply.txt","reply_pattern.php");
このリプライの部分に関しても同じように時間ごとに分けたいと考えておりますが、同じように複数ファイルからランダムにすることは出来ますでしょうか。

宜しくお願い致します。

269名無しさん:2010/02/28(日) 18:50:09
>>268
時間ごとの発言も、
ベーシックな発言もcronでアクセスした時1/20の確率で発言させたいんですよね?
if(rand(0,20)===0){}でまず全てを囲って
その中にベーシックな発言と、時間ごとの発言を書けばいいのでは?
rand(0,1)で0か1の数字をたたき出す様にして、
結果が0ならベーシックの発言。1なら時間ごとの発言。
と条件付けて書いてやればランダムでベーシックか時間ごとを発言するでしょう。

後者も同様に、もし5パターンのファイルがあるならrand(0,4)で0〜4の数字をランダムで出力させて
0ならreply_pattern0.phpを、1ならreply_pattern1.phpを(略)使うように書けばいいのでは?

270268:2010/03/01(月) 00:38:27
>>269
回答有難うございます。
教えて頂いた方法で無事思い通りの動きをしてくれました!

20回に1回発言するifの中に、時間分岐のifを入れ、さらにその中に0か1かで読み込むファイルを分けました。
なるほど、ifの中にifが入れれるんですね・・・
初歩的な事だったようでお手数お掛けしました。

うまく動いてくれて嬉しいです、有難うございました!

271268:2010/03/01(月) 22:52:47
度々すみません。268です。
ご回答頂いた内容を試していて一つ新しい疑問が生まれました。

時間ごとに発言の内容を変える方法として、ランダムに2つのファイルから1つを選びその中に記載されている内容を発言する、という方法を教えて頂きました。

その方法で定期ポストの場合は上手くいったのですが、reply_pattern.php、reply_tl_pattern.phpを使ったリプライの場合おかしな事になってしまいます。

例えばreply_pattern1.php、reply_pattern2.phpからランダムに選んでリプライする場合reply_pattern1.phpに「おはよう」に対する返事を書いていた場合は、2回に1回しか「おはよう」に返事をしてくれなくなってしまいます。

そこで、2つのファイルからランダムに1つを選んで、という方法ではなく、2つのファイルを両方同時に読み込む みたいな事は出来ないでしょうか?

ご回答いただけると嬉しいです。
宜しくお願い致します。

272名無しさん:2010/03/01(月) 23:00:05
>>271
ランダム分岐させず、並列して実行させればいいんじゃないの?

273名無しさん:2010/03/02(火) 00:21:12
>>271
reply_patternA.phpに反応単語が無かった場合、reply_patternB.phpに移行・チェックさせたいってことですね?

bot.phpで設定した"パターン反応を書き込んだファイル名"に反応単語が無かった場合
Easybotter.phpの&darr;のifで"データを書き込んだファイル名"からランダムに選んで返信します
//パターンになかった場合はランダムに

だからこのif内の1行を消して別のpattern.phpをチェックさせるように書くか
ifの前に別のpattern.phpをチェックさせるように書くか

274268:2010/03/03(水) 00:06:34
>>272
>>273
ご回答有難う御座います。

>>272
並列に並べてみたところ希望通りの結果が得られました。的確なご指摘有難う御座います。

>>273
EasyBotter.phpのご指摘の箇所を見てみましたが、PHP初心者の私には高度すぎたようで教えていただいた方法を再現することが出来ませんでした。
245行目
$status = $this->makeTweet($replyFile);
あたりをいじる必要があるのでしょうか?
初心者丸出しでお恥ずかしいですが、$replyFileの部分を$replyFile = "reply_pattern.php"等と変えてみたりしましたが駄目でした。
度々すみませんが宜しくお願いいたします。

275うら:2010/03/03(水) 12:21:37
>>274
php初心者を自認している方が、EasyBotter.phpの改造をするのは危険です。
(自分や自分のBOTだけじゃなく、他のユーザ、Twitterやレンタルサーバに被害が及ぶこともあります)
php関連のサイトを見るなり、書籍をあたるなり、多少熟達してから改造をお願いします。

まず動くところから始めましょうよ。

276274:2010/03/03(水) 23:00:33
>>275
そうですね、まずはbot.phpを弄って出来る範囲で色々挑戦してみます。
ご返信ありがとうございます!

277名無しさん:2010/03/04(木) 11:01:50
すいません、質問させて下さい。
>>197のリンク先にあるオウム返しスプリクトは、EasyBotter2.0以降では使えないのでしょうか?

278うら:2010/03/04(木) 12:22:53
>>277
reply_pattern.php 内の
//「◯◯は好き?」〜
のあたりはそれに該当するのではないでしょうか?

279名無しさん:2010/03/05(金) 17:46:13
初心者です。
初歩的な質問ですが、Servicesフォルダ内も全てサーバーにUPするのでしょうか・・・?
凄く初歩的な質問で本当に申し訳ないです。
宜しくお願いします。

280名無しさん:2010/03/05(金) 17:47:17
>>279

全てです

281名無しさん:2010/03/05(金) 18:03:17
>>280さん
無事動きました!
お早いレスありがとうございました。
助かりました。

282名無しさん:2010/03/05(金) 21:06:36
既出でしたら申し訳ありません。
reply_pattern.phpで{id}や{name}などを使おうと思っているのですが、
"テスト、{id}"と表示されるように入力すると、
実際に投稿された時に「テスト、ID??????」と投稿されてしまいます。
どう対処すればよいでしょうか?

283名無しさん:2010/03/06(土) 00:48:05
>>282

もう少し状況を教えてください
それと文字コードは問題有りませんか?

284282:2010/03/06(土) 03:13:36
>>283
失礼しました。
reply_pattern.phpに、
//「テスト」
"テスト"=> array(
"テスト、{id}",
),
と入力して、bot宛てにリプライを送ると、
botからリプライは返ってくるのですが、
@ID テスト、ID??????
というリプライが返ってくるのです。
手動でbot.php叩いてみてもエラーは出ていないですし、
[id}が入っていなければ??????は入らず、普通に動作します。
{id}だけでなく、時間を置き換えるものでも同様の現象が起きました。
(時間に関しては、先頭に「$time = date("g:iA");」を置いて表示させたい文章に$timeを書く事で解決しました)
エディタはTeraPadを使用しているので、bot.php、EasyBotter.php、reply_pattern.phpやその他のパターンファイルの文字コードはUTF-8Nにしてありあります。
使用しているサーバーは@PAGES、cronはGAEです。

285名無しさん:2010/03/06(土) 03:17:05
Easybotter.phpでパターン修飾子uは追加した?

286228:2010/03/06(土) 03:31:53
>>285
Easybotter.phpは2.04betaを使用していますが、
リプライパターンを照合する部分にはパターン修飾子uは追加されています。

idを変換する部分の場所は

//リプライの場合は相手のid、そうでなければfollowしているidからランダム
if(strpos($text,"{id}") !== FALSE){
if(!empty($reply)){
$text = str_replace("{id}",$reply->user->screen_name,$text);
}else{
$randomTweet = $this->getRandomTweet();
$text = str_replace("{id}",$randomTweet->user->screen_name,$text);
}
}

この部分だとわかるのですが、この部分に関しては全く手を加えていません。

287名無しさん:2010/03/06(土) 04:07:30
>>286

そのif文はパッと見で問題ないように見えますが時間の置き換えも
同様の症状が見えるとのことなので根本的な問題とも捉えられます

とりあえずそのif文内のstr_replaceの前後で変数がどうなっている
か等ダンプするなりして確認してみて下さい。
ここに原因があるわけではないですがまずはここからということで。

288287:2010/03/06(土) 04:08:47
訂正

ここに原因があるわけではないですがまずはここからということで。

ここに原因があるかどうかはわからないですがまずはここからということで。

289名無しさん:2010/03/18(木) 02:56:55
すみません、お力をお貸し下さい。
EasyBotter2.0を利用しております。
@付きリプで時間を6〜12時、1時〜18時、19時〜0時、1時〜5時で設定したい時に

if(date("G") > 5 && date("G") < 13){
$response = $eb->reply(3,"reply_pattern.php");
} else if(date("G") > 12 && date("G") < 19){
$response = $eb->reply(3,"reply_pattern_02.php");
} else if(date("G") > 18 || date("G") < 0){
$response = $eb->reply(3,"reply_pattern_03.php");
} else {
$response = $eb->reply(3,"reply_pattern_04.php");
}

としてみたのですが、どうやらreply_pattern.phpしか動いていないようです。
構文がおかしいのか、それともbot.php以外に変更するところがあるのか、ご指摘いただけたら幸いです。

290名無しさん:2010/03/18(木) 04:51:01
>>289
情報不足なので確実なアドバイスができません
初心者さんのようですから、初心者スレの324を読んでまずはPHPの基本を勉強しましょう
} else if(date("G") > 18 || date("G") < 0){ ←この行とかおかしいですよ

291289:2010/03/18(木) 06:24:10
>>290
すいません、スレ違いでございました。
もう一度勉強して参ります。

292y:2010/04/02(金) 03:08:03

いま日本の最高権力者は薩◆長◆連◆合(鹿児島県、山口県)の田舎侍たちと閨 閥(けいばつ)です。

■日本はいまだに武家社会です ■

・坂本龍馬は日本をいまも破壊しているテロリスト薩◆長◆連◆合の工作員だっただけの者です。

・織田信長の時代から戊辰戦争まで、鉄砲隊のガンパウダーはガンパウダー1樽につき、 日本人の
若い娘50人を海外に売ることで調達していました。

・総理大臣、大蔵大臣、外務大臣や公安、警察、自衛隊の歴代トップは鹿児島県、山口県、 高知県、
佐賀県、 長崎県出身者ばかりです。国策捜査は薩長連合やアメリカのための捜査です。

日本の政治家には朝鮮人の疑いのある人たちがいます。安★部、小★泉、菅★、小★沢。

2ちゃんねるは統一京会が運営してIP集めや、自作自演して洗脳工作する場です。

<「経世会(旧田中派)」VS「清和会」>
(田中派,経世会)逮捕←東京地検特捜部
(清和会)安泰

詳細
http://megalodon.jp/2010-0319-0241-00/jbbs.livedoor.jp/bbs/read.cgi/school/15753/1267194346/533-534
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
閨 閥
http://www.kyudan.com/column/keibatu.htm
■■■■■■■■■■■■■■■■■■■■■

統一京貝=2ちゃん運営=清和貝=薩◆長◆連◆合

293名無しさん:2010/04/17(土) 05:07:13
初歩的な質問失礼します。
easybotter2.04betaを元に作成しています。
@pageで動作確認した所、

Warning:require_once(Services/Twitter.php) [function.require-once]: failed to open stream: No such file or directory in /usr/local/www/htdocs/***/data.php on line 84
Fatal error: require_once() [function.require]: Failed opening required 'Services/Twitter.php' (include_path='.:/usr/local/lib/php:/usr/local/www/htdocs/***/PEAR') in /usr/local/www/htdocs/***/data.php on line 84

のような文書でて、該当の場所にはServices_Twitter設定で、

 require_once "Services/Twitter.php";  

と元のデータから弄らずそのまま記されています。
ここは何か書き直した方が宜しいのでしょうか?
あと、フォルダ内に、Services/Twitter.php というファイルは存在しまてないのですが、大丈夫でしょうか。

294名無しさん:2010/04/17(土) 10:55:33
>>293
Servicesフォルダをつかうだなんてひとことも書いてないんですが
wikiにファイル構造が載っているので、ご自分がサーバーアップ
したものと見比べて下さい

295名無しさん:2010/04/18(日) 20:18:33
bot初心者です。
掲示板の内容や、他のphpソースを漁って調べたのですが、
行き詰ってしまったので、どうかご教授願います。

bot.phpの中で、話しかけられた相手別にリプレイパターンを作成したいのですが、

【例】ID:Aさんの場合、reply_patterna.php
ID:Aさん以外の場合、reply_patternb.php

としたい場合のif文のコーディングがわかりません。
ちなみに、私がコーディングした分は↓ですが、どうもうまくいかなくて…。

if(screen_name == "A"){
$response = $eb->reply(10,"reply_patterna.php");
}else{
$response = $eb->reply(10,"reply_patternb.php");
}

PHP初心者なので、どうか、宜しくお願い致します。

296名無しさん:2010/04/18(日) 20:37:53
295です。
ごめんなさい、wikiをまだ見てませんでした。
そちらに書いてあるようなので、見てきます。

297名無しさん:2010/04/19(月) 13:31:57
EasyBotter2.04betaでbotを作成しています。

"([^\s、。]+?)は好き?"=> array(
"$1おいしいです",

こちらの「([^\s、。]+?)」の記述を元にいくつかリプライパターンを作っているのですが
この記述ですと顔文字などの記号を拾ってくれません。
正規表現のサイト様を参考にいくつか変えてみましたが、どうしても上手くいきませんでした。
記号も拾えるようにするには、どのように記述すれば良いのでしょうか?

298名無しさん:2010/04/19(月) 16:12:22
リプレイの箇所で質問があります。
@付きのつぶやきに対してリプライしたい場合のファイルの記述と実行結果で行き詰っています。
bot.phpのソースには、以下の用にコーディングしてあるのですが、

require_once("EasyBotter.php");
$eb = new EasyBotter();

$response = $eb->reply(10,"reply_test.php");

「reply_test.php」を見にいってくれず、何故か「reply_pattern.php」を見に行ってしまいます。
どこがおかしいのかわからなくて…。
どなたか宜しくお願いします。
仕様しているのはEasyBotter2.04betaです。

299名無しさん:2010/04/19(月) 17:55:02
>>297
\

>>298
,""

300名無しさん:2010/04/19(月) 21:13:41
>>299

298です。
,""をどこかに入れればいいのでしょうか…。
すみません、本当に初心者なもので…。
教えてください。

301名無しさん:2010/04/19(月) 21:45:20
>>299
お答えいただいた「\」はどうするのか良く分からなかったのですが
その事を調べながら試している内に
「([^$]+?)」と表記する事でスペースも記号も全て拾ってくれるようになりました。
ご回答ありがとうございました!

302名無しさん:2010/04/20(火) 00:16:24
>>298,300
299さんじゃありませんが最初は
$response = $eb->reply(10,"reply_test.php");
ここは
$response = $eb->reply(2, "data.txt", "reply_pattern.php");
となっていた筈です。
,"data.txt"まるごとを消すのではなくて…
でわかりますでしょうか?

303名無しさん:2010/04/20(火) 04:17:28
>>86と同じ症状で困ってます。なんのエラーなんでしょうか?
昔はもっとちゃんと動いてたのですが、最近になって頻繁にこのエラーに悩まされてます…

304名無しさん:2010/04/20(火) 21:11:54
>>299
>>302
わかりました!有難うございました!
すみません…感謝です><

305うら:2010/04/21(水) 12:40:54
>>303
>>86 の方の推測通りだと思いますよ。エラーで想定されるデータをもらえなかったと。
結構重い時がありますので、どうしようもないことかと。
またこのエラー回避は、使っているライブラリで対応すべきレベルと思われます。
もうすぐ BASIC 認証ができなくなる可能性がありますので、2.0系に移行の考慮を。

306名無しさん:2010/04/29(木) 18:22:10
EasyBotter 2.04が正常に動いている状態で
http://twitter.com/statuses/friends_timeline.xmlは期待通りの結果が返ってくるのに
http://twitter.com/statuses/friends_timeline.xml?count=100にすると
Incorrect signatureが返ってきます
何か指定方法が違うのでしょうか?

307うら:2010/04/30(金) 12:58:42
>>306
もしかして OAuth 認証で GET したいのでしょうか?
だとしたら、リクエストを配列に入れないといけませんよ。

308306:2010/04/30(金) 13:47:57
>>307
まさにそれでした
API仕様書の日本語訳には>>306のように書いてあったし
user_timelineが>>306のような書き方でちゃんと動作したので謎だったんですよね
で以下のように書き換えました

function getFriendsTimeline(){
$url = "http://twitter.com/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;
}

半日無事に動いているので他の機能との互換性みたいなのも多分大丈夫だと思います
それはともかく>>307さんありがとうございました

309名無しさん:2010/05/07(金) 16:53:53
無料携帯ゲーム内でvippreがDQNやゆとり供にフルボッコされてる件wwwwww
http://utpa.jp/?guid=on&amp;cv=29911

メルアド一切不要
キャラを作成してLvを上げる(最初は丸太やかかしを斬っとけ)
Lv10になったら職業が選べて国に所属出来る
Lv20になれば自分の国を作る事が出来る

一つの国に30人まで所属出来るのでなるべくLvの高い奴か良い装備の奴が沢山居ると心強い
好きな国に戦争を仕掛ける事が出来る
戦争に負ければ国は無くなり所属してたメンバーもバラバラになる
勝てば国のランクが上がりショップの品揃えが充実する

簡単に言うとこんな感じのゲームだけど遊び半分でちょっかい出したvippre勢がDQN勢やゆとり勢に押されてるのがワロスw

310名無しさん:2010/05/14(金) 21:50:47
EasyBotter 2.04にてbotにランダム数字をPOSTさせたいのですが、
POSTさせたい発言内『今日のラッキーナンバーは{random}です』のように組み込むのに、
関数の $random = rand(1,1000); (1〜1000を表示)を
どのファイルに記載すればよいのでしょうか…。
初心者な質問で申し訳ありません。

311名無しさん:2010/05/14(金) 22:14:19
>>310
根本的に間違ってます、書き込むスレも間違ってます
EasyBotter公式サイトの説明をよく読んでください

312教えてください:2010/05/17(月) 01:34:47
TL拾うとかリプはちゃんと返します。
1時間おきにランダムで投稿できていました。
ただ、ランダムとはいってもよく似た台詞をつぶやくので
順番にポストさせようと思ったら
1行目だけを毎回ポストします。
bot.phpは、下のような感じです。


$response = $eb->autoFollow();
if(date("i") >= 35 && date("i") < 39){
$response = $eb->postRotation("teikidata.txt");
$response = $eb->reply(4,"data.txt","2reply_pattern.php");
$response = $eb->replyTimeline(4,"reply_pattern.php");
//if(date("i") >= 45 && date("i") < 49){
//$response = $eb->postRandom("teikidata.txt");
}

コレだけだと、318台詞用意してても
一行目しか、つぶやかないんでしょうか?
よろしくお願いします。

313教えてください312:2010/05/17(月) 01:49:34
エラーは、こんな感じです
Warning: fopen(teikidata.txt) [function.fopen]: failed to open stream: Permission denied in /usr/local/www/htdocs/◎/public_html/EasyBotter.php on line 318
Warning: fputs(): supplied argument is not a valid stream resource in /usr/local/www/htdocs/◎/public_html/EasyBotter.php on line 319
Warning: fclose(): supplied argument is not a valid stream resource in /usr/local/www/htdocs/◎/public_html/EasyBotter.php on line 320

Twitterへの投稿に失敗しました。
ユーザー名:@◎

object(SimpleXMLElement)#5 (2) {
["request"]=>
string(20) "/statuses/update.xml"
["error"]=>
string(22) "Status is a duplicate."
}

314名無しさん:2010/05/17(月) 02:03:05
>>312
そのteikidata.txtのパーミッションは
もちろん書き込み用パーミッションに変更してあるよね?

315教えてください312:2010/05/17(月) 02:04:12
スレ汚してすみません。
bot.phpは、勘違いして3つに分割してたので
定期ポストのbot.phpは、下のようになってます。

$response = $eb->autoFollow();
if(date("i") >= 35 && date("i") < 39){
$response = $eb->postRotation("teikidata.txt");
//$response = $eb->reply(4,"data.txt","2reply_pattern.php");
//$response = $eb->replyTimeline(4,"reply_pattern.php");
//if(date("i") >= 45 && date("i") < 49){
//$response = $eb->postRandom("teikidata.txt");
}

316教えてください312:2010/05/17(月) 02:10:18
>>314
えっと、ランダムポストで使用してたので
気にとめてませんでした。
ランダムポストなら、普通に動くのですが
プレーンテキスト ドキュメント とかじゃなくですか?
すみません、ぐぐってきます

317名無しさん:2010/05/17(月) 02:15:12
>>316
wikiにパーミッションのこと書いてあるはずなんだけどな・・・

postRotationは毎回1行目を最後の行へ移動させ書き込み処理を行っています
だから次ぎ読み込むときは、元々2行目だったのが1行目になっててその1行目を読み込んで発言している
書き込み許可してないと、いつまでたっても元々の1行目を発言しようとしてしまうよ

318教えてください312:2010/05/17(月) 02:39:59
>>317
@PAGESを使ってるのですが
拡張子が.phpなどの実行するだけのファイルの場合、デフォルト設定されている644でも動きます。 ってことだったので644にしていました。

拡張子が .txt や .dat や .log などの読まれるだけのデータファイル ==> 604
拡張子が .txt や .dat や .log などPHPで読み書きされるデータファイル ==> 606

606にしたほうが良いってことになりますでしょうか?
すみません・・・書き込み許可になりませんでしょうか?

319名無しさん:2010/05/17(月) 02:42:26
>>318
聞く前に試してみろ
試して駄目だったら聞け
そして激しくスレ違い
君は初心者スレへ行くべき
だがまずは試してから


新着レスの表示


名前: E-mail(省略可)

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

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

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

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