1 :
nobodyさん :
2009/09/27(日) 14:15:59 ID:Dz08qoo4
カレーに2
PHPで、TL上の特定の単語に反応して相手にリプライを送る方法を教えてください。 たとえば通常postで「おはよう」「おやすみ」(@付のpostは反応しない)とあった場合に、 こちらからリプライをするものです。 特定の単語をリプライされた場合にその単語用の文章を返せるリプライなら 知っているので、もし必要でしたら貼ります。
前半と後半で同じこと言ってるような気がするのは俺だけ・・・?
それって自分宛ての返信ページを取得してるんでしょ? 普通に対象ユーザのTLを取得して同様の処理すればいいんでない?
>>7 その記述方法が分からなかったので質問したのですが、解決しました
すみませんでした
どうやって解決したの?
>>9 個人のブログなのでアドレスは書けないんですが、
すごく詳しく解説しているサイトを発見したもので
公開してるなら教えてよ。このスレのためにも。
>>11 アドレスは書けない
『プログラミングを始める』でぐぐって上から2番目に出てきたところ
なんで書けないんだ? キーワードは言っておいてURLは書けないとか 意味が分からない。
>>12 ブログの主に迷惑がかかるからだろうが
お前は自分がよければそれでいいのか?
ヒントだけ出せば検索もできない馬鹿なやつを弾けるしな
プログラミングができなくても作れるTwitter botの作り方 というサイト様でbot設置は簡単にできたのですが ランダムに呟き・返事をするのではなく、 ・時間帯に合わせて発言する ・特定の語句に対して返事をする(会話が成り立つ) ようにするにはどうしたらいいでしょうか?
> ブログの主に迷惑がかかるからだろうが > お前は自分がよければそれでいいのか? どんな迷惑がかかるの? 2ch って何か問題なの?
>>14 意味が分からん。
このスレって迷惑なことしてるスレなのか?
製作支援スレと銘打っているので、教える気のない人は来ないでください。
それと2chにURLを貼られるのが嫌な人はたくさんいるので、
なるべくURLは出さずにヒント通り検索してみてください。
『Twitter BOT 作り方』とかで結構出ます。
>>16 サイト名を書かかれるのもいやがる人もいるんでアレなんですが
「銀さんのbot 〜不完全〜」で検索してください
>>20 >>16 と同じところで躓いてそこも見たんだけど
そのサイトで公開してるやり方を選択するってことは
>>16 のサイトで配布してるphpは使わないってこと?
>>19 じゃ「ブログの主に迷惑がかかる」というのは嘘ということね
>>22 バカ?それとも釣りか?
ちょっと前のレスも見れないんだな。
自分が管理人になって2chの知らないスレにアドレス貼られて影でアレコレ言われてみれば、いい気分しないの自覚するんじゃないの?w
>>23 影でアレコレ言うのが嫌ならこのスレの存在を教えれば?
全然役立たないスレだな
簡単な改造とかはどっちかっつーとPHP初心者スレとかで聞いたほうがいいスだろうな。 リンク禁止とか書かれてるならともかく、プログラム関連の情報ブログなんかはむしろ公開ありありだと思うんだけど まあそれは置いといて、喧嘩腰暴言吐く人はどのスレでもいらんよね。
url貼らないことに粘着する奴がいるようだな、くだらない。 直リンでなくともurl貼らないで検索ヒントのワンクッション置くのは善意だろ。 その善意が誰に向けられてるのかもわからずしつこく粘着とは悪意そのもの。無益だから自重してね
そんなのどうでもいいから台詞書き換えるだけで設置できるプログラム配布とかしてくれよ
それこそ検索すれば出てくると思うんだが… それかbotmaker使えばいいんじゃないの? プログラム面自分で触る気ないならそっちのが簡単じゃない?
@で反応するbotが作りたいです BASARAのbotが理想です 銀さんのbot見たけどよくわかりません
>>31 あれでわからないならもう諦めたほうがいい
てんどんかよ
こんなかんじで応答ができるbotが作りたいです
39 :
nobodyさん :2009/10/10(土) 05:52:06 ID:WvW2Ckcc
>>39 そこつかってるけど、ときどき定期発言抜けるねー
ときどきジョブが自動でneinになってるときがあってびっくりするよ
cron の読み方がわかりません><;
>クロンタブ、あるいはクーロンタブ、クローンタブとも
botを作ること自体は全く難しくないが、 フォローし続けても飽きがこないbotを作るのは難しい
作者が意欲的にワード追加するとか、形態素解析でうまいこと使いまわせるようにしてないとすぐ発言が単調になるしな。 単にしゃべらせたいってだけなら上のほうの検索ワードのやつでいいはずだけどしゃべったらすぐ飽きるよな。
phpでフォローしているひとたちの発言をマルコフ連鎖にしてつぶやくbotをつくりたいんだけれど 解説しているサイトとかありませんかね
何を?
botについて? マルコフ連鎖について?
PEARモジュールのServices_Twitterは発言させるだけなら容易にできるけど フォロワーの名前ひろったり過去発言参照したり色々いじろうとすると物足りないな。
過剰反応だとは思うし悪意で張るわけでもないから気にしなくていいと思う。 技術系のブログは資料として色々比較したほうがそっちへのフィードバックもできるし。
返信するタイプのbotには返信先のpostが出るようにしてほしい。 updateのAPIに投げるデータにin_reply_to_status_id付けて。
直リンしちゃだめとか同人系のローカルルールだろwww プログラミング系の板に変な空気を持ち込まないで欲しいwww
cron使える安い鯖無いの?
>>54 「レンタルサーバー」でぐぐって出てくる鯖の仕様ページで片っ端から調べて行くとか。
>>54 corn-job.comじゃ駄目なのか?
レンタル鯖は大抵1時間に1アクセスくらしかできんぞ
あと誰かMステ出演者botつくってくれ
じゃあ両方のいいとこ取りすればいい・・!
ヲチスレとかで、@pha さん呼んだら解決するじゃん・・・・
>>1 -
twittanの管理人?がおかしいので、twittanにDM投げるだけのBotつくってくだしあ><;
>>48 Twitter botに実装する方法が分からない…
マルコフ連鎖って、chasenやmecabなんかが使えるサーバーじゃないと 形態素解析が使えないから、単語単位での分け方け方じゃなくて、 スペース、句読点くぎりしかできなかったはずだけど、違うのかな。 yahoo apiを使えばできるの?
>>1-1000 twittanの管理人?がおかしいので、twittanにDM投げるだけのBotつくってくだしあ><;
今、銀さんのbotを見て作ってたんだけど、 定期つぶやきについては最初はうまくできたのに、 リプライ機能もつけようとしてtxtファイルを作ったら、 リプライはおろか定期つぶやきもしてくれなくなった… 手動でphp実行で投稿しようとしてもだめ txtファイルを消してもだめ どなたか知恵下さい...
前のつぶやき(20件)と全く同じ発言しようとしてるからじゃね? それでもダメなら作り直した方が楽な気がする。
69 :
66 :2009/10/18(日) 00:50:08 ID:???
>>67 >>68 うわぁありがとう だからか!すごい納得いった。
テストのつもりだったから
発言4種類くらいで6分間隔くらいで喋らせようとしてたわ。
ほんとサンクスです!! もうちょっと頑張ってみる
ああ、10件だったっけ…
> 24時間以内 というのは間違いみたい。数日経っても動かないボットもいる。 テスト用に作った発言の種類が3つのボットだけど。
そうなると直近の10post分だけどっか別のファイルに記録しておいて、投稿前に その中に同じ内容が含まれていたら違う発言をpostするようにしたら何とか回避 できるかな。 発言を11個以上用意しておく必要があるけれど。
73 :
66 :2009/10/18(日) 01:28:40 ID:???
今セリフを増やして言葉も変えたら、とりあえず手動での投稿は受け付けたから やっぱりセリフの重複が問題だったみたい。 ここのスレなかったら多分諦めてたわ、ありがとう助かった!^▽^
>>57 この8bitnoteの方にあるPOST内容から発言を引用するスクリプトを丸コピーしてみたら
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /usr/local/www/
ってエラー出るんだけど質問受付てないし何がいけないんだかさっぱりわかんね
パースエラーだろが
bot同士で会話させるた時にある程度会話するとリプライしないようにできる方法ない?
corn-job.orgって使えるcronの数決まってる?
80 :
nobodyさん :2009/10/19(月) 00:15:54 ID:slCeJxW2
なんかおもろいbot教えて
リプライに関して。 プログラムは基本的に動くんだけど、 たまに「@ID」のみの空白リプライ返してるときがある。 単に負荷がかかりすぎ、ってことなのかな? 同じ症状出た人いたら教えて欲しい……。
POSTするステータス自体が、何らかの要因でそうなってるんじゃないの? あとは、\0 が入ってるとか。 どっかにログとして保存しとくと確認しやすいかも
作ってみたしリプライの出来るんだがシカトが多いなと思ったら リプライを読み込むまでにもらった最新の一件にしかリプライしないようだ 原因は何が考えられるでしょうか?
作ってみた内容がわからんから何とも言えない
最新の一件にしか反応しないようなソースだからじゃないのとしか
corn-job.orgが使ってるけど1/3くらいの割合で作動しない気がする どっか2分間隔でcron使える鯖ないかな
elseif( preg_match("/(.+)(なのか|だったのか)/",$text)){ {//「なのか」または「だったのか」の前に何かしら文字があった場合にマッチ $nanoka = $1; //「なのか」または「だったのか」の前の文字を$nanokaに代入 ←この行でパースエラーになるんだけど何がおかしいの? $mes = array("$nanokaなのかー"); //$nanokaを台詞に組み込んで引用! $mes_n = count($mes) - 1; $mesrand = mt_rand (0,$mes_n);
全角スペースが入ってるから
>>88 elseif( preg_match("/(.+)(なのか|だったのか)/",$text,$match)){ {
$nanoka = $match[1];
>>88 あと
>$mes = array("$nanokaなのかー"); //$nanokaを台詞に組み込んで引用!
>$mes_n = count($mes) - 1;
>$mesrand = mt_rand (0,$mes_n);
は何をやりたいのかよくわからないのだけど
これだと count($mes) は必ず1になると思う
>>1-1000 twittanの管理人?がおかしいので、twittanにDM投げるだけのBotつくってくだしあ><;
ああ$1とか書いてるからか・・・
>>90 迅速な回答ありがとう
おかげでとりあえずエラーは消えたが何故かリプライに反応はしなかった
corn-job.org2分間隔と30分間隔で使ってるけど2分の方ほとんど機能しねえ 間隔長い方がいいのか?関係あんのかな
96 :
81 :2009/10/19(月) 22:14:13 ID:???
>>82 >>83 ありがd ちょっと試してみる。
空リプライをポストしないようにすればいいんだな、とりあえず。
bot動かすのに一番向いてる鯖ってどこ cron使えるとこで
俺の鯖
さくらサーバーってcron最短で何分間隔で使えるんだろ
twitterにアクセスできて、任意のプログラムを動かせるのであれば 鯖である必要すらない。
>>93 Perlやってると陥るミスだな。
構文微妙に似てるせいで同じとこと違うとこを混同しやすい。
手動だとちゃんとポストされるのにcronがポストしてくれない ドイツのサイト使ってるけどここだめなのか
普通にcron使えよw
ちょっと前に名前を呼ばれてたので名前を出すけど@phaです。 特定の単語に特定の単語を返す機能は次のバージョンアップで付ける予定です。 もうちょっと待ってくださいー。
>>102 例のドイツのサイト、多分今すごく負荷かかってるんじゃないか?
良くも悪くも、かなり認知度高まってきた感じだし。
@phaさんが配布してるのと、 時間になったら寝たり、時間帯のつぶやきを組み合わせようとして 途中までうまくいってたんだけど 文字化けしちゃってうまく出来なかった・・・。 誰かやってうまく行った人居ませんか?
>>104 @phaさんキタ━━━━(゚∀゚)━━━━!!
待ってます!!!!!!!
>>107 文字コードの設定を見直してみ
UTF-8になってないと化ける
cron-job.orgが使い物にならないからxreaでcron動かそうと思ったが設定とか全くわかんね 正直ナメてたわ誰か助けて
xreaのcronだったら下のほうに解説ないかな。 もしくはcronでぐぐって設定とかをちょっと勉強するのがよいかも。
とりあえず、シェルっていうのが必要ということはわかった このシェルスクリプトをサーバーにうpして、それにアクセスするとnotfoundになるんだけど間違ってるから? #!/bin/sh /usr/local/bin/php /virtual/ユーザID/public_html/reply.php exit 見よう見まねでこんな感じでやってみたんだけど
>>110 それがUTF-8になってるんだよね。
一度消してうpしなおしても駄目でさ、エラーも出るんだけど、文字化けしてつぶやかれてるし。
カスタマイズ前でつぶやけば文字化けしないんだけども。
もうちんぷんかんぷん。
PHP素人が調子に乗って弄るもんじゃないね。
>>111 私もよく解らないから例だけども。
改行コードを「LF」保存で「cron1.sh」(他の名前でも.shだったらおk)ってファイルを作成。
#!/bin/sh
#PHP
/usr/local/bin/php /virtual/ユーザー名/public_html/botフォルダとか/動かしたい.php
exit
で、logとかpublic_htmlフォルダとか色々所らへんに「cron1.sh」をうp
属性は「705」あたりで平気だと思う。(うpする場所は他の所でも多分大丈夫だと思う。)
ログインしてCOREジョブページで設定。
毎時間0分動かしたい場合は「分」に「0」毎時間15分に動かしたい場合は「分」に「15」を入力
/virtual/ユーザー名/〜には「cron1.sh」を置いた場所を指定
例どおりだったら
/virtual/ユーザー名/cron1.sh
一時間に1回が限度だから時間をずらして設定1、設定2とか
やれば一時間に複数回動かすことが出来るっぽい
で「保存」して反映されれば動くっと。
説明ヘタクソでごめん・・・これで解るといいんだけど・・・
長々と失礼しました。
>>114 詳しい説明ありがとう
この改行コードってのがググった時にも出てきたんだがこれはどこで設定できるんだ?
>>115 ×COREジョブ ○CRONジョブ
ごめん。
自分はテキストエディタTeraPadで「ファイル」→「文字/改行コード指定保存」で指定出来たよ
何のテキストエディタでcron1.shを作るかによって変わると思うから
使ってるテキストエディタで改行コードについてググればいいんじゃないかな?
>>116 dクス
とりあえず言われた通りに設置してみた
相変わらずcron.shはNot Foundになるが…大丈夫なのか
Not Found? ファイルが無いって意味じゃないっけ? ファイルのURL間違えてない?
cronがちゃんと実行されてるとメールが来るはずだよな 来ないということは実行されてないってことなのか
xreaってメール来るんだっけ。 僕は使ってるけど来てないな。設定によるのかもしれないが
なにがおかしいのか動作しないっぽい こんだけ丁寧に教えてもらったのに申し訳ない… 手動ではちゃんと動くからcronの設定が間違ってるんだろうけど
10のプログラムの方のソースで、TL引用するbot作れんかなと思って、それを元に色んな所を参考にしてやってるんだが if($reply_name != $username){ if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){ if( preg_match ( "/(「?.+?」)/u", $var ,$match)){ //←ここ改変 $message = $match[1]; //←付け加え tweet($message ,$username,$password); としてみたところ、エラーなどは出ないもののリプライがない…。もうどこをルール違反してんのかわかんねぇw
あー、やっぱりcron-job調子悪いのか… 2つBOT置いてるのに片方が反応しても片方が一日沈黙している。 別鯖探してるけれどなかなかいいのがないなぁ。 改変もエラーばかりだし、なんでBOT作ったのか自分でもわかんなくなってきたよ いや、でも負けないけどさ。
8bitさんのコメにあるのと同じ質問で申し訳ないのですが リプライに対する反応語句を増やすにはどこを増やしていじればよいのですか? if構文から見て自分なりに増やしても、反応すらしてくれません。
>>123 自鯖?
cronでこけるときって文字エンコードがらみが経験上多い。
普通にコマンドラインで動かすと動くんだけど、cronで動かないとか。
print文とかあったらコメントアウトしてみるとか
レンタル鯖でcronはあきらめたほうがいい
126 :
123 :2009/10/21(水) 10:15:59 ID:???
>>125 ありがとー 自鯖じゃなくて、銀さんのところで見た@PAGES使ってる。
いかんせん初心者@勉強中なもんで、ソースはいじらずに使ってるだけなんだけど
昨日くらいからcron-jobが全く動かなくなってしまってる。
超過エラーは出ててもそれまでは動いてたんで、元鯖が不調なせいかなと思ってた。
手動ならおkぽいから、phpは平気(当然だが)なんだけどね。
>レンタル鯖でcronはあきらめたほうがいい
あー…もう素直にBOT手放すしかないのかなあ…PHP楽しいのに。
cron-job.org安定しないよなー… 他にcron使える手段が自分にはないから仕方ないけど ときどき実行に失敗するのは我慢できるが 勝手にアクティブ設定が無効になるのは勘弁してほしい
有料だけどすごく安いのでwebcron.orgはどうかしら
webcron.org使ってるけど動作は安定してると思う。 webcron.orgも昔は無料だったんだけど、無料である程度人が集まった時点で有料化された。 なのでそのうちcron-job.orgもそのうち有料化されて、そしたら動作も安定するんじゃないかと思ってる
いろいろと本格的にやりたいんならsheevaplug買えばいいよ 玄人から出るみたいだし
シェルスクリプトって文字コードUTF-8でいいの?
>>132 今GAEが対応してる言語ってpythonかjavaだけじゃない?
php対応してたら使いたいけどなー
>
>>79 >>87 >>95 >googleappengine使えば、好きなだけcron設定できるよ
pythonでいいじゃん
制限あるじゃん
自分のPCにapacheとphpインストールしてcron動かせばいいじゃん 立ち上げっぱなしになるのがネックだけど
>>137 いけました!
有難う御座います!!
しかし、中身に記載されてるバージョンが1.1のまんまでしたよー
リプライをもらうと@だけ発言する、うちのボット…
おつかれさまです!!!!
自分のbotが他のbotにフォローされてるんだけどフォロー返したら会話がループしそうなんだよな
この新しいreply_patternってやつをreply_randomに組み込めばいいんだよね? なんかエラー吐くんだけどどこに置けば?
たまにリプライするとき@の前にドットつけてるbotいるけど何の意味があんの?
>>147 reply_pattern.php のファイルの場所を移動させなくてもそのまま置いておけばできたよ
>>137 ありがとうございましたー!!
でも動かないー!
>152 反応が全くない。TL上のワードを拾うわけじゃないんですよね? 普通に@無視される… まぁ、@つけても無視されるんですが。おやすみ入れてもスルー。
>>137 本当にありがとうございますー!
今まで特定の語句への返信は、
phaさんのを参考にして作ったという某ブログのスクリプトを使っていたんですが
こちらの方がすっきりしていてサイズが小さく済む+追加しやすいのでこちらに変えました
定期ランダムポスト+特定の語句へのリプライはphaさんのスクリプト
TLから特定の語句を拾ってのリプライは某ブログのスクリプトという
合わせ技でもなんとか動いてます
こんなに使いやすいスクリプトを作って下さり、本当にありがとうございました
>>137 構文を追加したらRT対策が解除される、ということは不可能でしょうか?
.@での挨拶が多いので対応出来なくて…
リプライの応用で、特定のワードには反応しないってことはできるのかな?
phaさんのリプライ返すのを改変してTL中にキーワードがあったら返すのつくってるんだが 自分の発言にキーワードがあった場合やリプライ時でも返してしまう if( $screen_name != $username){ //自分の発言時は反応しない if(strpos($re["text"],"@".$username) === False){ //発言の中に@があった場合は反応しない if(preg_match("/キーワード/",$re["text"])){ //特定のキーワードがあった場合反応する $replies[] = $re; } } } こう改変してるんだけどどこがへんなのかな? 条件分岐がうまく動いてないみたいなんだけど
スクリプト自体は一切手を加えてないのに実際に投稿されるときとされないときがある。 txtファイルに登録してる発言内容が少ないので同じ発言がたまたま選択されて連投規制に引っかかったのか、 一度に投稿スクリプトを動かし過ぎてAPI規制に引っかかったのか… 同じ内容を続けて投稿してしまわないようなチェック機能とかあったらいいなあ。 適当なtxtファイルを用意して発言内容をそこに書き込む→発言前にそのファイルの内容をチェック、 選択した発言が同じなら発言選択をやりなおすとかだったら実現できるかな。 作ってみようかなあ。 cron-job.orgも登録してみたけどうまくいかないのでcygwin入れてみたけどさっぱりわかんないやorz
>>158 全然投稿で着てないわけじゃないんでしょ?
だったらやっぱり重複制限に引っ掛かってるのかもしれないから
適当にtxtファイルの中身増やしてテストしてみたら?
cron-job.org落ちた?
落ちてるね
そういえば、rubyの本で人工無脳をつくる本があったけなぁー アレどっかにつんであるはずだからさがして twitterのbotで発言できるようにしてみるか
>>137 のスクリプトでおはようをPOSTすると「おはよう」の返事+普通の@返しされるんだけど
他にもこういうひといない?
bot同士が会話してるせいでTL流れるのがハンパねえ これって連投すると規制されるのか?
・直前の10ポストと同じ内容の投稿は受け付けない。
>>68 ・2時間で125以上ポスト出来ない(というメッセージが出たことある)
投稿規制はこの二つだったはず。後者はちょっと曖昧かも。
後者のpost規制の基準は曖昧だからな…変動してるらしいし 定期postの間隔がよっぽど短いとか リプライ反応する間隔が2分とかで 毎度数十件のpostでもしなきゃされないんじゃね
レンタルサーバーでcronが安定してるのってどこがある? cron-job安定しないんだよなー それとも2分じゃなくて4〜6分間隔くらいにしたらまだましかね?
>>168 80code.com安定してるよー。現在は新規受付停止中だけど。
さくらのスタンダードとエックスサーバーもcron可だったと思うが、使った事無いので動作については分からん
>>169 調べてみるわー、ありがと
リプライ返しやTLから拾ってくるタイプだから分おきに
動かないときついわ
pha22さんのスクリプト改造して直近10件の投稿とかぶらないようにする改造してるんだけど、 なぜか同じ文字列を見つけてくれないorz 誰か助言プリーズ //ログをチェックして直近10件の投稿と重複させない //ログリストを読み込む $logfile = "log.txt"; $logs = file_get_contents($logfile); $logs = trim($logs); $logs = preg_replace("@(\r\n|\r)@", "\n", $logs); $logs = preg_replace("@\n+@","\n",$logs); $logs = mb_convert_encoding($logs, 'UTF-8', 'EUC-JP,SJIS,ASCII,JIS,UTF-8'); $lo = explode("\n", $logs); for ($c = 0; $c < count($lo); $c++){ if (strcmp($message,$lo[$c]) === 0){ //同じだった場合もう一回ランダム発言を取得しなおしてカウンタを0に戻す //発言をランダムに一つ選ぶ $message = $tw[array_rand($tw)]; //カウンタを戻す $c = "-1"; } }
cronいつの間にかneinなってた… 上でググるアプ使ってる人はどうやってるの?
>>173 ありがとう
出来た気がする。もうちょっとテストしてみるわ
「いつ・どこで・なにをする」をランダムに組み替えて発言するとか 相手の発言を引用する(○○だよ→○○なんだね)みたいなやり方教えて
お願いだー! 誰か、TL上のワード拾って反応するBOTのソースくれー! バカなのは承知してるし勉強もしてるんだー
>>137 のスクリプトって○分までは吐かないのか…
>>137 のスクリプトを置いて、試しに動かしたら運勢の結果がランダムではなくひとつずつ発言として全部出てきたんですが…。
IDとパス以外変更してないのになにこれ?
cronあってねーんじゃねーの
>>179 時間の奴はちょっと調べれば簡単に改変できるよ
date()あたりググればいいんじゃない
replyで何度試しても「〜分以内に受け取った@はないようです」と表示されます。 1〜2回うまく行ったけどあとはさっぱり 何か考えられる原因があったらご教授願います
185 :
184 :2009/10/24(土) 16:56:22 ID:???
解決しました。 @ユーザー名の後のスペースが全角になっていました…orz お恥ずかしい限りですがご報告だけ。
昆虫みたいなbotをつくりたい あれすごい
189 :
nobodyさん :2009/10/25(日) 11:22:48 ID:QovXst2Y
>>188 簡単な人工知能プログラムが必要。
bot技術とはちょっとかんけいない。
>>190 そんな高度な技術でもないだろ、
とりあえずphaさんのスクリプト例に取るとpost_random.phpのテキストファイルの内容を一行ずつ読み込んでランダムに一つ選択するところと
reply_random.phpのテキストファイル中の{name}を置き換えるところを応用してくっつければ出来る。スクリプト長くなるけど。
phaさんのだとPostに対してリプライ送るんじゃなくて「@ユーザーID」を 文頭においてPostしてるだけになるんだけど ちゃんとしたリプライ送るようにするにはどうすればいい?
phaさんのscriptの、特定の単語を返すってやつで "おはよ"と"オハヨ"のどちらにも対応させる(1セットで)には どうすればいいのでしょうか? ↓な感じにしたいんですが "おはよ|オハヨ"=> array( "おはよう", "おはよ!", ),
>>193 今のところそういう機能はないね。バージョンアップでつけるって言ってたけど
>>181 FTPでアスキーモードで転送できてなくて改行が変になってるのかも
FTPでアスキーモードを指定、とやってみたらどうかなあ
わかんないけど
セーフモードのPHPでcurl_opt設定を出来ないのは回避策はありますか? DSOで。
>>194 ありがとう。バージョンアップ…待ちます。
自動フォロー返しやDM返しってどうやる?
>>192 @付きステータスのアップデート時に、in_reply_to_status_id を付ける。
詳しくはAPI仕様書を読んでね。
>>198 適当な間隔でフォロワーやDMのリストを取得して処理すればいい。
API制限もあるし、1度処理したらファイルに記録しておく必要があると思う。
メール通知を利用するって手もありそうだけど、
メールが来ないことが結構あるような・・・・。
>>199 仕様書読みながらphaさんの改変してin_reply_to_status_id付けようとしてるんだが
updateを使ってなくてどこにいれればいいのかわからん
reply_random.phpじゃなく
Twitter.phpの
function setUpdate($value)
{
return $this->_setData($this->sm_update,
array(
'status' => urlencode($value), in_reply_to_status_id => $id//←ここ
),
array(
'Content-Type' => 'application/x-www-form-urlencoded'
));
}
ここにいれればいいの?
>>198 自動リムーブだけど1日に1回、friends/idsとfollowers/idsの差分とって処理してる。
フォローも似たような案配でいけるんじゃない?
>199
in_reply_to_status_idって返信先ステータスのIDを指定するでいいんだよね?
送出前のヘッダを出力してみるとin_reply_to_status_idの指定がちゃんとしてあるんだけど、
レスポンスみると無視されてるみたいでハマってるんだ
203 :
200 :2009/10/26(月) 18:36:56 ID:???
>>200 似たような事してる人がいた!
自分はこう書き換えした
function setUpdate($value)
{
if(is_array($value)){
return $this->_setData($this->sm_update,
array(
'status' => urlencode($value['status']),
'in_reply_to_status_id'=>$value['in_reply_to_status_id']
),
array(
'Content-Type' => 'application/x-www-form-urlencoded'
));
}else{
return $this->_setData($this->sm_update,
array(
'status' => urlencode($value)
),
array(
'Content-Type' => 'application/x-www-form-urlencoded'
));
}
}
で、スクリプト側の方で
$st->setUpdate(array('status'=>$status,'in_reply_to_status_id'=>$in_reply_to_status_id));
みたいに書いてたよ
botに好感度みたいなのを実装するのは無理? あいさつをちゃんとしている人(Replyでおはようとか)にはやさしくなっていくとか…
可能です
>>203 おお、助かった!ちょっとやってみ…たらできんかった
エラー起こってないから単にin_reply_to_status_idが取得できてないだけなんかな
Basicでぼっとつくりたいんですけど・・・
>>208 うんこながしたりプロテインのませたりするんだな
necotterってそんな感じじゃなかったっけ
そのうち育てたbot同士で対決させるんだろ
>>203 これの場合
$in_reply_to_status_id = $replies2[$i]["in_reply_to_status_id"];
$status = "@".$replies2[$i]["screen_name"]." ".$text;
でいいのか?
銀さんとこのソースで、寝る時間が1時〜6時ですが それを12時〜19時までにしたいのですが、うまくいきません if (preg_match("/^[1-6]{0,1}$/",$now_g)){ $now_g = 'sleep'; }; [1-6]が1時〜6時、{0,1}が単位が0か1の場合というのは何となく分かるのですが 2桁にしたいので{0,1}を{0,2}や{0,1,2} {0-2}にしてもだめでした… どうすればいいのでしょうか? それから、翻訳機能を持たせたいのですが、ソースを公開してるところはありませんか @で特定の単語をくれたら翻訳してくれる…というのをやってみたいです。 『@bot +++たん、[◆◆]を翻訳して』とreplyしたら『@**** 『●●』だよ』というやつです。 ご存知の方、教えてください
>>212 ごめん>202=203なので>203のソースは上手くいかないんだ
phaさんのソースは知らんがin_reply_to_status_id=返信先の記事idだと思ったから
Services_Twitterの出力結果とAPI仕様書照らしあわせて
$in_reply_to_status_id = $replies2[$i]->id;
ってしてる。
>>213 preg_matchじゃなくて単に「$now_gが12より大きく、19より小さかったら」って書けば?
毎月の決まった日時に決まった台詞を吐くbotはつくれないでしょうか
phaさんの所でBOT作らせてもらったんだけど、特定の単語にしか反応しないようにって出来ないかな。 通常のリプライなしにしたいんだけどできる?例えば「おはよう」にしか反応しないとか。
>>215 毎月の決まった日時にだけ起動させればいいんじゃないの?
>>213 214氏が指摘している通り、わざわざpreg_matchを使う必要が元々無いよ。
翻訳機能のソース以前に、自前で自然言語の辞書を持つ事に結構な
リソースが必要なので、大抵は他を呼び出してると思うんだけど。
「翻訳 API」とかで検索すれば結構あるので、それを使うのが手っ取り早い。
特定の単語しか翻訳しない仕様なら、それこそ鸚鵡返しbotで十分だろうし。
phaさんのを見てbot作って、いままで普通に動いてたんだけど なぜかいきなりエラーになったみたい。 発言はするんだけどリプライしなくなったっぽい。 reply_random.php にアクセスすると Parse error: syntax error, unexpected '{', expecting ')' in /home/atumari.net/pp259583/public_html/reply_pattern.php on line 181 というのが出るんだけど、これって一体なに? どこが原因でエラーになってるのかさっぱりわからない…
>>220 行末の;が抜けてるとか
それよりスクリプト置いてるURL晒さないほうがいい、早く変えれ
>>221 ありがとう!解決した
URL変えてくる。すみません
in_reply_to_status_idの付加方法がわからん 誰か教えてくれ
>>203 の方法でいけるはずなのになんでできないんだろう、って思ってソースをよく読んでみたら、
Services/Twitter/Connector.phpの95行目でリクエストを組み立てるときに
$body .= '&';
ってやってるのが原因だった
$body .= '&';
に変えたらできるようになった。
他にも特定の単語に反応するときに正規表現を使えるようにもしました。
>>224 生きるのに疲れたのでbotになりたいんですけどどうーすれば良いですか?
>>224 おつかれさまです。
1つお伺いしたいのですが、バージョンアップをする場合は
tw.txt以外の全てのファイル(Servicesフォルダも)を
入れ替えればいいのでしょうか?
>>224 乙です、やろうとしてたことがかなり出来るようになってて嬉しい!
正規表現面倒くさい… 単純に|で区切るやつにして欲しいです
え…?
phaさんの新しいやつの事でしょ
>>224 =225
うへえ、どうりでヘッダ見てても分からないはずだーありがとうございました!
>>225 は
$body .= '&';
を
$body .= '&';
に変えたということです。
2chって実体参照通るのね。
>>224 のスクリプトをDLして弄ってます。
正規表現っていうのを初めて使うのですが
『おーい』『おーーーーーい』等の『ー』の数が決まっていない単語の
どちらにも対応させるにはどう書けばいいのでしょうか?
おー*い、おー+い、おー?い、おー(ー)?い ではスルーされて行き詰まってます…
239 :
236 :2009/10/28(水) 20:42:37 ID:???
>>237 すみません、『えーーん』や『うーーん』にも応用したくて…
>>237 さんの方法で、『えーーん』→『えー』と指定しまうと
『えーー!』等が引っかかってしまいます。
…ので、
>>236 の正規表現で煮詰まってます;
240 :
236 :2009/10/28(水) 20:47:27 ID:???
>>238 ありがとうございます。
『お(ー)+い』を試してきましたが、スルーされました…。
スクリプト毎に、使える正規表現というのは
限定されているものなのでしょうか?
>>240 いま自分でPHPで試してみたけど、
お(ー)+い
でいけたよ。
242 :
240 :2009/10/28(水) 20:53:40 ID:???
>>241 マジですか…余計にわからなくなってきた。
御手数おかけしました。
正規表現がまったく反応してくれなくて困ってます… phaさんのサンプルのこん(に)?ち[はわ]すらスルーされる始末 正規表現使わなければ普通に動きます どこに問題あるんでしょうか…
Webcronの「30sec・time-out」ってどういう意味なんだろ 有料だけどここ使ってる人いる?
>>245 30秒でタイムアウトするって事だろ。
俺ここ使ってるけどたまにタイムアウトするよ。180秒にした方が無難なんだけど一回に? 0,0004はちょっとイタイ。
>>246 なにがタイムアウトしてそれがどう影響するのか
わからない程度の素人だけど180秒にしたほうが
いいとわかっただけでありがたい
一度試用してみるよーありがとう
>>244 自己解決しました。普通にver1.2つかってたよ、ごめんなさい。
正規表現難しいね
聞(こえ|いて)[んる](の)??
に反応してくんないんだけど、どっか間違ってるかな
相手の発言の一部だけを引用ってできないの? 「」の中だけとか
できるよ
konchuuの開発者って誰なの、気になる
TLの特定の言葉に反応してリプライをするってやつ難しいな ソースほぼ丸々コピーでやってるのにエラー出てお手上げ状態だよ… ソース公開してる記事のコメント見るに同じような状況の人もいるっぽいけど 解決してなくてどうしようもねえ
難しいって自分でコード書くのが難しいんじゃなくて コピーした他人の奴をぐぐって動くように編集するのが難しいのかよ まぁそれも力になるさ
>>253 恥ずかしながらそういうことだ!
でもやってみたいから色々調べて勉強してみるよ
twitter検索使ったbot作ってるけど最近検索が止まってるみたい。 公式の検索使った方がいいのかなぁ…。
昆虫すげぇ、もうListsを駆使してる
phaさん、単純なやつでもいいのでマルコフ連鎖を…
最近BOTからBOTへのフォローがくるんだけど 無限ループに陥る可能性ある…よな?これ。 APIの回数制限とかあるけども。
>>258 キャラクター系botだとあるある。自分もそれが怖いのでおはようやおやすみのような日常会話系単語にリプライさせられないでいる。
リプライした相手を記録しておいて、投稿前に照合するくらいの対策しか思いつかない。(記録は一日一回クリアするってことで)
botとメッセージをやり取りしないbotなら気にしなくてもいいんだろうけど、自分が作ってるのがキャラ系botなんで、同じキャラbot同士での会話もさせたいんだ。
いろいろやってるうちに好きなだけcron回したくて自分専用のサーバ欲しくなるw
無限ループはよく陥ってるbot見るけど botからのpostは無視するようにすればいいんじゃないかなぁ sourceがAPIとかなら無視させるとか botじゃなくてもAPIからの投稿だとスルーしちゃうけど もしくはbotによくあるスクリーンネーム語尾が〜botなら無視させるとか… これも普通の人が〜botってスクリーンネームだとスルーしちゃうのが難点だな
時間別に違う言葉を返すのってできないかな 昼過ぎにおはようって言うと、「寝坊?」って返すみたいなの
>>261 PHPだったらdate("H")とかで現在の時間を取ってifとかswitchとかで場合分けだな
>sourceがAPIとかなら無視させる これって可能?
265 :
sage :2009/11/04(水) 00:25:58 ID:oJ2uxGZI
cron-jobでfehlerhaftって出るのは何でだ・・・ URLコピペで貼ってるから間違いないのに不完全なURLって出る。 時間あけて設定画面開いたら次は重すぎるって出ました。 ファイルが重いのは理解できるがステータス変わるの何でですか? 調べてみたけど分からなかったので分かる人いたら教えてください
>>262 ありがとう!
初心者ながら色々試してみたんだけど、どうにも無視されたり、他の時間帯のこと言ったりする…
実際発言のところにif埋め込むのはこういう形であってますか?質問厨で申し訳ないけど分かる人いたらお願いします。
swich構文もちゃんと設定してるつもりなんだけどなあ
if(preg_match ( "/(こんばん|今晩)[わ和は]/u", $var )){
if($plist = $mes['night']){
$plist = array("こんばんは","こんばんはー");
$key = array_rand($plist);
$post = $plist[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}
}
if($plist = $mes['night']){ なにこれ?
>>267 case ($now_g > '16') && ($now_g < '20') :
$plist = $mes['night'];
swichで時間帯設定したんだけど、発言の部分に「その時間だったら」って内容つけるのに四苦八苦した結果がこれです。
もしかして全然違う?
ごめんなさい、投稿早まった。 上のはswichで設定した分です。
>>209 そういう感じにフォロワーが色々いじってパラメータ変動させられるbotは面白いかもね。
ただしいたずらで無茶苦茶機嫌悪くさせたり病気にもできそうなのと
何よりその手の育成システムはアイデアとプログラムが割りと手間だな。
>>271 えっ!?
switch(true){
case ($now_g > '2') && ($now_g < '7') :
$plist = $mes['smoning'];
break;
case ($now_g > '8') && ($now_g < '10') :
$plist = $mes['moning'];
break;
case ($now_g > '11') && ($now_g < '15') :
$plist = $mes['afternoon'];
break;
case ($now_g > '16') && ($now_g < '20') :
$plist = $mes['snight'];
break;
case ($now_g > '20') && ($now_g < '1') :
$plist = $mes['night'];
break;
default :
$plist = $mes['other'];
break;
};
swichでここまでやるのは合ってますよね…?
その時間帯の属性を発言の部分に埋め込もうとしてこうなりました。
だいぶ間違ってますか?orz
やりたいことは if($plist == $mes['night']){ なんじゃない?
>>273 ありがとうございます!正解は==なんですね…
早速=の数を直してみたんですが、やっぱり時間設定に反応してくれません。
if($plist == $mes['night']){はもちろん、if (($now_g == '3') or ($now_g == '4') ){ でも試してみたりしたのですが、完全にスルーです。
$now_g = date('G');も埋め込んであるんですが…なんで反応してくれないのかさっぱりです…
とりあえずどの段階で変数が想定外の値になってるか確認してみたら?
276 :
274 :2009/11/04(水) 07:17:07 ID:???
>>275 swichはどうやっても反応しないので、諦めていろいろ試行錯誤してたらやっと反応してくれた!!
if($plist == $mes['night']){ の代わりに if(($now_g >= '10') && ($now_g <= '17')){ を個別に指定してみたらできましたー!
結局反応しなかった理由はよくわかんないけど、<= じゃなくて < になってたのも原因のひとつみたたいでした。
アドバイスがなかったら絶対途中でめげてた。聞いてくれた方ありがとうございました!
botはシステム自体はそんな難しくはないけど 多様性とか面白さとかのアイデア方面がなかなかいいのが思いつかないな。
>>277 そうなんだよなあ。ヘタに@に対して定型文返してくるbotより、
単なるRSS垂れ流しの方がずっと有用だったりする現実。
銀さんのところのをコピペしてやってみてるんですが、 bot.phpにアクセスすると Warning: preg_match() [function.preg-match]: Unknown modifier '[' in 略/Twitter.php on line 503 Warning: preg_match() [function.preg-match]: Unknown modifier '[' in 略/Twitter.php on line 333 ERROR というのが出るんだけど何がおかしいのかわからないです Twitter.phpは23行目をConnector.phpのフルパスに書き換えたのと、 501行目の「var_dump($line);」をコメントアウトした意外弄ってないんですが… 超初心者なので最初phaさんのやつでやってたんですが 何をどう頑張っても改行されなくて 銀さんの方で作ることにしたんですがなかなかうまく行かないです
コメントアウトのつもりが先頭に/1つしかないとかじゃないの。 正規表現でエラー出るってことはそーゆーことじゃないの。 ていうかああしたとかこうしたとか素人が言うよりは そのいじった行をそのままコピペしたほうがわかる。
>>279 ちゃんとコピペできていないか、実行側にちゃんと送信できていないに1票。
>何がおかしいのかわからないです
まず検索すれば分かると思うけど、Modifierってのは修飾子のこと。
↓マニュアルのURLにも出てくる。
ttp://jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php でもって「Unknown modifier '['」ってのは「知らない修飾子'['がある」と、
親切に教えてくれてるわけだ。教えられた側が理解できているかは別として。
つまりこの場合、PHPが「(構文に沿えば)修飾子があるはずの場所に、
修飾子でない文字があるのはおかしい」と指摘しているので、
まず最初にその付近を見直すのが定石。
なんも反応ないってことは大体あってたのかな。
サーバーがsafe_modeだとなんでダメなの?
279です。
>>280 ,281
ご指摘頂いた箇所を見てみたんですが、コメントアウトの//もあってたし
エラーの出てた行はいじってないしで??となっていたんですが
@PAGEのファイルの編集画面で見てみるとUTF-8で転送されてなかったみたいで
何ヵ所か文字化けしてしまっていたのが原因だった様です…すみません
その辺設定出来るエディタ使ってたのに何故という感じですが
(miで編集、Fetchで転送)
とりあえず、なんとかなりそうです
ありがとうございました!
規制中でケータイからなので読み辛かったら申し訳ないです
「○○って言って」ってリプライされた時に○○の部分だけ返すのってどうやるの phaさんのスクリプト使って出来る?
>>285 reply_pattern.phpに
"○○って言って"=> array(
"○○"
),
でよくね?
いや、そういうことではなくて○○の部分は相手が言った言葉によって変えたいんだ 一部分だけ相手の発言を引用するというか
できるけど処理がややこしくなるから別物になっちまうな。
@aaaの発言: @bot AAAって言って @botの発言: @aaa AAA ってこと?
reply_pattern.phpに "復唱"=> array( "{echo}" ), って入れといて、reply_random.php側で reply_pattern.phpから返答文字列を取得してからtwitterに投稿するまでの間の処理にswitch〜case(綴り合ってる?)か何か仕込んで、 もし返答文が{echo}だったらという条件判断をさせて、 そこで相手からのリプライの「から」までの間を抜き出してその前後に「復唱します、(抜き出した言葉)ですね」みたいに体裁整えて@とかidとかくっつけて返信、になるかなー ややこしいかもしれないけどできなくはないはず 携帯からなんでコレが限界
>>290 ごめん忘れてた
「○○」を復唱して ←こんな形式でリプしてもらうとして、ね
鍵括弧でくくってる事と復唱って言葉がポイントってことで
ある程度の早さで返事することになるとその頻度でTL取得することになるからAPI制限との勝負になるとこもネック
8bitさんの好感度スクリプトを見つけたんだがいまいち分からない。 調べてみても、使い方のヒントになるものは何も… 携帯からなのでURL貼れなくて申し訳ない。
何が分からないのか言ってくれないとニントモカントモ
>>294 なんでそこの作者さんがサポートをやめたのか書いてあるだろ。もう一回読んで来い。
phaさんとこ見てても思うけどマジで初心者多いな。
ほぼ全レスのphaさんすげえ。
>>296 サポやめたくなるのもわかるんだけど
キレてる事をblogに書くのはどうかとも思ったw
あそこのリプライから発言を引用するスクリプト、 ユーザIDとパスワード以外弄ってないのに動作しないんだけど 質問受け付けてないからどうにもならんかった
はじめて見たけど、中身かなり親切に書いてあるじゃん…
>>298 出たエラーでググったりすればなんとなく見えてくるんじゃないか?
294ですが好感度スクリプトについては説明がないんですよ。 txtには何を入れたらいいのかとか… 試しにサーバーに上げてPHPの方に書いたキーワードをpostしてから、サーバーにアクセスしてみたんだけど空リプライが来るだけ。 サーバーにアクセスしなければ何も動きはないです。
大した量じゃないんだからコードくらい追えよ
>>300 入れてるよ
そのエントリで同じ質問してる人がいたけど結局解決できなかった
スレチかもしれないがWebcronって月額いくらくらいかかる? フォロワー300で、最低でも5分毎に実行させたいんだが…
>>304 どうせ金払うならちょっといいレンタルサーバーでも借りた方が良くないか。
月500〜1000円代からでもcronやPHP5やMySQLが使えるところはあるわけだし。
とはいえサイト持ってないなら宝の持ち腐れだろうし、やっぱ人によるかも。
逆に言えばサイト運営してて、尚且つ何か高度なもん設置したいものがあるのなら、
ちょっといいサーバー借りた方がトータルで見ればいい気はする。
>>304 自宅に24時間起動&ネット接続させられるマシンがあるならそれでスクリプトを動かしてもいいかも
自分はcygwin+cron+w3mでbot動かしてる
307 :
304 :2009/11/10(火) 00:56:46 ID:???
アドバイスありがとう まさにサイト持ってない持ち腐れする人種なんで、レンタルサーバーは悩んでたんだ 自宅PCも不安定だし、コーヒー代我慢してWebcronのお世話になることにするよ 月額が不安だが…
ソース読めないし全然わかんないって人はBOT作る前に最低限、 PHPスレなりその初心者質問スレなり見たほうがいいと思うんだ。 サポセンとは違うんだし。
>>301 わからんかったらtxtはそのまま上げろと書いてなかったっけ?
うちは普通に動いてるよ
309 ありがとう。 上げなおしたら普通に動きました。
>>304 お試し期間で様子見してみたら?
お試し中でも使用量出るし、一週間で消費したクレジット*4すれば大体の目安はつくと思う
>>304 5分に一回なら月に150円くらいだった記憶。確信は無いが。
313 :
304 :2009/11/11(水) 20:56:33 ID:???
ありがとう。お試し始めてみた 150ならサーバー借りるより全然お得だな
特定の語句を含む発言をRTするBOTのRTが、フォロワーのタイムラインに表示されなくなった・・・
>>313 同じ事気になってた。
こっちはお試し期間中に色々試す暇がなくてどうせ安いからとクレカで購入してみたが
消費量チェックする度にチマチマ増えてるんで何か焦るw
五分に一回でもフォロワ300人は怖いよね、リプライの量が。
cron-jobが使えたらな。
ファイル大きいとか失敗ミャハ☆とかばかりでまともに動いてくれないんだ。俺の日頃の行いが悪いんかな。
ばずったーから単語を持ってくるのってどうやんの?
スクレイピングしろ
>>318 ・HTTP_Clientが必要
・for文消して$iを固定で1にする
てか聞きたいならやってみて出たエラーくらい書きなさいな
phaさんのスクリプトを使っています。 reply_random.php+reply_random.phpを利用、で 誰かに@を貰い、反応する単語がある場合に限り 2分後にreply_random.phpから文章をランダムに返し… さらに8分後(=計10分後)にreply_random.phpから文章を ランダムに返す事ようにしたい(1回のpostに対して、時間差で2回replyさせる)、 のですが、ヒントを頂けないでしょうか? やはりスクリプトと根本から弄らないと無理でしょうか?
a
>>320 PHPの書き方の問題なの?それともアルゴリズムの問題?
>>320 自分ならこうする、という参考意見だと思って読んでね
前提条件として
4.txt(2×4回=8分後の処理で時間差リプライが行われる発言を記録するためのファイル)
3.txt(2×3回=6分後の以下同文)
2.txt(2×2回=4分後の以下同文)
1.txt(2×1回=2分後の以下同文)
0.txt(2×0回=今回の以下同文)
と言うファイルを用意して全部書き込み可能なパーミッションにしておく
reply_random.phpは二分おきに起動される
(続く)
続き
--------
そんでreply_random.phpにこんな処理を追加する
0.txtに記録された発言に対して二回目のリプライ処理を行う
0.txtの中身を空にする
1.txtの中身を0.txtにそっくり移し変える
2.txtの中身を1.txtに以下略
3.txtの中身を2.txtに以下略
4.txtの中身を3.txtに以下略
4.txtの中身を空にしておく
>>290 を参考に
特定の単語に対しては特定の処理をさせるようにして、
特定の単語が含まれるリプライを受け取った場合はまず一回目のリプライを返した後で
4.txtに今回返したリプライのユーザー名(@の後につける奴ね→$replies2[$i]["screen_name"])と
メッセージID(in_reply_to_status_idとして必要→$replies2[$i]["id"])と後必要なら名前($replies2[$i]["name"])とか書き込む
(一行ずつ項目ごとに半角カンマとかで区切って)
これで出来るような気はする。だれかもっと詳しい人いたら突っ込みとか入れてほしい。
ただ受け取るリプライの数が多かったりしたらファイル壊れるんじゃ、とかそういうのが気になる、その辺は自分も詳しくないんでパス
だれかもっと詳しい人いたら突っ込みとか入れてほしい。
必ずローカルでテストしてからにしてね
がんばってね
2個モジュールをおいて各の自動実行間隔を2分と8分にすればいいだけ
もうちょっと汎用的に作ろうよ
327 :
320 :2009/11/16(月) 18:31:33 ID:???
>>323 さん、
>>325 さん、ありがとうございます。
自分のやりたい事は
>>325 の方法で出来そうなので、
試してみたいと思います。有り難うございました!
>>319 とりあえずHTTP_ClientっていうのをDLしてServices_Twitterと同じ要領でbotのサーバーに入れてみた
で、
>>318 をコピペして動かそうとしたがエラー出ないしpostもされなかった
エラー出せ
いつもいつもエラーが出るって言う初心者なんでそのエラーメッセ書かないかな。
自分がわからない文章に意味があるとは思えないからだろうねえ
半自動フォローでbotがフォロー返す時に「フォローしました」のメッセージをつけたいんですが、 どう書き変えたらいいんでしょうか? ソースはこちらを使わせて頂こうと思っています tp://dream-aquarium.net/twitter/sample/source.php?twetterFollow.php よろしくお願いします
Postごとにアイコンを変えるってのをしたいんだけどどうすればいい? 例えば喜のPostのときは喜んだアイコン、怒のPostのときは怒ったアイコンって感じで
Twitterにそんな機能あんの? 変えるのはやってできないことはないと思うけど、それだと喜のあとに怒のpostしたら結局怒アイコンになるんじゃ
>>336 仕様書見る限りupdate_profile_image使えばいいっぽいんだけどどうすればいいのかわからなくて
喜怒哀楽は例であって作りたいのはある作品のキャラごったにbotを作りたいんだ
その台詞を言ったキャラのアイコンでPostやリプライを送る。どんなキャラが出てくるのかはランダムで
いやだから最後に送ったアイコンが全ての発言に付加されるのでは?
ああ、過去の発言も全部その瞬間にアイコンが変わっちゃうんだな Post間隔長いのならわざわざ過去の見ないだろうがリプライとかは無理か
発言ごとにアイコンを保持はできんから
>>336 だし
クライアントによってはアイコンをキャッシュするから変えてもすぐには反映されんかもしれん。
こないだ携帯の白いお父さんが毎回アイコン変えてたけど 同じキャラがキョロキョロするとかならかわいいと思った
>>336 喜怒哀楽の感情ごとにアカウントとってリストで読ませる
php勉強しれ。
phaさんのプログラム使わせてもらってるんだけど、 ランダムリプライと、指定した単語にリプライの両方使ってて、 片方のBOTは反応単語以外のリプライを受け取ると ちゃんとランダムリプライしてくれるんだが、 片方は反応単語以外のリプライを受け取ると 必ず空リプライしてしまうんだがなんでだろう? ちなみに、おかしいと思って、きちんと動作する方の プログラムまるまるコピペしてユーザー名書き換えて アップロードしてみたり、Services等その他諸々の フォルダも全部アップロードし直したりしたけどだめだった…
何を言っているのか分からない
348 :
346 :2009/11/23(月) 22:41:32 ID:???
ごめん、つまり空リプライの原因は何なのかって事が聞きたかった。 今自分で読み返してもなに言ってるか分からなかった
変数の中身でも出力させてみたら?
>>345 そっちがどういう風に送ってるのか知らんけど
先頭に@名前 ついてないと無効って仕様はあるみたいだが。
>>348 自分のフォロワーに同じことで悩んでる人がいたなw
その人もbotを複数作ってて、ある一つのbotが空リプライするって、同じこと呟いてたけど、まさか…?w
それはともかく、自分のbotも反応ワード以外のリプライを貰うと空のリプライしてたんだけど、textのデータを弄ったら直ったよ。
サーバにアップしてあるtextのファイルがあるでしょ?
どうやらphaさんのは、反応ワード以外のリプライを貰うと、そのtextファイルに書いてあることをリプライするプログラムらしいので、そのtextファイルに、分からなかった場合のセリフを書き込めば良いってわけ。
そうすれば空のリプライしなくなると思う。
352 :
345 :2009/11/24(火) 09:40:53 ID:???
>>350 「@名前 」つけて名前とIDが違うと付与されない的なのは把握してるつもりなんだけどね、なんかうまくいかなくて・・・
やり方が間違ってるのかなぁ
ちなみにpost部分はこんな感じにしてます
$req = $to->OAuthRequest("
https://twitter.com/statuses/update.xml ",array("status"=>$aaa, "in_reply_to_status_id"=>$bbb), "POST");
$aaaは「@名前 返信内容」
$bbbはステータスID
俺恥ずかしいこと聞いてそうだな・・・
>>348 tw.txtの中身が空であるか、改行して空白の行がありませんか?
またサーバーの方で確認して文字コードはUTF-8、改行コードはLFになっていますか?
BOT作ってどうすんの? 作る価値ねーしwwwwwwwwwwwww
>>354 そう思うんならそうなんだろう。
お前ん中ではな。
AA略
356 :
nobodyさん :2009/11/25(水) 03:17:51 ID:6oiYyRxa
cron-job.orgで「cronファイルが大きい」って言われた。 ググっても解決策ゼロ。 誰か助けてください。。。
cronファイルを小さくしろ
358 :
nobodyさん :2009/11/25(水) 03:27:51 ID:6oiYyRxa
>>357 どうやって?
もう削るとこないです・・・
バックスペースキー
360 :
nobodyさん :2009/11/25(水) 03:31:21 ID:6oiYyRxa
>>359 それってどういう意味ですか?
もう消す場所ないです;;;
361 :
nobodyさん :2009/11/25(水) 03:35:18 ID:6oiYyRxa
こんどはURLが違うって言われた・・・あってるのに…
GoogleAppEngineでcron動かしてる人いたら教えて 2分間隔でリプライ返すbot 動かしてるんだけど、 cron-job不安定だったからGAEに移行。 java使ってGAEでcron(2分おきに設定) 動かすまではうまくいったんだが、 プロジェクトをデプロイして しばらくたつとリプライを拾わなくなる。 デプロイ直後は普通に拾うんだが… AppEngine経由でPHPのページにアクセスすると 直前にリプライ飛ばしてても 「2分以内の@はありません」ってでる。 直接アクセスするかcronjob経由でPHP叩けば、 ちゃんとリプライ拾うんだけど…。 バージョン変えてデプロイし直してもうまくいかない。 何がおかしいんだろうか…
もうちょっと要点をまとめてくれ。
364 :
362 :2009/11/25(水) 08:26:52 ID:???
わかりづらくてすまん。 botにリプライ飛ばしたとき ・直接PHPページにアクセスするとリプライ拾える ・GAE経由だとリプライ拾えない。(デプロイ直後は拾えるがそのうちダメになる) ・GAEのcronjobにはエラーなし ってことなんだ…
365 :
nobodyさん :2009/11/25(水) 14:21:04 ID:w36IBMdL
エラーメッセージくらい見れよ。はぁ・・・。
大方全角スペースが入ってるとかだろ
368 :
nobodyさん :2009/11/25(水) 14:24:12 ID:w36IBMdL
どうやって見るの?
エラーの見方も分からんでプログラムやってんの?
まずはそれを設定したhttpdのエラーログ見ろよ
cron-job.org使ってつまずいてる人が多いけど、cron-job.orgはマトモに使えるレベルの安定性じゃないと思う。 確かに無料だけどcron-job.orgの設定で毎日毎日苦労してるんなら 月100円くらい出してwebcron.orgを使うことを個人的にはお勧めしたい。動作は安定してるよ。
クレカの審査落ちるから使えないんだよ!!
まず働けよ
webcronが新しくなったとたん全然動かなくなったんだけど 同じ症状の人います?
>>356 ファイル大きいって言われてもちゃんと動くぞ。
動かないならソースがおかしいかも。エラーは出なくてもどっかしら
汚いソースの部分があるんじゃないかと。
それより勝手にNeinになる仕様どうにかしてくれ。
376 :
nobodyさん :2009/11/28(土) 07:10:32 ID:M2/cHCZP
phaさんのを使わせてもらってて、replay_random.phpが上手く動かないから自分でソース読めるようになりたいんだけど replay_random.phpの内容、↓これで解釈あってるの? //コメントは自分が書いたものです. //リプライの文章をつくる for($i=0;$i < count($replies2);$i++){ //リプライの回数(replies2)分、以下の処理を繰り返す $text = ""; //メッセージ用の変数を宣言 if($useReplyPattern === TRUE){//特定の単語に反応させたいときはこの処理を行う require_once($replyPatternFile);//先にreplyPatternFileで定義したファイルを読み込む foreach($reply_pattern as $pattern => $res){//配列$reply_patternの中身について端から以下の処理を行う。そのとき一個づつ$patternに代入していく $pattern = preg_replace("@¥@@","¥@",$pattern);//$patternの中に"@¥@@"が有ったら"¥@"に変換?? if(preg_match("@".$pattern."@",$replies2[$i]["text"]) === 1){ //もしも、 "@".$pattern."@"っていうのが $replies2[$i]["text"]の中に有ったら? $text = $res[array_rand($res)];//$resの中からランダムに選ぶ break;//おしまい } } }
全部確認してくださいじゃなくて具体的に分からないとこを聞け 正規表現を特に聞きたいんでしょ?
//メッセージ用の変数を宣言 というか初期化だな。 //$patternの中に"@?@@"が有ったら"?@"に変換?? なんで@なんて使ってるのか知らんけど左右の@は区切りのはず。 大抵/@/や#@#あたりじゃないんかな。だから@を@に置き換えてる。 他の部分知らんがなんでだろ。
phaさんのスクリプトの1.41使ってるんですが リプライの無限ループを制御する $replyLoopLimit = 3; //何回連続でreplyを返されるとループを中断するかを設定します。 が、効いてないような? サーバーやPHPのバージョンとかに関係あったりするんでしょうか?
380 :
nobodyさん :2009/11/28(土) 20:18:57 ID:tYVMHZ37
>376 なんか急にreplay_random.phpが動かなくなったよね… サーバー入れ替えしただけ(中身同じ)なのに、リプ返さなくなった。 ファイルマネージャからアクセスすると「送られたメッセージはない」って出るのに、Twitterから送ると真っ白。 自分だけかと思ったけれど何人もいるらしいから、クライアントとか関わるのかな。 >379 自分もそう。4で入れてるのに1回しか返さないわ…
ここのスレの人はみんなphaさんとこの使ってんの?
え?
ランダムポスト・@もらったあとのランダム&パターンリプライ→phaさんのとこの TL上の単語に反応させてリプライ→プログラミングを始める10の理由からコピペ ↑のに加えてどのポストに反応したかの紐付け→銀さんのBOTのin_reply_to_status_idの記事から 今のとここんな感じ
>>381 私はあそこのは使ってない。
確かにphaさんのはカスタマイズしやすくて良いんだけど、自分は「プログラミングを始める〜」のとこで公開されてるソースを改造して使ってる。
TLに反応するプログラムも、リプライも定時発言のも全てそこので事足りる気がする。
一からコード書いてる俺は異端なのか? 全部自分で書いた方が楽しいじゃん まぁServices_Twitterは使わせてもらってるがなー
自分はまだ始めたばっかりだからメインでphaさんの使わせてもらってるよ どういう流れなのかコメントがわかりやすく付けられてるし サブで時間帯別のと好感度のものを組み合わせてるが そっちはどこ改造したらいいのかもまだわからんw
>>274 の、時間別に返事が違うっていうソースを入れたいんですけど、
自分は今phaさんの配布しているリプライソースを使っています。
phaさんの配布ソースのどの部分に入れたらいいでしょうか!
リプライパターンphpとも組み合わせたい。
//リプライパターンと照合する
if($useReplyPattern === TRUE){
require_once($replyPatternFile); 〜(略)
の前?それとも後?全然場所が違いますか。
それとも↑のソースも色々変えないと出来ないですか?
プログラミングも何もかも初心者なので色々と試したのですがうまくいきません。
改変箇所等教えていただきたいです!
参考にしたのは
ttp://d.hatena.ne.jp/ouixxx/20091006 の「時間帯によって反応を変える」って記事
>>362 GAEはサーバーと距離が短くなくちゃタイムアウトしてしまうらしい?
オススメは@pages。1分間隔でまわせるみたいです。
自分はまだ使ってませんがいずれ入れたい!
有料でもいいけど一番安定してBOTが動く鯖ってどこだろう?
>>387 どこに入れればいいかじゃなくて、入れて動かしてみて、うまくいかなかったときに聞いたほうが
答えをもらえる確率は上がると思うよ
ここはphaさんソースの改造方法について教える場所ではないからね
>>381 自作でちょびちょびいじりながらやってる。
ていうかここってBOT製作支援スレであって、配布BOT利用支援スレじゃないと思うのよね。
まあわかる範囲では質問にも答えるけど。
しかしなるべくメンテフリーで面白いBOTってのはなかなかうまいこといかんね。
botが全て沈黙しているのは自分だけでいいよ… 昨日まではちゃんと動いてたのにいきなり無言になりおった
>>392 サーバーの仕様が変わったとかcronファイルが壊れた…とか?
394 :
392 :2009/11/30(月) 21:46:49 ID:???
>>393 ありがとう。
とりあえずphaさんの使用してて、ファイル全入れ替え+別鯖(さくらから@pages)に移動して実行してるのに、同じ状況。
ほんとにいきなりリプライしなくなったので原因がさっぱりわからない。
もし同じ症状のひとがいたらと思ったけれど、いないのかな?
API規制ってアカウントごと?それともIP?
@pagesは反応にぶいよ cronが動いててもすぐ接続がタイムアウトしちゃうらしい さくらのBOTに比べて格段に反応が鈍い
無料だからなぁ文句はいえんだろ
cron-job.orgが不安定すぎるのでGoogleのAppEngine試してる 大体は安定して叩いてくれてるけど、 実行時間が毎日1分〜2分ずつくらい遅れてきてるのが気になる
プログラム自体を変えたら、cron-jobでも全然気にならなくなったなぁ。 cronが度々アクセスに失敗しても、貰ったリプライには全レスするし、もうこれでいいやってなってる。
自分もAppEngine試してるけど半日で止まるわー 8つ回してるけど1つだけ何度上げても止まる 鯖はさくらで中身全部同じなのにわけわからん… GAE使ってる人はJAVAとPythonどっちでやってる?
403 :
399 :2009/12/04(金) 11:17:32 ID:???
>>402 遅れはするが止まるまではいかないぞ?
実行自体はほぼ安定してるし…ちなみにJAVA
cron-job.orgを使ってるんだが、ドイツの日付が変わった瞬間から設定が勝手にNeinになる このスレ見てると同じような不具合多いみたいだし、 webcronとやらに移ったほうがよさそうだね ただ、自分のクレジットカード作れる年じゃないから またカーチャンに個人情報洩れるんじゃないのって渋られそうだw
ドイツの日付が今日になったあたりからcron-job.orgに繋がらなくなった(DNSエラー)んだけど…ドメインの期限切れか何かかな。
俺もGoogleAppEngin使ってるけど安定してるよ 止まることも遅れることも、今のところない ちなみにPHP
Googleのって、Macだと無理っぽい? botのためにブートでWindowsを立ち上げるのもなんだかな…。
GoogleAppEngine bot twitter phpでぐぐったら 一から十までcronの動かし方を説明してくれてるページをみつけて歓喜したんだが 肝心のソース説明画像がキャッシュに残っていなかった…orz
さくら使ってる人ってcronもさくらで動かしてる? 安定させたくて@pagesからさくらに移ったんだけど負荷がかかるからってcron止められてしまった 結局cron-job.org使ってる
>>408 画像じゃなくてテキストで説明書いてくれてるところがあるだろ
もうちっとググれ
GAEに関してはモノクロ二階調ってところがわかりやすかったらしいが今は見れなくなってるな どうして消したんだろう
ホントだ、記事消えてるね… たしか消えた記事内で参考にしたと書かれていたブログ記事の方は まだ残っているから、そっちを探せば出来るとは思うけど
413 :
402 :2009/12/04(金) 20:39:49 ID:???
>402だが 今日見直したら止まってると思われた奴はまた動いていた GAEはタイムアウトのタイミングがシビアなのかもしれん… >411のサイト見て作ったのでJAVAで動かしてたが 何か問題でもあったのかな
噂の参考サイトがなくなってGAEの動かし方が分からないぞ
>>413 GAEって30秒でタイムアウトじゃなかったっけ、それにひっかかってるとか?
質問厨に疲弊して消したらしいぞ。>モノクロ二階調 今日の記事に書いてあった。
モノクロ2階調さんとこが記事消したのは「サポートしないよ」って書いてるのに botのDMとコメント欄に問い合わせ多かったからだってさ。 再掲載する予定も今のところ無いみたいね >先日までこちらのブログでGoogleAppEngineのcronjobを使ったbot管理の方法を >記事にしていましたが、私自身のtwitterアカウントが非公開の為 >当方が管理しているbotにDMを送ってこられる方、サポートをしていないと >申し上げているにも関わらずコメント(承認制にしてありました)でのお問い合わせが多く >なんかもうバッタンしてしまいました… >仕事で忙しいせいもあるので、自分に余裕がないのが悪いとは思いますが… >現状記事の再掲載は未定です。良い解説記事が見つかるのを祈ってます。 >その際はそちらを管理されている方の負担にならないよう、 >「人事を尽くす」努力をお願いします。(私が言う事ではありませんが…)
質問厨はどこにいっても害しか産まないのか
地道にやるしかないかなぁ
>>415-416 情報ありがとう
cron-job.orgが勝手にneinになるのってやっぱ向こうが日付変わる頃だよね… ところで勝手にneinになるのとjaのままのとがあるんだけど何か条件あるのかな 今9個job設定しててそのうちの2個はいつもjaのままなんだけど post内容が違うだけでほぼ同じソースなんだよね… ファイルサイズもそんなに重くない…というかneinになっちゃうやつのほうが軽い奴もある あと勝手にneinなるのはfehlerhaftも出やすいみたい…
botの作り方系のブログは、どこも 「○○行目でエラーが出るんですけどどこがおかしいのか分かりません」 ↑どんなエラーとも書いていない。結局全角スペースが入っていたとかそういう問題 「○○を書き換えて、って書いてありますが場所がわかりません」 ↑その記述は一箇所しかないから探せば見つかる とかそういう質問山盛りだからな…モノクロ二階調さんのところは本当にお疲れ様です、としか…
ツリー型の質問掲示板のタイトルに「教えてください」ってのが10年前からあったしな。 あとよくわかってないのに自分の解釈をやたら書く質問者も。 相手はエスパーじゃないんだから教えて欲しいことを伝える努力は必要だわな。
とりあえずGAEでcron動かすのやってみよう。。。
>>418 基準はよくわからんが、やっぱり無料だし文句は言えないところか。
ただ、neinになるとかの条件はヒントだけでも載せてくれると助かるね
>>419-420 質問するにも初心者(笑)なのが多いのか。
ググり方も分からないやつなのかな
てかたまに偉そうなやついるよね、上から目線の。
教わらないとわからないって人はそれなりの割合いる。 エラーメッセージでぐぐれば問題を絞れるはずだが、 ぐーぐる先生の資料集めとしての使い方が思いつかない人はそれなりの数いる。 WikiPediaみたいにまとまってたり聞いたらすぐ答えてくれるようなとこしか行かないのだろうし。
>>416 しかしbotの方にDM送るなんてひどいな
なに考えてんだ
自分もbot作ろうとしてるのにそのbotに関係ないメール送られて気持ちとか考えないのかね
自分も最初は初心者だったが… ある程度は自分で調べないと何かあった時に対処できんから恐いわ phaさんのしたらばのは初心者(笑)ホイホイにならないことを祈る
>>424 それマジ心配してる。でも今もう既にそうなりつつあるような…。
phaさんのプログラム以外の質問とか、PHPと全然関係ない質問多い気がする。
あまりに初心者すぎな質問であふれかえってphaさんが
疲れてしまってサポート放棄されたり、
最悪配布を中止されたりしてしまうんじゃないかと不安だ……。
external entityのロードに失敗してる
>>427 そうですね、failed to load external entity とありますからね。
これは、どのように修正すれば解決するでしょうか?
22行目の処理でなんか失敗してるんでしょ? サイトから情報引っ張ってくるんだったら、サイトの読み込みに失敗したとか、searchの条件に合わないとか そんな感じなんじゃ
ぐぐれよ
googleのcronがうまく動かない\(^o^)/ 某サイト様のをまんまコピペしたんですけど、jobをみると404エラーになるんです <cronentries> <cron> <url>/crontest</url> <description>crontest the run every 2 minutes</description> <schedule>every 2 minutes</schedule> <timezone>Asia/Tokyo</timezone> </cron> </cronentries> のurlエリアはphpのアドレスではないんですよね?
>>432 お前さんがGAEで作った領域のアドレス入れるべし
>>431 ぐぐってわからなかったのでここに書きました。
設定ファイルから反応する語句リストを読み込んで正規表現でマッチングさせて指定した関数を呼び出すか対応するセリフリストを呼び出してランダムに一つ発言させるコードならさっき出来上がった(バグ取りなう)けど、必要なら公開しても良いよ。@PHP
>>430 22行目だけ動かしてみたんだけど、うちの環境でも同じエラーになった
なんだろうなぁ
>>435 そういうときは「必要じゃないかもしれないけどうpする」のが2ちゃんのしきたりだろ
しきたり守れよ
>>437 ちょっと別の検索サービスを試してみました。
$xml = simplexml_load_file('
http://twiple.jp/status/search.atom?s=1&q= '.$search_word.'&lang=ja');
これで例のエラーは出なくなりました。
>>429 さんの回答で正解のようです。
が、今度は何のエラーも表示されないのですが、ちゃんと動いているわけでも
ないようなのです。まだ他におかしいところがあるのか…
$followed と $now_time が定義されていないので、
$followed = array();
$now_time = time();
を定義してみましたが、状況は変わらず… 的外れだったようです。
439 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/06(日) 13:17:05 ID:I4htWoWi
>>437 ご指摘ありがとうございます。
申し訳ないのですが、まだ公開できるほどバグ取りが進んでいません。
今日中には公開できるようにしますのでしばしお待ちください。
セリフリストの文法ですが、
@.*バルス!.*=バルス
とした場合は正規表現で.*バルス!.*に反応しセリフファイル「バルス」を読み込みランダム一行をリプライします。
~.*爆発しろ=bakuhatsu
の場合は関数「bakuhatsu」を呼び出し発言を第一引数とします。
関数は個別にプラグインファイルで対応しますので根幹のシステムへの変更は行われません。
=が入る発言に対してバグがあるので=が入る発言への対応を検討中です。
それだけですが現在公開できるように早急にバグ取り、公開用の(既存の)設定クリーン中です。本当に申し訳御座いません。
トリップも付けていませんでした。すみません。
元来自分用に開発していたもので…
>>433 作った領域ってことは
http://あいでぃー.appspot.com/ の
http://あいでぃー.appspot.com/なんかつくったやつ をhからお尻まで全部ってことですよね?
上のも下の「なんかつくったやつ」のアドレスもどっちもいれてうpしてみたんですが、
やっぱり404エラー…
javaの方の
package testcron;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class TestcronServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
try {
URL url = new URL("phpのあどれす");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
resp.getWriter().println(line);
}
reader.close();
} catch (MalformedURLException e) {
resp.getWriter().println("URL faild : " + e);
} catch (IOException e) {
resp.getWriter().println("URL faild : " + e);
} } }
が間違ってるんでしょうか。
>>437 XMLの取得自体はできてるみたいだけどね
print $xml->entry[1]->summary;
みたいなので一応見れるし…
>>439 そこは「しきたり(笑)」ですませて欲しかったよ!
必要としてる人もいると思うので、公開できるときに公開してくれればいいと思うお( ^ω^)
>>440 ○○○Servlet.javaって作ってるよね?
それの ○○○ を書くはず。↓
<cronentries>
<cron>
<url>/○○○</url>
<description>crontest the run every 2 minutes</description>
<schedule>every 2 minutes</schedule>
<timezone>Asia/Tokyo</timezone>
</cron>
</cronentries>
関数呼び出し手順に変更です。 reply.listに~<正規表現>と記述した場合、関数に渡される文字列は@IDを除いた単純発言部分となります。 プラグインファイルを作りたい香具師は準備願います。 おまけにどう読むのプラグインを添付します。(requires nkf,kakasi)ご活用くだしあ。 補足として$prof[]でボットのプロフィールにアクセスします。(別途ファイルを用意してあります) $conf[]でついった関連設定ファイル(以下同) 公開用ぺーじの設計に手間食ったりしてます。しばしお待ちを。
何度も申し訳ないですが、プラグインファイル(作ってくれそうにないが)の使用を規定します。 1. <?php で始まり ?> で終了すること。 2.呼び出される関数を保持すること。呼び出される関数が主処理関数であること。 3.受け取った文字列を処理する場合(特に外部ファイル、プログラムへの受け渡しをする場合)h(文字列);でエスケープすること。 4.$debugはデバッグスイッチです。d(変数);でダンプ可能ですので積極的なデータ表示をお願いします。 だいたいこのくらいでしょうか。呼び出し元の@IDは$idで取得可能です。 その他、プラグインファイルは/AI/に保存願います。利用の際は/conf/plugins.listに loadplugin('hogehogewaros.plg');のように拡張子込みで登録お願いします。 人格?の利用を前提としているので初期設定スクリプトを書いています。お待ちください。
>>441 うおおおおできました!ありがとうございました!
プログラム開くと○○○が先頭大文字になってて
大文字のままいれたらだめでしたが
小文字にしたら動きました!
って前にこれ一度もう試したんですがその時は404エラーでたんですよね…なんでエラーだったんでしょうか
まあとにかく動いて嬉しいです!
441さまも433さまもありがとうございました!
ついでにもう一つおたずねしてもいいでしょうか
一つのプログラムで複数のphpを動かす場合
try {
URL url = new URL("phpアド");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
resp.getWriter().println(line);
}
の後ろに同じ文を重ねていけばいいんでしょうか
>>440 自分もそのコードが載ってるブログを参考に作ってるんだが、
ウェブ上で動いてるのを確認する方法として紹介されている
http://設定したApplication id.appspot.com/設定したプロジェクト名
にアクセスするとxmlコードが剥き出しで表示されてしまう
これは何らかのミスがあるということなのかな…?
成功した場合はどのように表示されるのだろうか
遅れています。 圧縮に手間を食っているようです。でき次第公開します。
448 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/07(月) 01:30:55 ID:MdLiWJgY
GAEにデプロイしてcronで定期実行、結果もon time Successなんだけどツイッターには投稿されない
ローカルで開くと404エラー:The requested URL /自分のサイトアドレス/post_random.php was not found on this server.
って出るんだけどphpは他のサーバーにアップしてるんだからthis serverでnot foundなのは当たり前じゃないの?
http://から指定してるのになんでフォルダから開こうとしてるんだろう ソースは
>>440 さんと一緒で
>>440 さんが動いたということはつまりどういうことなのかわからなくなって…きた…
自分でphpのページ開くとちゃんと投稿されるので悪いのはソースなんだと思うけどいくらいじってもさっぱり投稿されず
eclipseで実行すると
com.google.appengine.tools.development.LocalResourceFileServlet doGet
WARNING: No file found for: /favicon.ico
何が悪いのかわかるひと教えてください…ファビコンてURLの横に出るアイコンじゃん…関係あるの…
形態素解析ってみんな何使ってる? Mecab使ってみてるけど他のがよさげならそっちも試してみたいんだけど。
>>448 うぽつ
>>449 よくわからんが、GAEでのcronは某サイト見ながらJAVAでやってるの?
それとも自前?
>>449 GAEでの”/自分のアドレス”ってappengine.google.comで見たときのTitle=eclipseのpackageの名前じゃないか?
eclipseでも同じ名前にしてる?
あとローカルで開くってのがブラウザで開いてるということならブラウザがfaviconを探しにいく
当然favicon見つからず404になる
>>450 Yahoo APIの使ってる。
453 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/07(月) 19:31:13 ID:MdLiWJgY
開発が一段落したので公開中のwikiを載せます。
ttp://knowledge.ddo.jp/ 発展途上なので機能は貧弱ですがプラグインファイルの開発を手伝っていただければ良いソフトになると思います。
次スレがあればテンプレに組み込んでいただけると嬉しいです。
>>453 ごめん全然関係ないけど…土壇場って独壇場じゃね?
phaさんとこちょっと見てて前から不思議だったんだけど あのスクリプトってそんなに環境によって動かないものなのか? 自分もプログラミングなんて全くの素人だがphaさんの使って 無料のサーバーでCron-jobから某サイトを参考にGAEで動かして エラーになったりしても調べてなんとか解決できたし自分で変更もした 自分がたまたま運がよかったのか?
運の問題にしないで原因調べたら?
>>455 >エラーになったりしても調べて
が出来ないんだろう。
環境はIE6です!みたいなこと言ってた人も居たし…。
エラー文読む気ないから丸投げ。
あと本家の鯖の不調と設置の問題の切り分けが難しいのかも。
本体不安定で動かないのかスクリプトかcronか
どれが問題かわからないから丸投げ。
しかし今朝から本家不安定でうちのも不調だわ。
好きに書きゃいんじゃね。 相手が求めてるような楽屋裏話なんてないんだからそういうのがわかりゃ勝手に離れてくさ。
間違えたごめん。
某サイト参考にGAEで動かそうと作っていたんですがtestcronの中にTestcronServlet.javaが何回プロジェクト作り直しても出てこないんですがどうすればいいですか? ファイル作成しようにも調べ方が悪いのか参考になりそうなページ出てこなくて息詰まってますorz
>>461 自分もそれなったけど、
プロジェクト作成時に「Google Web ツールキットを使用」の
チェックを外さなかった、に30ペソで。
463 :
461 :2009/12/08(火) 06:41:40 ID:???
>>462 ありがとうございます!!!
チェック外して作り直したらちゃんと出てきてくれました!!!
チェックを外す、とかの記載ないから忘れやすいは忘れやすいところだな
>>450 何それおいしいの?
ごり押しおいしいれす(^q^)
土壇場(どたんば) 独擅場(どくせんじょう) 真ん中の字は違う。
土壇場(どたんば) 独擅場(どくせんじょう) 独壇場(どくだんじょう) 日本語って難しい
独壇場と独擅場の違い
tp://www.nhk.or.jp/bunken/research/kotoba/kotoba_qq_03070101.html
へえーAA略
GAEでcronがちゃんと動いてるのにリプライ拾わない事が多々ある
@で話しかけてから
Cron Jobsをチェック→on time successだがリプライ返さない・Logs見ても200
http://hogehoge.appspot.com/hogehogeにアクセスすると 指定時間内のリプライないよと言われる
でもブラウザでphpにアクセスするとリプライをちゃんと返す
だが放置してるとちゃんと拾う時もある
もう自分では原因が分からん…
GAEはモノクロ2階調さんのを参考にJAVAで動かしてる
同じソースで作った他の定期ポストは絶好調なんだが
こうしたらいいんではとかあれば教えて下さい
>>467 自分も同じ状況だ
GAEはタイムアウトの判定がシビアだから、
自分の鯖とGAEの距離が長すぎると駄目なのかもって意見をどこかで見た
ちなみに自分はロリポにPHPを置いたときは全くリプライが返ってこず、
@pagesに変えたら五割ぐらい返すようになった
あと、24時間以内に同じ内容は投稿できないからそれに引っ掛かってる可能性もなくはないか?
469 :
467 :2009/12/08(火) 17:39:13 ID:???
>>468 うーん同じ内容の投稿制限は引っ掛かってない筈。リプライの数は割と多めだし
それに同じ内容でも@Aさんと@Bさんに返すのは別投稿扱いだし
リプライ数がスクリプトを重くしてるからか?とも思ったんだが
30分定期ポストの方が長いくらいなのにそっちは成功してる
リプライ回す時間は5分だからそこまで無茶してるとも思えない
この差がわからないんだよなー
どっちも動きが悪かったら鯖が悪いんだと思えるんだけど…
たまにちゃんと返しまくる事もあるからphpも悪くない…筈w
以前cron-jobでやってた時に@pagesが重くてさくらに変更して
今はそのままさくらで使ってるんだが…一度動かない奴だけでも鯖変えてみるよ
ありがとう
今日の午前中くらいまでは正常に動いていたのに 夕方くらいから急にGAEで失敗続きになってしまった・・・ Twitter本家も無関係の人のTLが流れたりしてるみたいだし 何かサーバーの調子が悪いんかな? 他にもGAE使ってて同じような人居る??
ノシ もう全無視よりいいやとcronjobも並行してみたが 結局どっちも動き悪い 閲覧はクライアント使ってるけど昨日くらいからAPIエラーも多発してるし 細かい鯖落ちも頻発してるみたい
GAEでやってる人Dashboardのグラフどうなってる? 30分定期ポストのは0から0.004の間でvvvvvvvvvて感じなんだが 動きの悪い5分のリプライの方は0.004あたりでずっとまっすぐなんだ 時間の幅が大きいからかと思ったが以前テスト用に作った2分定期のはvvvvだった まっすぐなのはずっと処理が終わってないってことなのかね… でもリプも返す時は返すしその時もグラフはまっすぐなんだがw
同じく0〜0.04くらいでVVVVVVだな 昨日はいきなり0.013くらいまでハネ上がった時間帯があったが
cronjob本当に動き悪いな 1時間1回にセットして10時間経過見てたけど1回しか動かない
cron-jobの動きが悪いからWebCron.orgに移行考えてるんだけど 支払いとかではトラブルになった事はない? 海外サービスはその辺りがどうも不安
話を切って悪いんだけど相談させてください。 botが完成してあとはIDを取るだけなんだけど既に他の人が自分と全く同 じbotを作ってた。 でも、その人はIDだけ取っておいてbotは全く動かしていない状態なんだ けど、こういう場合はどうしたらいいんだろう。 気にせず自分のbotを上げていいのかな・・・
>>477 微妙にスレ違いだと思うけど
同人板にTwitterスレあるからそっちで聞いたほうがいいかも
そっちでもたまにbotの話題になってるから。
他の、例えば天気予報や占い等の否キャラbotなら気にしないでいいと思う
ごめん、478の最初のほうは「キャラbotなら」という前提の話しです
>>477 別にいいんじゃないの?
俺もキャラbot作っててその状況なったことあるけど(しかも後者)
別にそのまま気にせずやってるなぁ
キャラbotでも複数あるキャラとかあるし
それぞれに面白みがあればいいんでないかな
>>477 内容ダダ被りとかでなければいいんじゃないの?
自分も某キャラのbot作ってるけど、友人も同じキャラのbot作ってる
性格がだいぶ違う設定になっているのでフォロワーさんは自分の好みの方を
選んでフォローしてる感じ
実際に「○○のbot見つけたけど下ネタが多くて無理、
もうひとつ違うのがあったからこっちフォローした!」っていう呟きも見たしさ
>○○○Servlet.javaって作ってるよね? それの ○○○ を書くはず。↓ <cronentries> <cron> <url>/○○○</url> <description>crontest the run every 2 minutes</description> <schedule>every 2 minutes</schedule> <timezone>Asia/Tokyo</timezone> </cron> </cronentries> <url>/○○○</url> のとこに○○○Servlet.javaの○○○入れて デプロイしてみたらon time Successになるもののツイートできない。 文字化けしてるからコードも見てみたけどUTF-8になってる。 かれこれ5時間ぐらい弄ってるけど何がなんだかさっぱりわからないorz
自鯖の人は少数なのかな
鯖は立ててないけど自前のPCでやってるよ PHPさえインストールしてりゃWSHかなんかで自動実行できるしね
GAEで30分に1回呟くcronを動かしてて、 慣れてきたからリプライにも反応するように新しくphpを用意したんです。 んでもって新しいアプリケーションと2分間隔で回るファイルを作りました。 いざデプロイしたら元の30分の方まで2分間隔で回るようになって、 しかもリプライの方がひとっことも話しません。 何がいけないのか自分にはさっぱりわからないので知恵をお貸しくださいorz
GAEを使わない
動かないって人は本体が最近バグ出てるしよく落ちるし 今は様子見の方がよくないか? 明らかなエラーとかでない限り 今まで動いてたやつも動かなくなったりしてる中で 原因特定するのは難しいと思う
コナミキャラってやばいの?今作ってるのそれなんだが…
そなの?俺コナミキャライパーイフォローしてるが
姉ヶ崎作ってた人がサイトに誘導の上寄付を募ってた?らしい そのコンテンツとかは消された 自分も言われて見にいった口なのでよく知ってる人フォローよろ でもまだbotは消されてないから大丈夫じゃね?
すみません、質問させてください。
Phaさんのサイトを見てbotを作ったんですが、反応しません。
鯖はロリポ、cronはGoogleのエンジンを使ってます。
質問を箇条書きにしてみました。
色々ググってみたけど、途方にくれたのでお知恵を拝借できると助かります。
・Eclipseを使ってアップロードしたんですが、左側のprojectexplorerにある
作ったcronアイコンにバツが付いている。これはどこかで記述ミスをしたものかどうか。
・Google App engineでfavicon.icoがどうのと書かれてます。そのアイコンをまず
どこに設置すればいいのか、そしてapp.yamlは何処に設置するものなのか。
自分で作るのか、作成した元のcronの中に突っ込むのか。そのファイル自体はcronの中には
ありません。
・EclipseでcronServlet.javaの編集の際、プログラムを指定するURLを書くんですが
これは複数のphpファイルを,で区切って
http://から指定して書くものなのか 。
以上です。
よろしくお願いします。どうにも動いてくれないので…
basic auth廃止とな(´・ω・`)
TwitBot Clubってどうなんだろう 手軽でいいとは思うけどGAEからBAN喰らったら閉鎖とか書いてあるから怖い
TwitBot Clubでぐぐってみたら自動bot作成サービスみたいな感じ? こんなんでライトユーザのbot乱発したら最近ただでさえ鯖不調なのにサーバの負担厳しくないかな。
自分がGAEでcron動かすとき参考にした記事にも、 このやり方はBANされるかもって書いてたなあ botのフォロワーが増えてからBANされたら途方に暮れそうだgkbr
ちょっと勉強して自分でプログラム組んだら? cron jobでも全然問題ないぞ。 phaさんとこのに頼ってる人は有料cronに手を出したりGAEでBANされたり大変そうだな。
cron-job、10分ぐらい時間ずれてない?今朝から。 0分にpostさせてるBOTが10〜15分辺りに反応してて。 設定し直したけど直らないんだよなー。
>496 少しずつphp勉強してるんだけどphaさんのスクリプトよりbardothodolさんのcurl使うやり方のが軽いのかな? 自分で一から作る力はまだ全然ないからそれならセリフの生成のところだけ入れ替えて書きかえたい 496は全部自作してるん? phaさんのスクリプトの何が問題なん?
cron job問題ないか? ここ3日ほど経過見てるけど1回しかまともに動いてない 勝手に切られてたりするし駄目だろこれ…
cron-job確かに10分くらいズレてる 昨日なんかは一応稼働するにはしてたみたいだけど 今日はまた失敗続きだ…
>>498 まあ軽いっちゃ軽い。最低限の処理だしな。
でもphaさんとこで使ってるNet_Twitter自体もやってることはそんな大差ないから
今のサーバマシンでわかるほどの差はでんと思う。
496じゃないけど俺は自作してる。Net_Twitterも最低限のAPIしかないし。
自分はbotの発言でTLが埋まってしまうのを考慮して(いろんなキャラbotをフォローしてるだろうし)、定期発言3時間に1回で設定してる。 cronはcron jobだけど、一度も失敗したことないし、勝手にオフになることもない。 リプライとTLに反応するプログラムは、2分おきにアクセスするようにcron jobで設定してるけど、こっちはたまに勝手にオフになる。 けどPhaさんとこのスクリプトじゃないから、多少遅れても全レスするし問題ないかなと思ってる。
cron jobで登録日からずっと1時間に1回でリプ無の定期ツイット試運転してるけど、 今のところ60回中1回しか動いてないし勝手にオフにもなる。 もちろんBOTが手動で動くのは確認済。 cron jobってどうやったらちゃんと動くの? Phaさんとこのスクリプトだから駄目なのかな 一応今PHP勉強して自分でも組んでるけど今ちゃんと動いてる人に聞きたい
主な原因としては ・Cron-jobが重い ・twitterが重い ・BOTのスクリプトが重い ・BOTのスクリプトの出力サイズが大きい(大きいと送受信に時間がかかる) ・BOT鯖が重い(無料や激安な鯖は顕著) ・タイムアウトにひっかかる
いくらなんでも60回に1回とか動かなさ過ぎだろ
スクリプトが無駄に大きくってるんじゃないか?
>>504 の指摘点をもっかい見直せ
今30分に1回定期postするプログラムと 0時、6時、12時、18時に指定した日付までのカウントダウンをpostするプログラムの2つ登録してるけど 前者は一度も失敗してないし勝手にneinになったこともない 後者だけ毎回8時(向こうの鯖が日付変わる時間)になるとneinになりやすい、あと失敗もしやすいみたい プログラム自体はどっちもbardothodolさんとこの参考にcurlで使うやり方なんだけど…
cronjob.de使ってる人いますか? 最多でも5分間隔しか設定できないけど勝手に止まることはないみたい ただ、今借りてる鯖じゃ設定できなさそうでした 翻訳サイトにかけて日本語でおkな文章を解読するにサーバー直下にcronjob_*****.html(*****は指定された数字)ってファイルが必要なのかなと思ったんですが アドレスが向こうの希望通りには設置できないんです
508 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/11(金) 19:50:35 ID:lt7fGhiK
うちは2分に一回、自作スクリプトを自鯖(窓)のcronNTで叩いてるけど、 getもpostも問題なさげ Services_Twitter使用
マルコフはやくー
そこまで他人に頼るとどれもこれも似たようなことしか言わないBOTにしかなんないぞ。
PHPとPECL OAuthライブラリを使ってAPIを叩いています。 APIの仕様書を見ていると、アクセストークンを設定した時に、レスポンスとしてユーザIDとスクリーン名が返ってくるとのことでした。 それらを使用したいと考えているのですが、どうにも取得が出来ません。(setTokenしたあとに、getLashResponseを呼んでみたり) どうにかそのレスポンスを得る方法は無いのでしょうか。もしくは、そのレスポンスを取得出来るPHPで使用可能なOAuthライブラリは無いでしょうか。
@のない呟きに反応するbotって作れるのかな つかれたー!って人におつかれって言ってあげるようなことなんだけど @がないとどうにもわからん・・・。
登録した人のタイムラインを参照して同じことすればいいのでは?
やってみた たぶんいける でもあれなんだよね、他の人への@も読みこんじゃうと思うんだよね
他の人への@があったら処理しないようにすればいいのでは?
>>516 かまってくれてありがとうw
他人への@に、てかすべての@に反応しないように書いてたんだけど
\@があったら弾くようにしたはずなのにうまく回らない
細かいミスでHP削られたので今日はもう寝ます、ありがとう
518 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/13(日) 02:14:06 ID:B1fOU/ii
>>517 @ってエスケープ必須でしたっけ?(in PHP
519 :
503 :2009/12/13(日) 09:41:31 ID:???
いろいろ検証したけど鯖の問題かもしれない… ・Cron-jobが重い 他の人は動いてるから重くは無いんだと思う ・twitterが重い 少し前は変だったけど今は変な挙動もしてない ・BOTのスクリプトが重い phaさんのpost_random.phpのスクリプトそのままだから大丈夫なはず ・BOTのスクリプトの出力サイズが大きい(大きいと送受信に時間がかかる) 最大全角35文字だから大きくないと思う ・BOT鯖が重い(無料や激安な鯖は顕著) @pagesだから分からない ただ手動でアクセスした時は必ず動く ・タイムアウトにひっかかる 検証の仕方が分からない @pagesにアクセス解析付のHTML置いて、そこで呼び出したけどCron-jobのアクセスは無かった どこか有料だけど安いレン鯖でも借りた方がいいのかな… オススメはロリポ?
流れぶった切って申し訳ないけど、発言などをさせるphpファイルが 投稿出来ずにエラーになるのは何でだろう? ブラウザ上で確認しただけなんだが、ただ一言ERRORって出るだけなんだ… service_twitterの本体プログラム自体はエラー出てない 勿論パスワードもIDも間違ってないんだ…何でだ…orz
どのphpファイル使ってて何をしてどういうエラーが出たのかさっぱりわからん。
あと間違ってない、って主観の判断はどうでもいい(そう思ってて間違ってることもよくある)から やったことや、ソースをそのまま貼ったほうが原因は特定しやすい。
523 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/13(日) 10:20:09 ID:B1fOU/ii
最近よくいる糞コテはなんなの
何もしてない奴よりなんぼか形にしてる奴のがましよ。 NG登録は簡単なんだし気になるならあぼーんしときゃいいさ。
526 :
520 :2009/12/13(日) 14:04:45 ID:???
言い捨てるような形になってしまってごめん ソース元は銀さんのとこで、ご本人が説明されている環境をそのまま使用してる 設置サーバーもやり方も全く同じ Twitter.phpにアクセスすると真っ白な画面にになり、ランダムに呟かせるphpファイル (例えばbot.php)にアクセスすると、白い画面に一文字「ERROR」の文字が出る ↓ソース
527 :
520 :2009/12/13(日) 14:10:31 ID:???
ソース載せると規制に引っかかってしまうんだorz //d.hatena.ne.jp/silverbot/20090829#c1260572663 ここのページのソース丸コピペ、フルパス、ID、パス、台詞だけ違う状態
>520 試してないが if(! $st->setUpdate($post) ){ die('ERROR'); 辺りを消したらちゃんとしたエラー吐かないかな?
定期postのBOTに過去10回分と同じポストかどうかを判断して 違ったらポストって機能を加えたいんだけど、ログの書き込みがうまくいかない。 log.txtをfgetsで配列aに読み込み→変数bと違うか判断→違ったら変数bポスト→ 配列aの[1]〜[9]と今ポストした変数bをfor文でlog.txtにfputsしてるだけなのに。 読み込みパターンをw、a、r+どれにしたらいいんだろう? 色々試したけど追加書き込みされたりポストしたばかりのだけになったりする。 rで配列Aに読み込み→wで全消し→aで書き込みするしかないのかな? そもそもこんな機能いらない?
ついにできた^0^/ GoogleにでもUPするかな
>>531 PHPです
今一応出来たけどログとの比較の部分で審査でタイムアウトする時があるから見てください
<?php
include_once 'フルパス';
//ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$fp2 = fopen($filename2,'r+');
flock($fp2, LOCK_EX);
for($i = 0;!feof($fp2);$i++){
$log[$i] = fgets($fp2);
}
fclose($fp2);
//ポスト選定と審査 $key = array_rand($plist); $ok = 2; while($ok >= 1){ $key = array_rand($plist); for($a = 0; $a < $i; $a++){ if($plist[$key] == $log[$a]){ $ok = 1; } } if($ok <> 1){ $ok = 0; } } $post = $plist[$key]; //ログ書き込み $fp2 = fopen($filename2,'w'); flock($fp2, LOCK_EX); fputs($fp2,$plist[$key]); for($i = 0;$i <= 8;$i++){ fputs($fp2,$log[$i]); } fclose($fp2);
535 :
520 :2009/12/13(日) 19:44:53 ID:???
>>528 反応ありがとう!
試しに
if(! $st->setUpdate($post) ){
die('ERROR');
}
を抜いてやってみたら、ただの白いページが出た…
そんでもって投稿はされてない
あるとERRORになってないとシカトって一体どういう…???
>>532 ログの保存の仕方はわからないけど改行コードは入れてる?
少なくとも末尾に \n 加えないとPOSTがつながって見えるぞ。書き込みモードはwでいい。
$fp2 = fopen($filename2,'w');
flock($fp2, LOCK_EX);
fputs($fp2,$plist[$key] . "\n");
for($i = 0;$i < 9;$i++){//8になってたけど9だよね?
fputs($fp2,$log[$i] . "\n");
}
fclose($fp2);
以下おせっかい
常識的に考えたら面倒なwhileじゃなくてforeach使うだろ
あとif($ok <> 1)の処理がよくわからん。
1じゃなかったら0にするんだったら最初から0にしておけばいいと思うが
$key = array_rand($plist);
$ok = 0;//最初から0にしておく
foreach($log as $logs){//$logの配列が$logsに入ってforeachループ内では$logsに配列の添え字([2]とか)がいらなくなる
if($logs == $plist[$key]){
$ok = 1
break;//同じPOSTが1つでもあったらPOSTしないと勝手に解釈
}
}
2chに書きこむ用のコードだと思うがいろいろなとこ抜けてて心配だ
>>534 の銀さんのBOTの作り方見てたけど結構ひどいな。
Services_Twitterを今後使うと見せかけて、リプライとかは全く関係ない別のソースを使ってる。
PHP触ったばかりかもしれないから仕方ないけど。
>537 銀さんとこのは全部他のとこの記事のコピペだよ リプライと定時のソースはそれぞれ違う人から持ってきてるんだから 関係なくて当たり前
>>536 すみません、書き忘れてました。
plist.txtに\nが入ってるのでfile()の処理で改行コードまで配列に入れているようです。
そのためlog.txtはちゃんと改行されて見えてました。ありがとうございます。
foreach文を知らなかったので後でググってみます。
while以下の処理は、同じ文があったらもう一度array_rand()してfor文で回して再審査、
同じ文が無かったらwhileから抜けるとしたかったのでこうしました。
初期値が$ok = 0だとwhileにすら入らず抜けてしまい、
whileの条件を$ok == 0にすると、今度は同じ文があった時にwhileから抜けてしまうため、
初期値は$ok = 2、同じ文章があれば$ok = 1にしてwhileからやりなおし、
同じ文がなかったら$ok = 0 にしてwhile抜けてポストにしました。
貼り付けたソースは定期ポストほぼ全文ママです。
foreach文なら大丈夫でしょうか?いいやり方があれば教えていただきたいです。
>>539 タイムアウトするのはtwitterの鯖なのか、botを動かしている鯖なのか、どっちですか?
twitterだったら鯖が重いかtwitterにPOSTするスクリプト(botとしての機能じゃない方)が悪い。
botを動かしている鯖なら鯖変えるとか。
と、ここまで書いてから気づいたけど
if($plist[$key] == $log[$a])
文字列で==はちゃんとした判定はできないから
if($plist[$key] === $log[$a])
===じゃないとだめだよ。
>>540 ごめん俺よくわかってないかもしれんが
同じ文字列型同士で == じゃ問題ある場合ってあったっけ?
>>541 同じ文字列型でも数値型で比較される場合があるから、
文字列で比較する場合はなるべく===を使った方がいいってことじゃない?
>>542 文字列型同士の比較なら==でも===でも値は一緒な気はしたんだけどそういうことあるの?
例えばどういう場合だろ。
銀さんのbotを参考に製作中だけど、 cronがうまく動かない。 「zu groß」って容量大きすぎってこと?どうすればいいの?
>>544 cron-job.orgなら「zu gro?」になってても
botの動き的には正常稼働されてるはずだから気にすんな
547 :
nobodyさん :2009/12/14(月) 15:22:27 ID:h7BWhtMh
自動フォロー返しだけやりたいんだけどbotとか初心者なんです。 どうやってやるんですか?
BOTというかプログラム初心者? それだとまずPHPスレとか見て基本覚えたほうがいいんじゃないかな。
549 :
nobodyさん :2009/12/14(月) 15:49:04 ID:h7BWhtMh
>>548 そうですか・・・初心者なんですけど、やりたいのはフォロー返しだけなんで言われるようにすればできるとは思うんだけど、
そういう紹介サイト的なのがあったらいいんだけど。ってそんな簡単じゃないですよね。
PHPスレものぞいてみます。
びっくりするほど他力本願だな。
551 :
nobodyさん :2009/12/14(月) 16:27:31 ID:h7BWhtMh
>>550 そうなんです〜。。。昔twitterには自動フォロー機能ついててよかったけど・・・今はフォロワー管理が大変。
プログラムとか難しいことはさけてフォロー返しだけできたらいいと考えてる愚か者ですw
>>551 そんなに面倒臭がってるならフォロー返しなんかやらなきゃいいだけのこと
553 :
nobodyさん :2009/12/14(月) 17:10:33 ID:h7BWhtMh
>>552 いやいや、めんどくさくは無いんですよ。ただプログラムの根本からまともに勉強始めたら数ヶ月かかるでしょ!?
何ヶ月もPC画面に縛り付けられるほどの時間がないだけ。
3日程度ならいいけど。
・・・それをめんどくさいって言うんだよ
558 :
nobodyさん :2009/12/14(月) 17:49:50 ID:h7BWhtMh
>>555 ありがとう。この文字をコピーしてどこに貼り付けたらいいのかな?・・・
おいお前ら、もう構ってやるなよ…真性だぜ
561 :
nobodyさん :2009/12/14(月) 17:58:01 ID:h7BWhtMh
562 :
nobodyさん :2009/12/14(月) 17:59:54 ID:h7BWhtMh
563 :
nobodyさん :2009/12/14(月) 18:01:48 ID:h7BWhtMh
564 :
nobodyさん :2009/12/14(月) 18:07:01 ID:h7BWhtMh
初心者の人は銀さんのbotを参考にするといいと思う。
昨日からbot作りはじめたけど
postさせるところまではできたよ。
>>546 ありがとう。気にしないことにして次の手順頑張る。
がんばれ><
567 :
nobodyさん :2009/12/14(月) 18:17:31 ID:h7BWhtMh
銀さんのbotはどこから読めば?一番初めはただのガタガタの文字しかのってないし・・・
568 :
nobodyさん :2009/12/14(月) 18:18:25 ID:h7BWhtMh
もう死ねよ
あ、やりたいのはフォロー返しなのか・・・ お役に立てなかったかも。。ごめん
573 :
nobodyさん :2009/12/14(月) 18:55:50 ID:h7BWhtMh
いえいえ、教えてくれた方ありがとう!!ゆっくり銀さんのを読んでみますね。参考になります。
PHPでキャラbotのソース書いてるんだが、いまいち分からないところが出てきた リプライで「A」に反応して「Bをつくりますか?」とか「B入りますか?」 みたいに返したい つまり「BC」という2つの変わる部分が欲しいといえばいいのだろうか B=食べ物名 C=つくりますか?、入りますか? のような文 というふうにしたい 今のところのソースが下の状態 //前略//// $mesi=array("ごはん", "パン",); //中略///// if(preg_match("/はらぺ|はらへ|腹減/u",$com) > 0){ $key = array_rand($mesi); $post = $mesi[$key]; $return =$reply_name." おなかすいたんですか? じゃ、".$post."はどうですか?"; } //後略//// もうどこをどういじればいいのかわからなくなってきた/(^o^)\ $return =〜以降を増やせばいいのかもしれないが、どうやって追加すればいいのか分からないんだ だれか助けてくれ
>>574 はい。
returnは予約語なはずだから使わないようにね
<?php
$reply_name = "@screen_name ";
//前略////
$mesi=array("ごはん","パン");
//中略/////
$com = "はらへった";
if(preg_match("/(はらぺ|はらへ|腹減)/u",$com,$m) > 0){
$key = array_rand($mesi);
$post = $mesi[$key];
$returns =$reply_name . " おなかすいたんですか? じゃ、" . $post . "はどうですか?<br>";
echo $returns;
}
?>
UZEEEEEEEEEEEEEEEEE
577 :
529 :2009/12/14(月) 20:21:19 ID:???
>>540 ありがとうございます!とりあえず===にしました
エラーはFatal error: Maximum execution time of 8 seconds exceeded in…というエラーが時々出ます。
鯖とツイッターどちらでタイムアウトしているかは分かりません。
とりあえず今set_time_limitで指定しましたが今は結果待ちです。
cron-jobが全く動いてくれないのもこのせいでしょうか?
今日の昼に毎日毎時0分に叩くよう設定しましたが1回も動いてくれません…。
@pagesとcron-jobで動いている人は沢山いるようなのでコツがあるのでしょうか?
Aktiv?はちゃんとjaにしています。
578 :
529 :2009/12/14(月) 20:28:28 ID:???
577訂正 @pagesではset_time_limitが使えませんでした…
579 :
543 :2009/12/14(月) 21:33:06 ID:???
>>555 うーん。変数の型が違うと暗黙の型変換が行われるから===を使うべきってのはわかってるんだ。
また同じことを言っちゃうけど、「同じ型の場合」に == と === で何が違うの?て話なんだ。
もちろん、値が保障されない場合も考えて===を使う「べき」ってのはわかるし
コーディングするときはもちろんそうするだろうけど
型が同一の場合にも==だとなんか問題あるのかなって確認したかったんだ。
特になさげかな。
経験上言わせていただきますが、`の処理には気をつけてくださいね…冷や汗をかきました。 今現在@windymeltanにmaximaプラグインを積んでいます。数式処理のテスト中です。 @windymeltan maxima:2+4; のように書いてテストしていただいて結構です。 乱筆しました。失礼。
うん、はしょりすぎて何を言いたいのかわからない。
>>577 毎時0分はたくさんの方が設定していると思われます。
処理内容にもよりますが、ジャストタイムが不要ならば13分とか、48分とかの
中途半端な時間に設定した方が良いかもしれませんね。
1分とかだとサーバーがまだ0分のヤツを処理してたりしてw
>>581 PHPのバッククォートはきちんとエスケープしませう。というお話でした。
>>584 なんでアチコチに貼ってんの?
記事の内容も、典型的な同属嫌悪だし。
ネガキャンしたきゃ愚痴スレででもやるべきだな。
CRONが叩きに来てないのか、叩きに来たけどタイムアウトしたのかどうやったら分かる? PHP呼び出すHTML作ってアクセス解析付けたけど何もログが残ってない
phaさんのスクリプトでランダムポストしてるんだけど、 10ツイート/day程度の頻度で、ポスト候補のテキストパターンは100近く仕込んであるのに やたら同じのばかり選ばれるみたいで、ポストが飛んでしまうことがよくある。 cronも安定してるし他の挙動には問題ないので、この状態がすごく気になる… どうにか回避する方法はないでしょうか。
ランダムで選ばれたテキストパターンが 自分の発言最新10件と一致しなければpostする様にするとか
GAEでCRONの某記事の人がPC上で動かすCRON?みたいなの作ったみたいだな
>>589 cron-jobにそんなログ見れるページあったっけ?
>>591 529が作ってたから入れてみたけどタイムアウトになって駄目
>>594 だったら八方塞がりだな…
他の人は動かない原因どうやって突き止めてるんだ
>>595 //ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
$results = 0;//重複判定用
//キーに該当するポストとログが同じか調べる
foreach($log as $logs){
if($logs === $plist[$key]){//ログと重複した場合
$results=1;//重複している
break;//重複しているのでforeachから抜ける
}
}
if($results==0){//$resultsが0すなわち過去10件と重複してない場合
$post=$plist[$key];//ポストする文にする
}
これでどうだ
芸能人の非公式botってどうなんだろう
>>598 それいったら、キャラクターの非公式botだって…
>>597 被ってたらポストしないじゃなくて
>>529 が
>>539 で言ってたみたいにもう一度array_randしないと
結局ポストせず終わるから駄目じゃないか?
それするとタイムアウトするみたいだけど
・ポストリストとログ読み込み
・ポストリストからランダムにポストする文を選ぶ
・ログと被ってないか判断
・被ってたら選び直し
・最新ポスト追加した最新10ポストのログ再作成
・ポスト
>>529 はこれだけ入れたソース作ったみたいだけど
確かに判定入れるならこれだけやらないと意味ないんだよね…
別プログラムでリプライとか入れてるならそっちも含めたログにすると理想的
選び直しを入れてるからタイムアウトになるんだろ
選び直し入れないと判定そのものの存在意義がなくなる ちゃんとポストするために入れてるんじゃないの? 結局ポスト出来ないなら判定もログ保存もツイッターがしてくれるからいらないよ
cron-jobが動いてくれないよ〜;0; botがまったく無反応になってしまった・・・
606 :
DAWNTO_Windy-melt ◆Windy/f9HNwg :2009/12/16(水) 00:14:04 ID:CexvtTFs
>>601 //ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
//キーに該当するポストとログが同じか調べる
foreach($log as $logs){
if($logs === $plist[$key]){//ログと重複した場合
$key=array_rand($plist);//もう一度探す
continue;//foreachに戻る
}
}
$post=$plist[$key];//ポストする文にする
こうか
foreach($log as $logs){ これは・・・ゴクリ
ちなみにそれ重複が判明した以降の$logsしか判定しないぞ
>>609 ばれなきゃいいと思ってたけど指摘されたか。
//ポストリストとログ読み込み
$filename = "plist.txt";
$plist = file($filename);
$filename2 = "log.txt";
$log = file($filename2);
//キー生成
$key=array_rand($plist);
$i=0
//キーに該当するポストとログが同じか調べる
while($i<10){
if($log[$i] === $plist[$key]){//ログと重複した場合
$key=array_rand($plist);//もう一度探す
$i = 0;//$logのキーを元に戻す
continue;//whileに戻る
}
$i++;//$logのキーを1つ進める
}
$post=$plist[$key];//ポストする文にする
何度もすまん。けっきょくwhileに戻ったな。
@pagesみたいな鯖じゃなくてもっといい鯖使えばいいのにとか思ったり。
俺だったら $filename = "plist.txt"; $plist = file($filename); $filename2 = "log.txt"; $log = file($filename2); $key = array_rand($plist); $log_slice = array_slice($log, 0, 10); while (in_array($plist[$key], $log_slice)) { $key = array_rand($plist); } $post = $plist[$key]; //do〜whileでもいいけど
foreach($log as $logs){ ↑これって配列をつくって並べてる、であってる? まずいの? phaさんのこれじゃね?
こうじゃね? あと改行削るべきだし、できたらファイル読み込みとかにエラーチェック入れたいが。 $filename = "plist.txt"; $filename2 = "log.txt"; $plist = @file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $log = @file($filename2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $plist_uniq = array_diff($plist, array_slice($log, 0, 10)); //重複しない候補 $post = $plist_uniq[array_rand($plist_uniq)];
あ、テスト用に追加してた@はなくてもいいやむしろ取ったほうがいい。 エラー出さなくするものだから。
ログが常に最新10件である事前提だな… xmlで取って来れないものか そうしたら最新10件のログを作成する部分だけはいらなくなる
え?どういうこと?
あー他の部分見てなかったけどこれAPIからのログは読んでないわけか。 まあいんじゃね。 ていうかxmlでもjsonでもAPI叩けば拾ってこれるし。
618 :
nobodyさん :2009/12/16(水) 11:35:25 ID:GKFzjgHo
タロット占いできるキャラbotを作りたいんですが、 botというかPHP初心者で取っ掛かりが分かりません。 スクリプトがあまり重くなると困るので、 タロットの結果を書いたxmlを作って「占って」とリプライされたら そのつどタロットのxmlを読み込んで結果をランダムに出力するとか可能ですか? それともみなさん、 $tarot=array("",""......); とかでやってるんでしょうか・・・?
>>613 ログ生成を追記モードでやってる場合は下の方が最新ログになるから
ログ読み取りの部分と被ってない部分の抽出はこうじゃ駄目かな
//ログ読み取りの部分
$filename2 = "log.txt";
$fp2 = fopen($filename2,'r+');
flock($fp2, LOCK_EX);
for($i = 0;!feof($fp2);$i++){
$log[$i] = fgets($fp2);
}
fclose($fp2);
//被ってない部分の抽出
$plist_uniq = array_diff($plist, array_slice($log, $i-10, $i));
上から10個が最新ってログ作成の時にやりにくいしタイムアウトの一因になると思う。
ただfgetsの時はどうやって空行と改行文字飛ばせばいいか分からないし
array_slice使ったこと無いから位置指定に変数が使えるかどうか試してない。
配列の最後のキーを簡単に取得できる方法があったらごめん
>>619 そこで行数カウントしなくても
$plist_uniq = array_diff($plist, reverse(array_slice($log,0,10)) );
reverseで逆転すればいいだけだし
要素数カウントするなら別に $i = count($log) ;みたいなこともできる。
あー、こっちのが楽か。 $plist_uniq = array_diff($plist, array_slice($log,-10) );
622 :
nobodyさん :2009/12/16(水) 23:19:30 ID:j0jV78ZZ
ただの宣伝じゃねーか。
自動フォロー返しのときにDM送ろうとしてるんだが そのDMのメッセージ内容に相手のname(screen_nameじゃない方)を使いたいときどうすればいい?
TL取得すると一緒についてくると思うけど
そのものnameって値で入ってるっしょ。
フォローにTLは取得しない フォローイングとフォロワーのAPIでname取得できなくね?
取得すればいいのでわ?
TL上で俄かにOAuthで認証するのが流行り出した。 クライアント名を変えられるのが人気らしいですね。 使ってますか? 私はまだベーシック認証ですが。
すみませんだれか知恵をお貸しください。 phaさんのプログラミングを利用させてもらっています。 本日botのパスワードを変更したらその後まったくbotがうごかなくなってしまいました。 普通投稿とリプライ投稿ともまったく別のエラーになります。 普通投稿の方は パスワードかユーザー名が違うとのことですが、 普通にこのIDとパスでtwitterにログインできるので間違っているはずがありません。 どこか別の記述が間違っているのかと別IDでpostしてみましたが通常通り動きました。 何故か一体のbotだけうまくいかない状況です。 もう一点、同botなのですがリプライの方は Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in /usr/local/www/htdocs/○○/public_html/Services/Twitter/Jsphon/Error.php on line 185 と出、185行目にエラーがあるそうですが、185行目は $message = convert_text($message); で何が問題あるのかさっぱりわかりません。 他の正常に動いているbotのソースを丸々コピーしてみましたが同じエラーになります。 自分ではこれ以上の原因究明ができませんでした。 twitterのアカウントに問題がある気がするのですが、 twitterのhome画面ではちゃんと書き込みができるのようでもう何が何やらさっぱりです。 申し訳ございませんが誰かご教授いただけると嬉しいです。
631 :
630 :2009/12/18(金) 21:30:49 ID:???
すみません630です。 何故か今、回復してしまいました サーバーの調子が悪かったのでしょうか・・・ スレ汚してしまい本当にすみません
>>631 そういう時はできるだけ詳細を書いておけば後続者の役に立つと思うからまだ見ていたら覚えといてくれ。
自分もphaさんのを利用させてもらってるんだけど、 返すリプライによって画像を変えたい場合ってどうしたらいいんですかね? 他の方のプログラムだとみつけたんだけどphaさんのって発言はテキストファイルで他の人とちょっと勝手が違うからよくわからないです…
phpを勉強して折衷したプログラムを作ればいい
フォローしてない人の発言を特定のキーワードで検索、取得するにはどうすれば良いのでしょうか…
>>638 ついーたーが言ってるだけじゃなあ。
URLもRT用の無駄URLだしソース元ないん?
corn-job.orgの動作が不安定なため、GAEでcronを動かしたいと思っています
自分なりに色いろやってみたのですが、どうしてもうまくいかないので相談させてください。
ttp://d89.s41.xrea.com/twitter/howtomake_bot.html こちらをを参考に、cron.yaml/app/yaml/task.pyを作成し
GAE launcherで読み込んだのですが、Runさせようとすると数秒でエラーのアイコンが出て先に進めません
ログはこんな感じになっています。URLがダメなんでしょうか…
Running command: "['C:\\Python25\\python.exe', 'C:\\Program Files\\google\\google_appengine\\dev_appserver.py', '--admin_console_server=', '--port=8089', 'C:\\bot']"
ERROR 2009-12-19 08:32:38,951 dev_appserver_main.py:363] Fatal error when loading application configuration:
Invalid object:
Unknown url handler type.
<URLMap
static_dir=None
secure=default
script=None
url=/.*
static_files=None
upload=None
mime_type=None
login=optional
require_matching_file=None
auth_fail_action=redirect
expiration=None
>
in "C:\bot\app.yaml", line 8, column 1
2009-12-19 17:32:39 (Process exited with code 1)
>>642 自分で鯖を立てることができるならこんなことで悩んだりしません
意地悪ですね
できるようになればいいじゃん
鯖立てしなくても24時間PCつけっぱなしにしてブラウザ自動リロードにしておけばいいだけ
リロードなんかしなくてもJavaScriptじゃだめなのか
>>643 まぁ、やってみなよ、おもしろいから。
DDNSとかで
セキュリティ??知らんがな(´・ω・`)
メールとかいろいろ遊べるし
>>641 同じようなとこで躓いた経験があります。yamlファイルの記述に問題があったようです。
そこのサイトで紹介しているyamlファイルのテキストをブラウザからコピペしたもの
ではなく、そのサイトからリンクされているページで紹介されている
ソースコードをコピペしてやってみると幸せになれるかもしれません。
違っていましたらあしからず。
>>648 おおおおお仰る通りにしてみたら成功しました!幸せになれました
本当にありがとうございました
ベーシック認証が廃止になったら、phaさんのスクリプトとかも動かなくなんの
>>650 OAuthに対応しなきゃ動かなくなるわな
OAuthはまだいいよ。 できなくなったら対策考えればいい。 ググればいくらでも出てくるからな。 ググらないのは甘え
OAuth導入できたんだけどAPIが上手く使いこなせない 慣れるの大変だなまた これで他人のソース丸コピペBot量産厨が減るといいけどwww
PHPでOAuth使おうと思ったがサンプルはcurlしか使えないんだな。 もっとましな方法はないのか…
ラッパーの自作ライブラリはさんでるから対応さえしときゃなんとでもなりそうだ。
ていうか今までもcurl使ってたと思ったがましな方法って例えば何だ。
そこのURLでも言ってるがcurlそんなダメか?
curlは認知度が低い わざわざ使わなくてもHttp_Requestがある curlの仕様自体が変態
curlを使ってたとこはHttp_Requestが何故か使えないから仕方なく使ってたみたいだが
>>659 fsockopenなんて遅いしそれだったらcurlでいいやと思ってる
流れを読まずにcronの代わりを考えてみたんだけど、htmlの自動更新のタグ使って代わりにできないかな? htmlのページにフレームかなんかでphp埋め込んで、そのページを延々更新し続けるとcron使わなくても動くんじゃない? 自分はめんどくさくてそんなことせずにcronくんでるんだけど誰かcronわからなくてhtmlの知識持ってる人は試してみてほしい 24時間ずっとブラウザ立ち上げてなきゃいけないけど うーん、やっぱり駄目かな。アホなこと考えてごめん
別にいいんじゃない? 自分が起きる時間にBOTは起きて自分が寝る時間にBOTは寝る感じで
>>662 考えたことあった
ただ
>>663 が言うように常にPCを上げておかなきゃいけないからね
それが問題にならないbotなら出来ると思うよ
windowsならタスクでなんでだめなの?
てかMETAタグで自動更新するくらいならJavaScript使えばいいのでは?
>>666 前提が「cronは分からないけどhtmlならできる」だから
htmlのが敷居低いんでないの?
タグ一行で済むのをわざわざJavaScriptで書く必要はないわな。
htmlやJavaScriptでわざわざ書かなくてもOperaに自動更新ツールついてるし
ブラウザに依存してる方がめんどくさいだろ。
その手のは突然サービス終了したらと思うと怖くて使えない
別に終了してもいいじゃん。 どうせtwitterなんて流行り物だし、使い続けるようなものでもないでしょ
すいません、流れを読まずに質問。 reply_pattern.phpの中身の反応させる言葉なんですけど、 複数の単語がある場合に反応する方法はありますか? たとえば、「ごちそうさま。おいしかった」と@貰ったら 「お粗末さま。おいしくて何より」といった返答をするように、 「ごちそうさま」と「おいしい」の2つの単語がある場合に、 用意した言葉を返答するという感じ。 「ごちそうさま」だけに反応させるものもあるので、二つの言葉がある 場合に、反応する正規表現を教えて下さい。
>>675 明日(ぼく|わたし)は帰宅します
これか!これだな!ありがとう!!助かった。感謝します。
677 :
674 :2009/12/24(木) 23:59:04 ID:???
あれ、どうやら違うようでした…。自分の頭はサル以下なのか
ごちそうさま.*おいしかった だけでいんじゃね
おいしかった。ごちそうさま。 だったら?
680 :
674 :2009/12/25(金) 02:20:44 ID:???
>>678 それだと「ごちそうさま」だけの@に反応しなくなる
また、 おいしかった.*ごちそうさま
だと、「おいしかった」に反応してしまうんだ…
>>679 「おいしかったーーー!うまい!ごちそうさま!」とか
「ごちそうさま!パスタおいしかった」にも反応させたいんだ
「おいしかった。ごちそうさま。」ってきっちり@もらって
反応させるしか方法はないのかな…
2つif使えば?
「おいしい」じゃ「おいしかった」は引っかからないのでは?
683 :
674 :2009/12/25(金) 02:53:24 ID:???
>>681 if?初心者なものですまんがわかるように解説してくれ…
ちなみに「プログラミングができなくても作れるTwitter botの作り方」を
参考にしてphpいじってる。
ttp://pha22.net/text/twitterbot.html タグはこんなかんじで
"リア充(は)?爆発しろ"=> array(
"「爆発しない」",
"「爆発する」",
),
>>682 ああ!微妙に単語を変えればいいのか…? なるほど
2つの単語同時指定っていうのが無ければ、そうする。ありがとう
プログラム分からないでやる意味が分からん。分かるようになれよ
ていうか正規表現のURL貼ってくれてんだからそれ読もうよ。 すごい基本的なこと聞いてるからそれもわかんないんじゃ今後似たような質問だらけになるぞ。
phaさんのスクリプト使わせてもらってるが 反応する単語増やしたらタイムアウトしやすくなってきた .*を多用しすぎたのが良くなかったのか? ファイルサイズを小さくできる(タイムアウトしにくい)表記とか あったら教えて欲しい
>>674 「ごちそうさま」だけでいいならそれだけ書いておけば「おいしかった」があってもなくても引っかかる
「おいしかった」の有無で反応を変えたいなら分けて書けばいい
PHP云々以前の問題だと思うよ
質問の時のテンプレあるといいのかね?
689 :
nobodyさん :2009/12/25(金) 20:40:14 ID:yLGH+OzA
phpでbot作ってて、APIのmentions.xmlを取得してるんだけど curlで取得してsimplexml_load_stringで読むことはわかるけど このままforeachでループすると同じものを何回も繰り返して 二重にも三重にも実行されることになってしまうがどうしたらそれを回避できる?
意味が分からん。ループすべき処理にはforeachをかけて、すべきでない処理にはかけなければいいのでは?
691 :
689 :2009/12/25(金) 21:18:19 ID:yLGH+OzA
>>690 いや、そこんとこの処理をどうするか考えてる
ループを実行するたびにファイルにでもidを記録して
ループを回す度にチェックして重複してたら実行しないようにすればいいんだろうけど
それだとすごく時間かかる
ランダム発言でもしてて発言が重複しないようにしたいわけ? それなら上のほうで同じような話が出てるよ
693 :
689 :2009/12/25(金) 21:55:28 ID:yLGH+OzA
>>692 そうじゃない、xmlから拾うときに前拾ったのを拾わないようにするにはどうしたらいい?
>>693 なんらかの方法でマークしておけよ。
xml取得時に日時で絞っておくとか、IDを記録しておくとか、、、
695 :
689 :2009/12/25(金) 22:07:51 ID:yLGH+OzA
>>694 日時で絞るなんて機能あった?
IDを記録しておく方法だと
ファイルに記録すると読み込み時間かかるし、ファイルの中身を消すタイミングもめんどくさいし
データベースでも同じ
696 :
689 :2009/12/25(金) 22:16:08 ID:yLGH+OzA
ああ、取得した最新のidをファイルに記録しといて今度取得するときsince_idパラメータを指定すればいいのか
>>696 日時でもなんでもやり方はあるぞ
言っちゃ悪いがそれくらい分かれ
あとsageろ
なんか無駄に長くて要点わかりにくいんだけど
要するに重複しないステータスを取得したいってことでいいんかね。
まあ
>>696 でいいんだろうけどAPI叩いて連続で取得したんなら
ステータスIDをキーにした配列に格納しなおして重複避けたり
読み終わったIDを保存しといてそれは除外するなり手はあると思うが。
どうせ2分とかの間隔で取得するんだから、 00:26:01に起動 → 00:24:00〜00:25:59のステータスが有効 00:28:02に起動 → 00:26:00〜00:27:59のステータスが有効 という感じでやってる。 mentions取得できなかったら?そんなの無視。
時間で指定できるのもあったよね確か
sinceは廃止される引数だったと思う。 since_id max_id を使って欲しいんだろう。
BOTで投稿したときに「APIから」と表示されてしまうのですが、 これを偽装する手段ってありませんか?
OAuth認証にすれば自由にできる
>703 ありがとうございます。 調べてみます
GAEのcron.xmlで、「毎日○時〜○時の間のみ○分間隔で実行する」という設定は可能ですか? <schedule>の書式とにらめっこしたけど調べた範囲では分からなかった…
>>705 ○分間隔にしといてBOT側で時間の対応をする
FileQっていう月99円のレン鯖はcron無制限だよ。実際に自分のbotで試したらちゃんと動いた。
皆さんbotのプログラミング言語は何を使っているんですか?
過去ログ読め BOTの為だけに鯖借りるのはなんかなーとは思う
無料鯖借りればいいじゃん
自鯖立てればいいじゃん。
自分で書き込めばいいじゃん。
cron使える無料サーバーなんてあるのか? FileQが多分一番安いし一分間隔でcron使えるし
>>713 それボットじゃねーwww
FileQ試してみたけどスゲーな
安定して1分間隔でcron動く
1年1180円だしこれでいいんじゃね?
rep2置いたらジエンにつかえるじゃん
名詞や動詞を組み合わせて発言するボットを作ってる人多いけど、文意がおかしな事になってるじゃん。 もっとちゃんと作ったらいいじゃん。
>>715 FileQは操作に慣れるのに時間がかかる。
慣れるまでが問題かな。
tp://d.hatena.ne.jp/bardothodol/20090930#p1 ここを参考にTL上の単語に反応させてるんですが、サーバーを@PAGESからFileQに移動したら Fatal error: Call to undefined function curl_init() in /home/〜〜〜.php on line 27 というエラーが出るんですが、これってこのサーバーではcurlが使えないってことですよね? curlを使わない方法でTL上の単語に反応させる方法とかありますか? それともcurlが使えるサーバーを探すべきか…
>>717 マルコフ連鎖とかいうのを実装して作るんだけど、あくまで「文と文のつながり」を記憶できるだけであって、文意の解析までは辿りつけてないよ。
発言ごとに辞書引いて意味を覚えるとか面白いとは思うけど、労力が足りないんじゃないかな。
>>717 >>720 だし、マルコフじゃなく自分である程度の文章のつながりを作るのもできんこともないけど
すげーめんどくさいか、すげー少ないバリエーションになってしまう。
あれはああいうカオスな発言を楽しむもんだと思ってる。
伺かみたいな文章として成り立ってるのを作るにはあれみたいに
一文ごとにデータ作ってやんないといけないしな。
チャットのbotでそういうの作ろうとしたけど飽きて投げた。
品詞の分類だけじゃなく活用まで考えて作るのすげーめんどせーよ。
>>719 APIでタイムライン上の発言を配列に突っ込んでforeachで一つづつ検索していくとか
FileQでcron試してみた。 一分間隔で動くように設定して60分放置。 結果54回動いた。
>>722 たしかに、マトモなボット作るなら膨大な量の辞書データがいるね
もしかしてcron-jobおかしい?垢削除祭か? 今日の夜から突然動かなくなったんで確認したら綺麗に消されてた 他にも消された奴いる?
>726 消された cron-job、jaになってても1日中botが沈黙とかここ何日かで急になったんだけど 他に同じひといないかな 上にあるFileQ試してみたいんだけどcronでわからなくなってる Commandにhttp〜じゃだめなのか…
Cron-job互換サービスを立ち上げてみたいのですが、結構高性能なサーバーでないと不可能でしょうか? 日本語で使えるサービスが有れば便利だと思うのですが。
毎分動かすとなると、それなりに負荷がかかることになるから安い共用鯖じゃ無理 海外の安いVPSを借りてみるとか
>>729 自宅鯖です。
model name : Mobile Intel(R) Pentium(R) 4 - M CPU 1.80GHz
memory:512MB
oauth使ってると思われるbotが止まったの、アプリのAPIがサスペンデッドになってると思われ。
732 :
nobodyさん :2009/12/30(水) 09:30:58 ID:ScDpW0+E
cron-job消された。 別のメールアドレスで再登録しようと思ったけどダメ。 FileQもよくわからないしめんどくさいなぁ。
垢BANされた人はとりあえず応急処置としてパソコン立ち上げっぱなしでブラウザ自動更新しておいたほうがいいね
>>726 です
あの後別のメールアドレスで再登録して
URLも登録し直したけど大体大丈夫っぽい
たまに動かないけど一時間に一回のボットだからそんな問題ないって感じ
今日から帰省だからその間に止まってたら困るな
やっぱり有料のサーバ借りてやるしかないのか
単なる趣味にしか過ぎないしボットのためにお金注ぐのもなんだかねー。
GAEも検討したけど色々面倒だお
設定に何十時間も掛ったと聞くけど最新のOSでもそう?
あんまりパソコン立ち上げる時間無いからちょっと躊躇してるんだ
>>727 コマンドには
http://じゃなく /home/******/public_html/*****.php
と、実行したいファイルのディレクトリを書けばいけるはず。
cronを毎分使いたいならやっぱり有料鯖借りないとダメなのかな〜
俺の借りてる鯖のcron使って君タチのボット動かしてあげようか????
>>739 それ、今からやるところですよwww
webからセットアップできるcronのフロントエンドをphpで自作しているので完成次第公開します。
わっふるわっふる
わっふるわっふる
わっふるわっふる
744 :
nobodyさん :2009/12/30(水) 17:12:51 ID:tKJERMBp
735です。 FileQでのcronの動かし方を間違えてレスしてました。 正しいコマンドはこうです。 これは僕の例ですが、index.phpにボットのプログラムを書きpublic_htmlフォルダにアップしました。 *****の部分はアカウント名です。 /usr/local/bin/php /home/*****/public_html/index.php まず /usr/local/bin/php と入力し、半角スペースを入れてから動かしたいファイルの/home/から始まるパスを入力します。
FileQ使ってるけど php /home/ユーザー名/public_html/PHPの入ってるディレクトリ名/ファイル名.php cd /home/ユーザー名/www/PHPの入ってるディレクトリ名; /usr/local/bin/php ファイル名.php の2通り試してみたらどっちも同じように動いてるよ
↑はコマンド欄に直で入力ね
FileQにPHPをアップしてもエラーが出る…。 他のサーバにアップしたPHP(FileQにアップしたものと中身は同じ)は問題なく動くのに。
>>749 どのフォルダにアップした?
FFFTPとかのアップローダー使った?
>>749 サイトからコピペしたときによくあたるんだけど、、文字エンコーディング関連でエラーが出る事がある。
¥がそのままの時はバックスラッシュに変換してみて。linux環境での実話。
SJISをviで読み込ませたら¥記号のままでエスケープできずに狂ったことがあった。
FedoraはUTF8だったので
:%s/¥/\\/g
:set fileencoding=utf8
で保存し直した。
>>750 アップローダー(CyberDuck)を使って、パブリック_htmlへアップロードした。
>>751 うーん見た感じ\とかエンコードとかは大丈夫みたいなんだが…。でも返信ありがとう。
>>752 エラーの文をコピペしてみれ
スクリプトの記述ミスがいけないのか、文字化けなのか、そもそもそこのサーバーのPHPで使えない関数が含まれてるのか
今のcronの主流は ・cron-job消された!手間かけるの面倒! →FileQ ・cron-job消された!手間をかけるのは厭わない →GAE ・そもそもcron-job使ってません^^ →自鯖とか各自の鯖のcron ・cron?なにそれこわい →PC起動したまま延々とリロード かな?
PC起動したまま延々リロードしたときの電気代と月々の鯖代はどっちがかかるんだろう…
cronjob.deがあるじゃん
GAEでいろいろやってみたがland.toと@pagesは安定してるね zeroweb(happy888.net)だと、うまく時間内にキャッチできてない→反応しない 昔から借りてる某レンタル鯖は反応するけどその後2回ほどreplyしてしまうし 鯖によって本当にマチマチ… ちなみにどの間隔も変わらない感じした
FileQにうpした際に出るエラー Fatal error: Call to undefined function curl_init() in /home/tre666/public_html/***/***.php on line 46 46行目は $ch = curl_init(); やっぱcurlが使えないってことでおk?
アカウント名消し忘れたwww まいっか
そう curl未対応だな。FileQは
cron job、アカウント云々じゃなくてサービスのサーバー自体がおかしいみたい 今朝、持ってる全てのアカウントが消されてて別のメアドでアカウント取ったんだが、新しいcronを設定する端から消されて行くw アカウント取れたからには個人を特定されて弾かれてる訳ではないだろうし BOT本体だけでなく、30分に一回フォロー用phpを回すだけのアカウントも消されていたのもそのせいかも
>>761 変な汗でた よろしくお願いします
FileQを諦めるかwebcronにするか自力で設定するか…
1日数回の定時postはwebcronにしてたんだけど、リプライはさすがに消費量が激しいので無理だな
TL反応のプログラムをcron(サーバーのを使用)で動かそうとしたらこんなエラーメールが届きました Warning: simplexml_load_string(): Entity: line 1: parser error : Space required after the Public Identifier in /home/***/public_html/***/***.php on line 34 Warning: simplexml_load_string(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /home/***/public_html/***/***.php on line 34 Warning: simplexml_load_string(): ^ in /home/***/public_html/***/***.php on line 34 Warning: simplexml_load_string(): Entity: line 1: parser error : SystemLiteral " or ' expected in /home/***/public_html/***/***.php on line 34 34行目は $XML = simplexml_load_string($result); です。 cronjob.deを使ってみても動いている気配がありません。ブラウザでアクセスすると別に何もエラーは出ないのですが。 XMLの読み込みに問題があるのでしょうか? どうしたらいいのかわからずお手上げ状態です
>>764 "または'のエスケープ処理を忘れていませんか?
>>765 " や ' を \" や \' にすればいいのでしょうか?
>>762 cron-jobは、日本のBotで負荷が異常に増えたのに対して、〜.jp規制をかけているようです。
phpなどの実行URLか、登録メールアドレスが日本のドメインの場合強制排除しているとか。
ソースはほかの開発者さんのツイートなので曖昧ですが、〜.jpを使っていない私が
全く規制されていないのも納得できました。
まあ頻繁に話題に出て皆一斉にそれ使ってりゃ規制されんのも当然か。
>>345 >>352 と全く同じ状況なんだが対処法がさっぱりわからない
出来てる人はどうやってるんだろうか…?
エラーはなんて出るの?
771 :
769 :2010/01/04(月) 02:12:01 ID:???
俺に聞いてると仮定して答えるけど エラーは出てない、ポストも問題ない、ただin_reply_to_status_idが付与されないだけなんだ Basic認証の時は出来てたんだけどなぁ
>>771 自分はこれで出来てるけどどうだろう
$req = $to->OAuthRequest($host,array("status"=>$aaa,"in_reply_to_status_id"=>"$bbb"));
773 :
769 :2010/01/04(月) 07:01:43 ID:???
"in_reply_to_status_id"=>$bbb を "in_reply_to_status_id"=>"$bbb" に変えたら出来た!
単純な話で情けないな…。
>>772 ありがとう
なんだそりゃ。型によって処理分けたりしてるんかね
sutatusは基本文字列だから通ってもidは基本数値型だから蹴るみたいな? どっちにしろ送るときゃ文字列なのにおかしなことをしてるな。 しかも黙って蹴ってるってのがなんだかやな感じだな。
>>767 land.toとかだと〜.jpじゃないけど消されるよね
単純に〜.jpで弾いてるわけだもないのかな?
FileQでcron設定してみたんだがリプライしても沈黙したまんまだ。 手動なら動くということはファイル自体は問題ないんだよな…? なにがあかんの……
cronjob.deって、登録申込したあとメール来るのにどれくらいかかる? 1日とか待たなきゃいけないのかな… 全然来ないのでちゃんと申込出来てるのかわかんなくなって来た
>>778 メールはすぐ来た。が、その後すぐアカウントロックされてしまった。
cron-jobでロックされた人が流れてるからかもしれん
>776
自分は.comドメインだけど鯖がロリポ
鯖IPかアクセスしたIPで日本かどうか判断してるのかも
780 :
778 :2010/01/04(月) 17:00:18 ID:???
>>779 違うメアドで登録してみたら今度はすぐに来た
今のところアカロックはされてないみたいだけど
cron-job.orgのときみたいにログイン出来なくなっちゃったの?
Gmailで登録してるけどcron-job.orgもcronjob.deも垢消されてないぞ
ただもうcron-job.orgは設定するそばから消えるけど
>>777 コマンド欄にURLそのまま打ち込んでないか?
ちょっと上の方見て来い
cron-job、ログインできないのにちゃんと回ってるみたいでTL反応とかし続けてる… 同じ状況の奴いる?
phpだけじゃマルコフ無理なん
FileQで外部サイトのphp回せる? curl使えない?何のこと?とか思ってたらリプライ用のファイルも回せないってことなんだよな? お金払っちゃったぜ/(^O^)\
>>782 うちのとこもそう。
まったくいじれないのにそのまま動いてるから移行もできない状態…
とりあえず自然にオフになるの待ってる。
cron-job.org設定ではerfolgreichってなっているけれど動いてない。 誰か助けて
>>345 >>352 は俺です。
>>769 掘り返してくれてありがとう
>>772 ありがとう出来たよ!
型が違うのかと思ってintvalかませたりとかは試してたんだけど単純な話は単純な話だったんだな…
botみかけたけれどcron-job.org今調子わるいのか?
むしろ今のcron-job.orgは絶好調
うちのは問題なしだけど、蹴られないうちにファイル名変えようかな…botていうフォルダだから 向こうに用途悟られて消されかねないし
793 :
779 :2010/01/04(月) 23:07:46 ID:???
自分はcron-jobはログインできるんだけど 2つ動かしてたのがどうしても1つしか設定できなくなった それで.deでアカウント作ったけど速攻でロックされた deで表示された文を翻訳すると再登録するな+問題あると訴えるみたいな感じだったから それはねーおwと思いつつ再登録してない 他にもcronサービスあるから皆が上手く分散できるといいんだが…
cronも大事なんだが、リプライのOAuth化で躓いてる… 色々削ったり位置を変えてみたけどお手上げだ
>>794 あーおなじ
定時ポストのみ対応できてつまずいた
定時postとリプライはOAuth対応出来たけどTLに反応が上手くいかん まあそれ以前にcron探しでbot止まってるから意味ないけどな…
あいまいでよくわからんが具体的にどの辺でつまってんだ?
webcron.orgからFileQにしてみたが、
ここは凄いな。1分間隔で動くし1年で1000円ぐらいだし
cronの使い方がよくわからなかったが、
>>744 >>745 の書き込みですんなりできた。
>>797 795だけど私は実行してもエラー出ないけどリプライをしてくれない状態
自分で組んだのですがAPIでは動いてくれているので、恐らく組み込みがうまくできていないのではないかと…
>>797 794です。自分も
>>799 と同じくエラーが出ずAPIの状態…
curlを削ってもいいと聞いたので少しずつ削ってその都度試してみたけど駄目だった
FileQいいなと思うけどcurlが駄目ってとこで引っかかるのが辛いな
curlだけじゃなく他にもダメなのありそうだしな。
OAuthは認証した後はbasic認証後と同じようにAPIに投げればいいのかな
リプライとかTLはポスト部分だけOAuthに投げてそれ以外は以前のままで使ってる
SDNさんのOAuthでのAPI偽装スクリプト使わせてもらおうと思ったんだけど PHPでOAuthを使う準備の所で、test.php叩いても真っ白い画面でソースも何も出てこないエラーになる 使ってる鯖はステップサーバーでPHP5、対応してないスクリプトなのかと思ったけど 他の同じような環境の鯖で叩くと ・ソ Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /usr/home/akairin5/public_html/twitterOAuth.php on line 21 というエラーが帰ってくる しかし特に閉じ忘れなども無い気がするんだけど…… 誰か同じようなエラーで対応した人いませんですか 色々と考えたけど、自分の経験値では完全に詰みました……
ふああああああああああああああああああああああああorz しくじったアカウント消し忘れたorz うう、見なかったことにorz でも助言お願いしますorz
ここはうっかりさんが多いインターネットですね
>>805 どんまいとしか言えないwww
けど自分も真っ白のページが出てくることがたまにある
810 :
805 :2010/01/05(火) 11:35:24 ID:???
どんまいありがとうございますorz
>>809 最初にDLしたものをそのままUPしたらだめだったので、
文字コードをUTF-8、改行コードも念のためLF固定にして再UPしたんだけどダメで、
更に.htaccess置いてサーバーの方で改行コードを固定してもダメでした。
SDNさんのHP注意書きの様に、スクリプトのバージョン違いかとも思って
2度ほど該当バージョンの物をDLし直したんですがダメでした。
白くなるエラーは私も何度か遭遇して、その度に閉じ忘れとかが原因な事が多かったので
今回もそうなのかなぁと思ったのですが……
配布されているものに間違いがあるとは見た限り思えなくて…
ステップサーバーのPHP注意に、白くなるエラーは、PHP5に対応してないスクリプトの可能性アリ
というのがあったので、疑っても見ましたが、それも無いと思いますし……
謎です
とりあえず、自分でも、OAuth調べ中ですが、お心当たりある方居ましたら
ご助言お願いしますorz
うちのOAuthはよくサスペンドにされるんだけど…なんか問題あんのかなあ
ウチはSDNさんのところを参考に 定期発言もリプライも全部OAuth認証に変えてみたけど、設置もその後も順調だ やっぱりサーバーとかの環境によってだいぶ差があるんだな
>>814 cron-job.orgがダメになってそこに移った
@ページだとほとんど動かなかったから、他の鯖に変えたら動きだした
たまに起動しないけど無料なら想定の範囲内だと思う
あんまり広まるとまた規制されそうだが… SetCronJobでぐぐると幸せになれるかもしれない ところで、bardothodolさんのスクリプトが元のリプライソースでcurl使わずにOAuth化できますか? 2つあるpost関数のうち下方にあるcurlは削れてちゃんとクライアント名が変わったんだけど、 上の関数と$usernameと$passwordを削ったらpostできなかったんで、OAuth化できたのかできてないのか分からない状態です こんな状態だけどクライアント名変えるだけでいいっていうならソースとか晒すけど… FileQを使いたいので curl使わずにOAuth化できればいいな どなたかご助言願います
あと少しで完成なんだけどTLに反応するやつだけ上手くいかない… $oyasumi = array("台詞1","台詞2","台詞3"); $tadaima = array("台詞1","台詞2","台詞3"); if($reply_name != $username){ if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){ if(preg_match( "/おやすむ|おやすみなさい|おやすみます|寝る|寝ます/u", $var )){ $key = array_rand($oyasumi); $post = $oyasumi[$key]; $message = "@".$reply_name." ".$post; tweet($message ,$username,$password); } if(preg_match( "/ただいま|今.*帰ってき/u", $var )){ $key = array_rand($tadaima); $post = $oyasumi[$key]; $message = "@".$reply_name." ".$post; tweet($message ,$username,$password); } ここで下の反応語句いれても上ので反応してしまう 色々なところで調べたりいじったりしたんだけどちょっと症状が違うのか上手いこといかない 馬鹿らしいこと聞いているとは思うんですが手がつけれないので… 誰かわかる方いたらお願いします
>>817 中カッコが足りなくて閉じ切ってないのでなんともいえない。
しいていえばpreg_matchがおかしいんじゃない?
あとはちゃんとマッチしてるか確認するために
if($reply_name != $username){
if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){
if(preg_match( "/おやすむ|おやすみなさい|おやすみます|寝る|寝ます/u", $var )){
echo "oyasumi <br>";
$key = array_rand($oyasumi);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
echo "$post $message<br>";
tweet($message ,$username,$password);
}
if(preg_match( "/ただいま|今.*帰ってき/u", $var )){
echo "tadaima <br>";
$key = array_rand($tadaima);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
echo "$post $message<br>";
tweet($message ,$username,$password);
}
こんな感じでecho入れてブラウザ上で動かしてちゃんと反応するか調べる。ちゃんと動いていれば
oyasumi
台詞1 @reply_name 台詞1
みたいに出力されるはず
twitterOAuth.php自体にcurlが使われてるからSDNさんのとこの方法でOAuthにするとFileQでは動かせなくなっちゃうのかな… FileQにみんなでcurl使えるように嘆願するか?w それとスレチだけどなんで日本には外国みたいなwebcronサービスがないんだろ お金かかってもいいからあったら便利なのに
>>817 「ただいま」の $post = $oyasumi[$key];
「おやすみ(oyasumi)」になってるよ
あと、
$oyasumi = array("台詞1","台詞2","台詞3");
$tadaima = array("台詞1","台詞2","台詞3");
if($reply_name != $username){
if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){
if(preg_match( "/おやすむ|おやすみ|おやすみます|寝る|寝ます/u", $var )){
$key = array_rand($oyasumi);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}
if(preg_match( "/ただいま|今.*帰ってき/u", $var )){
$key = array_rand($tadaima);
$post = $tadaima[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}
}
}
$i--;
}
↑閉じ方をこうしてみた。
直るかどうかはこの前後のソース次第かもしれないけど…
>818 早速ありがとう! ソース変なところからだった…ごめんなさい。 $i = count($XML)-1; $j = 0; while($i >= $j) { $var = $XML->status[$i]->text; $reply_name = $XML->status[$i]->user->screen_name; $name = $XML->status[$i]->user->name; 省略(さっきのソース) } } $i--; } 長いから省略しました。 これで閉じ切ってるかな…? とりあえず教えてもらった方法やってまた頑張ってみます!
>820 うわっ!本当だ…すっごい恥ずかしいこれ そこ直したら戻った気がする。一応返してきたからこれで様子見ます! 本当ありがとう…
>>819 リプライソースからcurlを消せばいいと思ってた…
そうか twitterOAuth.php自体にcurlがあったorz
5分間隔でいいならSet〜とかでいけるけど、やっぱ5分だと取得漏れが多い気がする
そしてwebcronでリプライ動かしたら破産する
自分で設定するしかないか
>>728 あたりが安定した国内のcronサービスを作ってくれる とかいう夢を一瞬見た
無料は申し訳ないからできればカンパとかしたい
>>825 GAEにしようとしたんだが、Google App Engine Launcherを起動すると
See the logfire 'C:\〜GoogleAppEngineLauncher.exe.log' for details
というエラーが出るから積んだよ
再インストールしてもエラー中のlogを消してもだめだった
問題は山積みだ…
logの中身みたの?
>>828 logの中はこんな感じのが何行か…
Traceback (most recent call last):
File "GoogleAppEngineLauncher.py", line 42, in <module>
File "wx\_core.pyc", line 7913, in __init__
File "wx\_core.pyc", line 7487, in _BootstrapApp
File "launcher\app.pyc", line 53, in OnInit
File "launcher\app.pyc", line 97, in _CreateModels
File "launcher\maintable.pyc", line 35, in __init__
File "launcher\maintable.pyc", line 86, in _LoadProjects
File "launcher\project.pyc", line 63, in ProjectWithConfigParser
File "launcher\project.pyc", line 260, in _LoadFromConfigParser
File "ConfigParser.pyc", line 520, in get
ConfigParser.NoOptionError: No option 'name' in section: '1'
さっぱりなのでweb上のcronに頼ることにするよ
聞いてくれてありがとう
オプションのnameがないんじゃね?
>>824 わざわざありがとうございます。
本格的に設計開始しましたが、あったらうれしい機能など教えていただけると開発が早く進みます
>>831 乙
横レスだけど
cronjobみたいなシンプルなコンパネがあるとうれしいな
>>831 楽しみにしてます
かなりのユーザーがいくと思うので負担が大きいかもしれませんが…
cron-job.orgのようにCtrlで時間を細かく選択できたら便利かと思います
時間は1〜2分間隔希望です
>>831 もし有料にする場合は、銀行振込にも対応してほしい。
クレカ無いから…。
この流れはひどい
bot製作とは程遠いな
ド素人の質問ですみません。 Kotobuki Lab.さんのページを参考にしてGAEでcronを実行したいのですが プロジェクト名すら作成例と同じにして丸コピしているのに、うまくいきません。 同じページを参考にしてうまくいった方はいますか? 変えているのはtestcronServlet.javaの11行目、testcronServletをTestcronServlet にしたのと、botのURLだけです。 現在Logsでは2分おきにWarning No handlers matched this URL.が出っ放し、 Cron Jobsでも常にon time failedとなっています。←これがどういう状態なのかもいまいちつかめてません… ぐぐったら海外で同じ状態のひとを見つけたのですが、具体的な解答はなされていないようなので、 どうか助言をお願いします。
>>837 そのページ見てGAEにチャレンジしたけどうまくいったよ
○○Serblet.javaのファイル名は頭1文字目が大文字じゃないと上手くいかなかった気がする
スペルミスってた Ser「b」letじゃなくてSer「v」letね…
>>837 Warning No handlers matched this URL.
ってことはURLが間違ってるって事じゃないのかな
アドレス間違ってるかもしくはGAEからのアクセス弾いちゃってるとかじゃない?
>>837 >>840 プログラムのURLが合ってても、cron.xmlの方で指定間違えてたら
Warning No handlers matched this URL.って出るよ
>>837 はもう一度パス見直してみ
FileQとphpだけで人間によく間違えられるbot作った俺が通りますよー
>>843 自慢したいだけなら二度と来ないでください
>>844 リプライ返しはあいさつに対してのみ行う場合なら人間っぽいbot簡単に作れるよー。
まず「つぶやき収集bot」を作って、あらゆるツイートを収集し、リプライツイートや時々内容のツイートを取り除きテキストファイルに順に格納していく。
時々内容のツイートを取り除く方法は、まずニュースサイトの記事をyahooの形態素解析APIを使って名詞を抜き出し辞書を作っておく。
そして「つぶやき収集bot」が収集したツイートも形態素解析し名詞を抜き出し、あらかじめ作った辞書を検索しその名詞が見つかればそのツイートは取り除く。
あとはテキストファイルに格納したツイートを適当に抜き出ししゃべらせる。
問題は人間の質問に答えられるbotをどう作るかだろう。 あるいは人間とマトモな会話ができるbot。 これはかなり時間がかかりそうだ。
手間をかけずに楽しめるbotを作る方がおもしろい。
自分に向けられた発言への類推は難しいよな。
品詞ごとに分けておおまかな意味を推測させようかと考えてはみたが
>>846 マトモに会話してるように見えるbotなら人工無脳にいくつかあるけど
あれらを今から作るってのは手間だしマルコフ連鎖で繋げてそれっぽく見せるのがせいぜいだろうな。
辞書登録してやるとどうしても反応できるワードには限りがあるし。
本気で知能やろうとするとと個人でやるには大変だ。
さくらサーバーでTLに反応するPHPのcron動かしてる人っていますか? リプライとかは平気なのにTL反応のcronだけ削除されてしまいます 中身は銀さんのをほぼ丸写ししただけ。なにが悪いんだろう?
>>849 cronの実行間隔が短すぎるんじゃねーの?
>>850 リプライは3分おきで動いてるのにTLは10分にしても消されました
もっと長くすれば大丈夫かもしれないけどTL反応の間隔が10分以上では遅すぎるし・・・
さくらに聞けよ
>>851 周期が1時間以内だと、消される方が正常
3分で消えないっておかしいな
>>853 そうなのか・・・じゃあさくらサーバー使ってる人でもcronは別な所で動かしてるってことなんですかね?
リプライは平気なのにTLはダメっていうのが不思議だけど、諦めて他の方法で動かすことにします
>>848 俺の目標は、ある人が人間と思ってフォローした人たちが全員botだった、という状況を作ることなのだよ。
遅くなりましたが
>>837 です
>>841 さんのいうcron.xmlでの指定ミスが原因だったようで、urlのところを直したら
すんなり動いてくれました。web.xmlからURLを確認する過程自体をすっとばしていたという、
なんともお粗末な理由でした…
助言をくださった方、ありがとうございます。botが動いて感激です。
cron-job.orgからGAEに変えたんだけど、 GAEのログにファビコンが無いっていうエラーが出まくる 何かファイル追加してファビコンを指定すればいいらしいんだけど 具体的な方法がわからない…どこかに参考になるサイトとかないかな?
>>854 さくらだけど消されてないよ。
GAEで動かしてるからかな?
>>857 ブラウザでアクセスするのやめる
あ、すまん。 さくらの人が消されたのはcronの方か。 勘違いしてた
860 :
nobodyさん :2010/01/08(金) 17:10:10 ID:voJUVX7V
ごめん、OAuthの話に戻るんだけどさ SDNさんを参考にして、定時はいけたんだけどリプライとTLがいまいちなんだ。 エラーも出ないでクライアント名とかリプライ元つきで返してくれているんだけど、 なんか叩くとめっちゃ返してくる… 前に答えたやつにも重複して返すし、tmpがうまく読めてないんかな。 初心者ですまない…元々銀次さんの所のコピペに頼りきりだったからどうしてすれば良いかわからないんだ。 教えてくれると凄く幸せになれるんだが…
>>860 銀さんとこのリプライソースでいいんだな?
リプライソースの中の
$ch = curl_init();
(中略)
curl_close($ch);
を全部消して、function tweetをSDNさんとこのソースに
tweetの引数は$message以外を削除、って感じで行けると思う
もちろん細かいところは適宜修正してくれ
862 :
nobodyさん :2010/01/08(金) 17:57:17 ID:voJUVX7V
>>861 ありがと。
でもごめん、その通りにしたら
<?xml version="1.0" encoding="UTF-8" ?>
- <hash>
<request>/statuses/update.xml</request>
<error>Incorrect signature</error>
</hash>
て@ページでエラーでたんだけどorz
function tweetの中が間違ってるんかな。
それともrequire_onceの場所がおかしいとか…?
もう訳わからんよ…細かいところの修正が出来てないからかな。
頭悪くてごめんな。
一回貼ったほうがわかりやすい?
>>862 あーごめん
$ch = curl_init();
(中略)
curl_close($ch);
は消さなくてもいいや(OAuth認証でTL取得しない場合は)
消した場合(OAuth認証でTLを取得する場合)は
$XML = simplexml_load_string($result);
のところも変えないと駄目
865 :
nobodyさん :2010/01/08(金) 18:32:53 ID:voJUVX7V
>>864 お、ごめん長くて貼れなくて苦戦してた…
$XML = simplexml_load_string($result);
の部分なんだけど、ごめんどういじれば良い?
SDNさんとこのをそのまま使うんならこんな感じかな。ソース汚いけど if(!empty($line)){ $last_id = $line; }else{ $cnt = "1"; } $consumer_key = "consumer_key"; // Consumer keyの値 $consumer_secret = "consumer_secret"; // Consumer secretの値 $access_token = "access_token"; // Access Tokenの値 $access_token_secret = "access_token_secret"; // Access Token Secretの値 // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); // TwitterからGETする if(($cnt != null)&&($last_id != null)){ $req = $to->OAuthRequest($host,array("count"=>$pcount,"since_id"=>$last_id),"GET"); }else if(($cnt != null)&&($last_id == null)){ $req = $to->OAuthRequest($host,array("count"=>$cnt),"GET"); }else if(($cnt == null)&&($last_id != null)){ $req = $to->OAuthRequest($host,array("since_id"=>$last_id),"GET"); }else{ $req = $to->OAuthRequest($host,array(),"GET"); } $XML = simplexml_load_string($req);
うおっと、またミスった $pcountになってるところは$cntで…orz
868 :
nobodyさん :2010/01/08(金) 20:09:05 ID:voJUVX7V
>>867 うわーごめん、何かほんと頭悪いみたい。
TLとかリプライいじってみたけど、返事しないわ…orz
そもそも基本的なこと間違えてる気がしてならない…
ちょっと基本的な事勉強してくるわ、協力してくれてありがと。
銀次さんのとこの方法は重くなるからcronに向かないな。 さくらで勝手に削除されたのもそのせいだと思う 問題はその重いスクリプトを多くの人が参考にしてるってことだ
自分でOAuthの実装してたんだけど、 アクセストークンと認証トークンの取得までいけた。 で、APIアクセスしようとおもったら Incorrect signatureっていわれた これってoauth_signatureの作り方が間違ってるのかな?
>>870 自分もその表示が出て、対処方法が全然判らなかったから
一度全部消して、また最初からやり直したらいけたよ。
全然参考になってないけど…体験者より。
ついったは人工無能の分野でも研究対象になんのかな
ぜんぜんならない、効率悪い。 しかし、話題性があるから薄っぺらな内容でも 凄い事のようにマスコミが持ち上げてくれる。
シグネチャ作るときのURLが固定だったのが原因だった 直したらTweetできたやったあああああああ
>>869 PHPにアクセスするとしょっちゅうタイムアウトエラーが出るんだけど、これもそのせいかな?
そのおかげでcronがちゃんと動いていてもポストされないみたいなんだ
>>876 869じゃないけどたぶんそのせいだと思う。
cron-jobはただ単に指定したURLを叩くだけだったから、特に削除されるとかないし組み合わせ的には最適だったと思うよ。
>>860-868 あたりを読んで自分なりに実装したんだけどちっとも動いてくれない…。
//ポスト部分の関数
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret,$message);
function tweet($username,$password,$id)
{
$message = urlencode($message);
$ch = curl_init();
★$req = $to->OAuthRequest("
https://twitter.com/statuses/update.xml ",array("status"=>"$message"),"POST");
curl_close($ch);
}
header("Content-Type: application/xml");
echo $req;
という風にしたら「Fatal error: Call to a member function OAuthRequest() on a non-object in★の行」というエラーが出てきてしまう…。
OAuthでリプライできてる方、ポスト部分はどうなってますでしょうか。
鯖はロリポでPHP5みたいです。
わあなんだか余計な改行が挟まれてる 見にくくてすいません…
>>878 function tweet$username,$password,$id)を、
function tweet($consumer_key,$consumer_secret,$access_token,$access_token_secret,$message,$to)にするか、
$toをfunction内に書けば多分エラーが出なくなるはず
urlencodeは書いておいたほうがいいかもしれないけど、とりあえずcurlは書かなくておk
でもこれだといちいち呼び出さなきゃいけないから、適当なところに$toと$reqを書いたほうが楽だし軽くなると思う
ここの人たちはわかってるんだろうけど、最近は特定ワードを拾ってきて 無差別でフォローしてない相手にもリプライするbotが目に付くようになったね。 ああいうつまんないことで反感買って印象悪くするのは避けたいもんだね。
プログラミングができなくても〜を参考にbot作ってます。 話しかけられた時、指定した単語が入ってないと「もう一回言って?」みたいな反応させたいんだけど、 こういう時はどうすればよいですか。
>>882 話しかけられた内容に指定ワードがあるかを検索したらいいだけだと思うが
>>882 phaさんが設置したbot用掲示板に書いてある
すこしはログ見るとかしてみないか?
885 :
882 :2010/01/09(土) 12:59:27 ID:???
本当だ、ちゃんと見てなかった・・・失礼しました
8bitさんのスクリプトをOAuthで動かしたくていろいろ弄ってるんだけどうまくいかない 「ライブラリを読み込む」の部分をSDNさんの「twitterOAuth.phpを読み込む」に 「Twitterからタイムラインを取得」をSDNさんの「例えば、TLを取得するのなら」に それぞれ変更してるんだけど Warning: array_reverse() [function.array-reverse]: The argument should be an array in /home~.php on line 33 ($reply = array_reverse($reply);の行) Warning: Invalid argument supplied for foreach() in /home~.php on line 41 (foreach($reply as $rep){ の行) というエラーが出る。これってTLが読み込めてないってことなのかな? もしかしたら全然見当違いなことしてるかもしれない・・・
自分宛以外のリプレイで「@nantoka こんにちわ」という文にbotが「こんにちわ」に 反応しないようにするにはどうしたらいいのでしょうか… if( $screen_name == $username){ //POSTが自分のPOSTだった場合にサブルーチンから抜ける return; } if( preg_match("/\@$username/",$text)){ //POST内容に「/」で囲まれた中で書かれた文字列(この場合$username=@botのアカウント(自分へのリプライ))を探し、あった場合に次の処理に入る。無かったら対応する括弧以降へ飛ぶ if( preg_match("/RT/",$text)){ //POST内に「RT」があるかどうか調べる return; //「RT」がPOST内にあったので、処理を中断してサブルーチンから抜ける } ここらへんを変更するのかな?と思って色々触ってるのですが、どうしてもできません…
>>880 ありがとうございます。
ttp://mini.bitter.jp/oauth_reply.txt アドバイスを見ながら書いてみたものが上のURLの物になります($toをfunction tweet()の下に入れてみました)
が、このようにすると
XML パースエラー: 要素が見つかりません。
URL:
http:// 〜oauth_reply.php
行番号: 1, 列番号: 1:
というエラーが出てきてしまいます。このエラーでググってみてもイマイチこの場合と結びつかないというか…。
oAuthにむりに固執しなくていいんじゃない?
6月以降はベーシック認証が「非推奨」になるんだっけ どうしたもんかな…
きちんと検証してないけど、こんな感じで動かないかな?
<?php
$username = "1111";
$key = "3333";
$consumer_key = "4444";
$consumer_secret = "5555";
$access_token = "6666";
$access_token_secret = "7777";
$filename = "data/data.dat";
$host = "
http://twitter.com/statuses/mentions.xml ";
$fp = @fopen($filename,'rb') or die("ファイルが開けません");
flock($fp, LOCK_EX);
$line = fgets($fp, 64);
fclose($fp);
if(!empty($line)){
$last_id=$line;
}else{
$cnt = "1";
}
$XML = getObjOAuth($host,$cnt,$last_id,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret);
>>891 の続き
$i = count($XML)-1;
$j = 0;
while($i >= $j) {
$var = $XML->status[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$id= $XML->status[$i]->id;
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;
$message = serif($reply_name,$name,$com);
//かえって来た値がnullじゃない場合のみ投稿する
if ($message != null){
tweetOAuth($message,$id,$key,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret);
}
$i--;
}
$string = $XML->status[0]->id;
if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}
function serif($reply_name,$name,$com){
(省略)
}
>>892 の続き
//OAuth経由でTwitterに投稿する
function tweetOAuth($message,$id,$key,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
$message = mb_convert_encoding($message, "UTF-8","ASCII,JIS,UTF-8,EUC-JP,SJIS");
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterへPOSTする。パラメーターは配列に格納する
$req = $to->OAuthRequest("
https://twitter.com/statuses/update.xml ",array("status"=>$message,"in_reply_to_status_id"=>"$id"),"POST");
}
//OAuth経由でTwitterから取得
function getObjOAuth($host,$cnt,$last_id,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
// OAuthオブジェクト生成
$to = new TwitterOAuth($host,$consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterからGETする
if(($cnt != null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt,"since_id"=>$last_id),"GET");
}else if(($cnt != null)&&($last_id == null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt),"GET");
}else if(($cnt == null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("since_id"=>$last_id),"GET");
}else{
$req = $to->OAuthRequest($host,array(),"GET");
}
$req_array = simplexml_load_string($req);
return $req_array;
}
?>
>>887 8bitnoteさんとこのスクリプトだと思うけどそこは関係ないよ
その下の
elseif( preg_match("/眠い/",$text)){ //上記で調べた自分へのリプライがなかった場合にこの処理に移る。POST内容に眠いが含まれていたら次の処理に移る
の前に@が含まれるpostを弾く処理を入れればいいはず
895 :
888 :2010/01/10(日) 01:00:53 ID:???
>>891-893 ソースありがとうございます!
891さんのソースをコピペして動かしてみた結果、Arrayという文字だけはPOSTしてくれるようになりました。
もうちょっとどうにかしてこようとおもいます。
ありがとうございました!
>>894 回答ありがとうございます
このPHPにはbotへの@リプライとTLから特定単語を拾ってリプライする動きを書いてます
@が含まれるpostを弾くと、このbotへのリプライに反応する事ができなくなってしまいます…
また
if( $screen_name != $username){ //POSTが自分のPOSTではなかった場合にサブルーチンから抜ける
return;
}
を打ってみたのですがやはりエラーが出ました
>>896 「botへのリプライ以外の」@を弾くだけだから大丈夫なはずだけど…
ちなみにうちではこんな感じで、反応語のチェックはswitchで書いてる
if( $screen_name == $username){ //POSTが自分のPOSTだった場合にサブルーチンから抜ける
return;
}if( preg_match("/\@$username/",$text)){ //POST内容にry
(略)
}elseif(! preg_match("/^[0-5]{0,1}$/",$now_g)){ //botが寝てる0〜5時台でなければTL反応させる
switch(true){
case preg_match("/\@/",$text) : return; //他の人への@ならサブルーチンから抜ける←これでbot宛以外のリプライには反応しない
break;
(略)
default : return;
break;
}
}
else{return;}
>>891 の通りにやってみたら、PHPにアクセスすると真っ白の画面が出るようになってしまった
エラー表示されないから何が何だか・・・
>>891 の
$username = "1111";
$key = "3333";
が何だかわからないんだけど、ごめん参考元?ってなにになるのかな?
>>899 ごめん$key要らない・・・
自分は複数BOT作ってて複数でも使いまわせるようにしてるんで、その名残だ
要らないところ削除して直したつもりが残ってたみたい
>>898 >>891 のソースにはどこにも出力命令が無いんだから
ブラウザでアクセスして何も表示されないのは当たり前だろ
>>902 ごめん。真っ白になるだけでポストしないからどこかにエラーが出るはずだと思ったんだけど
さっき確認したら今まで普通に動いていた別のスクリプトでも同じ現象が起こった
そっちは弄ってないから原因は
>>891 ではないみたい
自動フォロー返し時にDM送るようにしてるんだけど たまにフォローだけしてDM送られなかったりフォロー失敗してDMだけ送られたりする この問題解消するときってどうすりゃいいのかな
すみません初心者で簡単な質問ですが、分かる方は教えて頂けると助かります… (例)「おかえり、今日の夕飯は○○ですよ」 という文章で、○○の部分をランダムで変えたいのですがプログラムが分かりません $mesi = array("和食","洋食","中華"); と書いて、 $mes['night'] = array( //夜の時間に発言 "おかえり、今日の夕飯は $mesi ですよ"); とやっているのですが、「おかえり、今日の夕飯はArrayですよ」と表示されてしまいます
>>905 > $mesi = array("和食","洋食","中華");
>
> と書いて、
>
> $mes['night'] = array( //夜の時間に発言
> "おかえり、今日の夕飯は $mesi ですよ");
$mesi = array("和食","洋食","中華");
$num = array_rand($mesi,1);
$mes['night'] = array(
"おかえり、今日の夕飯は $mesi[$num] ですよ");
でいいと思う。
>>906 早い回答ありがとう!
ついでに聞いておきたいんですが、$num = array_rand($mesi,1);の1ってなんの意味?
この中から1つ選ぶ…って事?
つ公式PHPマニュアル
API叩いた後に応答情報あるでしょ。 それが正しく帰ってきてればOKでいいじゃん。
php叩いても成功した時はなにも文章が出てきません…
そしてまた行き詰ったんだが、
>>906 やり方でやってみたら
ときどき何もランダム単語表示されない時がある…
「おかえり、今日の夕飯は ですよ」
みたいな感じ
飯抜きだったんだよ
だれうま
自己解決したままじゃなくてどうやって解決したまで書かないと
>>849 ですが8bitさんのスクリプトを使ってみたらさくらでもcron消されませんでした
GAEやろうとして行き詰まってたところだったから助かった!
@をもらうとおみくじを返す系のbotを製作中の初心者です。 phpを2分おきにGAEのcronで叩いてるんですが、タイムアウトにひっかかっているらしく、 たとえば30分以内の@に対しおみくじを返すように設定しても15回中5〜8回程度しか返って来ません。 これを「ひとつの@につきひとつのリプライを返す」というふうに、php側で処理することは可能でしょうか? GAEのtask queuesも試してみたんですが、This queue is empty.と出て動きません。 きっと非常に初歩的なミスをしているのだと思いますが、どちらかについてご存知の方は ご助言をお願いしますorz
リプライしても無視し続けたらボットだってバレるかな?
>>916 重くなってる処理はないか確認してみる
GAEはだいたい4~8秒くらいでタイムアウトになるからその分処理を軽くしなければならないよ
まあ晒せる範囲でソース晒してみたら
>>916 同文の投稿制限にひっかかってるとかもあるんじゃないのか
投稿関係でうまくいかないときって、連投規制に引っかかってることが多いよ
サーバー自体がおかしいのかね demoでログインしたらサーバーのcp.phpが入ってた チェック中なのかな?明日には直ってくれるといいね
途中送信した。 今まで調子よかったのになんで急に…入金したばっかりなのに
SetCronJobはもう、このURLに達することができません。 誤り: 接続は外で調節しました。 有料垢だろうがjpドメインの鯖を規制してるっぽい。
えええ金取ってそれって詐欺じゃん
垢自体は凍結されてないので@PAGEからXREAに変えたら使えた。
申し訳ございません。 現在、一般向け無料サーバーの募集は行っておりません。 次期募集をお待ち下さい。 XREA…(´・ω:;.:...
完全に金かけずにやるのはもう厳しいな
>>845 詳しい作り方をblogとかに公開すればアクセス稼げるよきっと
URL転送サービスでURL変えて登録だと動かない?
GAE使えば無料じゃないか
どうも。cronのクローン作るとか言っていた香具師です。 sendmail,postfixが言う事を聞かないのでメールに頼らない認証方法を確立したいのですが、どうすれば良いでしょう…(人任せ) せっかくTwit専用なのだしtwitterのアカウント経由で認証するのもありだと思います。 そうすれば管理もtitter経由で可能になりますし。 いかがでしょう。
SetCronJobの有料垢だけど、管理者からメールきてて jpドメインでも使えるようにする案と、場合によっては返金するよって内容のものだった。 自分は自力で使えるようになったけど一応、対応はしてくれるみたいでちょっと安心した
無料でもjpドメイン使えるようになって欲しいな…
phaさんのリプライスクリプトにGAEを組み合わせて使ってるんだけど、 スクリプト中の「何分以内にもらったリプライを読み込む」を2分に、GAEのcronファイルも2分毎に更新にしてあるんだけど、どうも取りこぼしがあるみたいなんだよね。 そういうもん?
そうでもない
>>936 GAEが誤差があるからな
$limittime = $now - $cron * 60;
ここを変えれば良い
自分は62にしてる
それでも取りこぼしはあるけどね
あまり秒数を増やすと今度は2重投稿しちゃうよ
@pages使いでFree Web Cron Serviceでcron設定してるんだけど 一切反応しない… 5分間隔と20分間隔にしているんだけど何が原因なんだろう
今人間と会話できるbot作ってるんだけど、アルゴリズムが難しいんだ。 特に感情を持たせるにはどうすればいいかアイディアをくれないか? 一応疑問文に応答するアルゴリズムは大方できてるんだ。 問題は人間らしい感情をどうやって持たせるかなんだ。
>>941 感情のパラメータを作成して、単語ごとにエモーショナルレベルを設けて喜、哀、憂、怒などに数値を加算して表現してはいかがか
date_default_timezone_set('Asia/Tokyo'); $today = getdate(); $day1 = (55-date(z)); で日付取得と残り日数を計算して 今日は${today['mon']}月${today['mday']}日です。〜〜まであと".$day1."日です っていうカウントダウンをポストしているんだが、定期だとうまく行くんだがリプレイだと日付が取得できないんだ。 リプライに対応するためにはソース書きなおさなきゃだめなのかな?
なんでリプライだと日付が取得できんの?
今日は${today['mon']}月${today['mday']}日です。〜〜まであと".$day1."日です 今日は月日です。〜〜まであと日です。 ってなるんだ。 理由は私が聞きたい\(^O^)/
両脇に半角スペース入れてみたら? 私も同じような事なった事あるけど、半角スペース入れたら直ったよ
>>947 ""でくくらなくてよくないか?
""の中に直接変数を書き込めなかったっけ
"〜〜まであと$day日です"でおkだったと思う
>>947 引数が渡ってないとかじゃないかな
取得をまるっとユーザー関数の内側に入れてみてはどうだろう
見当違いだったらごめん
>>947 その中の変数を取得してから表示するまで処理ごとに表示してみればいんでないの。
変数のセットが関数外で、表示は関数内なのにglobal宣言してないとかはよくある話。
フレンド発言取り込んでマルコフ連鎖にしてるbot作ってみてるけど URLとかRTとかノイズ除去するのがわりと手間だね。
1つのbotに絡み続けるbotを作ってるんだけど bot製作のblogとか見ながら作ると「1人の人への連続replyはしない」ようになってるから 誰かを間に挟まないと(もしくはdata.txtの中身を消さないと)リプライしてくれない。 どうすればいいかわからん・・・。誰か教えてください
どのブログを見てどういうbotを使ってんのか説明してもらわんとエスパーじゃないんでわからんよ。
>>956 ああすまん。「銀さんのbot」と「プログラミングを始める〜」を参考に
設置サーバーも銀さんと同じところにしてる。
とあるbotが特定の言葉をつぶやいたら、それに@で返信させるようにしたいと思ってる
TLに反応させてリプライさせる「プログラミングを〜」にあったものをほぼコピペしてます
自分のブログにも書いたりしてますが、cron-jobのクローンの設定法はtwitter経由でいいですか? botに発言してスケジュール管理です。
botにfollowers抜かれた\(^o^)/
>>957 落ちついて処理を一歩一歩理解するんだ
それでも分からなかったら聞け
>>827 >>829 と同じようにGAEが起動できなくなってしまったんだが…
原因がわからん。わかる人いないかな…
ボットジェネレーターの質問とかもここでしていいの?
動かない時はエラーメッセージを読もう
966 :
964 :2010/01/17(日) 09:19:39 ID:???
エラーは出てなくて、特定ワードを含まない時のリプライが返ってきたんだ bardothodolさんのとこのと色々当てはめてやってみたんだけど $replies2も$iも見当たらなくて何に当てはめ直せばいいのかがわからなかったorz もうちょっと睨めっこしてみます
そういう時は変数の中身を出力してみてどこで想定外の動作になっているか確認するんだ
ボットジェネレーターの質問もここでいいのかわからないけど質問。 たとえば「おはよう」に対して「おはよう」と「グッドモーニン」の二種類のリプで返したい場合、 「おはよう」を受け取ると「おはよう」と返信 「おはよう」を受け取ると「グッドモーニン」と返信 こう二行やるのと 「おはよう」を受け取ると「おはよう","グッドモーニン」と返信 こうやるの、どっちがちゃんと動くんでしょうか
そのBOTのコードによる
>>827 >>961 自分もエラーが出てGAE Launcher動かないんだが
コマンドプロンプトにコマンド直打ちでデプロイ出来たよ
>968ですが自己解決しました。前者で動くみたいです。 スレ汚し失礼しました。
GAEのcronでリプライに反応するプログラム動かすと、失敗ばっかりしてる。 スクリプトが重いのかな
>>972 Twitterに単純にPostするだけのスクリプトと比べて重いの?
ttp://d.hatena.ne.jp/bardothodol/20090930#p1 ここのソースを借りてTL上の単語に反応するようにしたいと思っています。
手動でブラウザからphp叩けばきちんと動くんですが
cronで叩くと「ファイルが開けません 」というメールが返って来てしまい、動作しません
ソース見た限りではおそらくdatファイルが開けないという事だと思うんですが…
手動でやる分には問題無いのでcron側の問題でしょうか
メールでphpのエラーメッセージを持ってきているので
cronの実行コマンドのファイルパスは合っていると思います。
プログラミング・cron等は全く手をつけたことがなくて、色々調べてみたのですが
分かりませんでした。
解決方法ご存じの方いらっしゃいませんでしょうか。
>>975 ソースうpが原則です、その方がスグに解決しますよ
パーミッション設定してないだけじゃねーの?
978 :
975 :2010/01/18(月) 04:13:21 ID:???
>>978 cronを使うと途端にファイルが開けなくなる場合は、ファイルのパス指定で間違えてるのがほとんど。
スレ違いかもしれないけど、良かったら教えてほしい 今度マルコフ搭載したボット作ろうと思うんだけど、ちゃんと勉強したい プログラムを自分で組めるまではいかなくても、改変出来る程度の知識を身に付けたいと思ってる なんか良いおすすめの本とかあるかな? ちなみに自分のレベルは毛の生えた初心者
プログラム全くわかんないならまずphp初心者スレでも見てあそこのテンプレのURL一通り見てくればいんじゃないの。 マルコフ連鎖とか形態素解析とかそういうのは最低限の土台できてからであって いきなりやろうとしてもろくなことにならんよ。
982 :
nobodyさん :2010/01/18(月) 14:19:22 ID:scJ7qSxR
>>829 google_appengine_projects.ini
を探して消す。
bot製作者の方に質問なんですが よく解除するときはリムーブじゃなくブロックしてくれってあるのはどうしてですか? リムーブだとなにかまずいんでしょうか
>>983 リムーブされてもbotからのフォローが残るからでは?
>>983 管理が面倒臭いからじゃない?
フォローしてる人に話しかけるタイプのbotだったりしたら
リムられてるのに話しかけてしまうのは迷惑だろうから
フォロワーとフォローは同じにしておきたいと思うんじゃないか
986 :
975 :2010/01/18(月) 15:50:11 ID:???
>>979 cronの実行コマンドのパスでしょうか?
何度も確認してみたのですが、やはりファイルパスは合っています
正常に動くphpと同じディレクトリに入れてあるので、それをコピペしてファイル名書き換えてます
動いているもの→/usr/local/bin/php /home/*****/public_html/*****/post_random.php
動かないもの→/usr/local/bin/php /home/*****/public_html/*****/reply_tlget.php
ちなみにphpのパーミッション設定も変えてみましたが、ダメだったようです。
>>986 $filenameの方を絶対パスにしてみて
988 :
975 :2010/01/18(月) 17:30:36 ID:???
>>987 それで動くようになりました!!
反応が不安定ですがとりあえず動くようになりました!!
不安定なのはphpの問題っぽいので自力で何とかしてみます
本当にありがとうございました!!
>>980 相当難しくなると思う。
初心者ならまずphpでいろんなbot作って基礎を確実にして。
マルコフ連鎖もWikipediaだけではよくわからないと思う。
個人的に思うんだが、マルコフ連鎖を使って呟かせるより他の人の過去の呟きを拾ってbotに呟かせたほうがより人間っぽいと思う。まぁ楽しむ目的でbotつくるならマルコフ連鎖でもいいけど。
そういや次スレはどうするんだ?
お邪魔します。phaさんの配布されている物を使って作成したbotなのですが、 複数件リプライを貰っているのに最新1件のリプライにしか反応(返事を)しない場合はどのような原因が考えられるでしょうか? ちなみに手動で叩いてみてもやはり最新1件のリプライにしか反応しませんorz
>>993 そのプログラムのリプライ処理の部分を書いてくれ
だれか次スレ立ててくれ
おまんこ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。