【Twitter】 BOT製作支援スレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/27(日) 14:15:59ID:Dz08qoo4[公式] http://twitter.com/
[Twitter 開発ブログ 日本語版] http://twitterjp.blogspot.com/
*どの言語でもOKですがソースを書く際は何の言語なのかも記載してください。
*初心者のために、なるべくぶつ切りのソースではなく全体的に載せてほしいです。
0178nobodyさん
2009/10/24(土) 11:58:22ID:???誰か、TL上のワード拾って反応するBOTのソースくれー!
バカなのは承知してるし勉強もしてるんだー
0181nobodyさん
2009/10/24(土) 14:40:42ID:???IDとパス以外変更してないのになにこれ?
0182nobodyさん
2009/10/24(土) 15:01:23ID:???0184nobodyさん
2009/10/24(土) 16:31:39ID:???1〜2回うまく行ったけどあとはさっぱり
何か考えられる原因があったらご教授願います
0185184
2009/10/24(土) 16:56:22ID:???@ユーザー名の後のスペースが全角になっていました…orz
お恥ずかしい限りですがご報告だけ。
0187nobodyさん
2009/10/25(日) 00:51:07ID:???あれすごい
0188nobodyさん
2009/10/25(日) 11:11:20ID:???これみたいに一部分だけをランダムに組み替えて発言させるにはどうしたらいいの?
0189nobodyさん
2009/10/25(日) 11:22:48ID:QovXst2Y上記のように、特定の言葉(この場合「商店街」)がつぶやかれたものを検索して
自動的にRTするようなBOTの作り方をご存じの方、ご教示願います。
0191nobodyさん
2009/10/25(日) 17:18:48ID:???そんな高度な技術でもないだろ、
とりあえずphaさんのスクリプト例に取るとpost_random.phpのテキストファイルの内容を一行ずつ読み込んでランダムに一つ選択するところと
reply_random.phpのテキストファイル中の{name}を置き換えるところを応用してくっつければ出来る。スクリプト長くなるけど。
0192nobodyさん
2009/10/25(日) 17:45:15ID:???文頭においてPostしてるだけになるんだけど
ちゃんとしたリプライ送るようにするにはどうすればいい?
0193nobodyさん
2009/10/25(日) 18:05:57ID:???"おはよ"と"オハヨ"のどちらにも対応させる(1セットで)には
どうすればいいのでしょうか?
↓な感じにしたいんですが
"おはよ|オハヨ"=> array(
"おはよう",
"おはよ!",
),
0195nobodyさん
2009/10/25(日) 20:20:59ID:???FTPでアスキーモードで転送できてなくて改行が変になってるのかも
FTPでアスキーモードを指定、とやってみたらどうかなあ
わかんないけど
0196nobodyさん
2009/10/25(日) 21:19:37ID:???DSOで。
0198nobodyさん
2009/10/26(月) 02:00:49ID:???0199nobodyさん
2009/10/26(月) 03:07:52ID:???@付きステータスのアップデート時に、in_reply_to_status_id を付ける。
詳しくはAPI仕様書を読んでね。
>>198
適当な間隔でフォロワーやDMのリストを取得して処理すればいい。
API制限もあるし、1度処理したらファイルに記録しておく必要があると思う。
メール通知を利用するって手もありそうだけど、
メールが来ないことが結構あるような・・・・。
0200nobodyさん
2009/10/26(月) 18:23:57ID:???仕様書読みながら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'
));
}
ここにいれればいいの?
0201nobodyさん
2009/10/26(月) 18:25:16ID:???特定のつぶやきを検索するのには検索用APIが用意されているし、
RTの仕方についてはPOST時に適当な書式に沿ってRTを付けるだけ。
(retweet関係のAPIって正式に公開された?)
それらを適度に組み合わせれば清むので、
別段特殊な技術が必要な訳ではないから何も難しいことはないかと。
ところで、twitter.com/syoutengai で検索したら
なにやらひどいコメントが。
ttp://www.google.co.jp/search?pws=0&q=twitter.com/syoutengai
0202nobodyさん
2009/10/26(月) 18:29:46ID:???自動リムーブだけど1日に1回、friends/idsとfollowers/idsの差分とって処理してる。
フォローも似たような案配でいけるんじゃない?
>199
in_reply_to_status_idって返信先ステータスのIDを指定するでいいんだよね?
送出前のヘッダを出力してみるとin_reply_to_status_idの指定がちゃんとしてあるんだけど、
レスポンスみると無視されてるみたいでハマってるんだ
0203200
2009/10/26(月) 18:36:56ID:???似たような事してる人がいた!
自分はこう書き換えした
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));
みたいに書いてたよ
0204nobodyさん
2009/10/26(月) 18:53:10ID:???あいさつをちゃんとしている人(Replyでおはようとか)にはやさしくなっていくとか…
0205nobodyさん
2009/10/26(月) 19:47:55ID:???0206nobodyさん
2009/10/26(月) 20:33:51ID:???おお、助かった!ちょっとやってみ…たらできんかった
エラー起こってないから単にin_reply_to_status_idが取得できてないだけなんかな
0207nobodyさん
2009/10/26(月) 20:39:34ID:???0210nobodyさん
2009/10/27(火) 00:08:03ID:???0211nobodyさん
2009/10/27(火) 00:34:10ID:???0212nobodyさん
2009/10/27(火) 00:36:04ID:???これの場合
$in_reply_to_status_id = $replies2[$i]["in_reply_to_status_id"];
$status = "@".$replies2[$i]["screen_name"]." ".$text;
でいいのか?
0213nobodyさん
2009/10/27(火) 02:46:16ID:???それを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したら『@**** 『●●』だよ』というやつです。
ご存知の方、教えてください
0214nobodyさん
2009/10/27(火) 13:25:06ID:???ごめん>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より小さかったら」って書けば?
0215nobodyさん
2009/10/27(火) 15:03:13ID:???0216nobodyさん
2009/10/27(火) 15:13:33ID:???通常のリプライなしにしたいんだけどできる?例えば「おはよう」にしか反応しないとか。
0218nobodyさん
2009/10/27(火) 17:29:00ID:???214氏が指摘している通り、わざわざpreg_matchを使う必要が元々無いよ。
翻訳機能のソース以前に、自前で自然言語の辞書を持つ事に結構な
リソースが必要なので、大抵は他を呼び出してると思うんだけど。
「翻訳 API」とかで検索すれば結構あるので、それを使うのが手っ取り早い。
特定の単語しか翻訳しない仕様なら、それこそ鸚鵡返しbotで十分だろうし。
0220nobodyさん
2009/10/27(火) 19:28:32ID:???なぜかいきなりエラーになったみたい。
発言はするんだけどリプライしなくなったっぽい。
reply_random.php にアクセスすると
Parse error: syntax error, unexpected '{', expecting ')' in /home/atumari.net/pp259583/public_html/reply_pattern.php on line 181
というのが出るんだけど、これって一体なに?
どこが原因でエラーになってるのかさっぱりわからない…
0223nobodyさん
2009/10/27(火) 22:49:08ID:???誰か教えてくれ
0224nobodyさん
2009/10/27(火) 23:25:26ID:???http://pha22.net/text/twitterbot.html
0225224=@pha
2009/10/27(火) 23:29:15ID:???Services/Twitter/Connector.phpの95行目でリクエストを組み立てるときに
$body .= '&';
ってやってるのが原因だった
$body .= '&';
に変えたらできるようになった。
他にも特定の単語に反応するときに正規表現を使えるようにもしました。
0227nobodyさん
2009/10/28(水) 00:02:18ID:???おつかれさまです。
1つお伺いしたいのですが、バージョンアップをする場合は
tw.txt以外の全てのファイル(Servicesフォルダも)を
入れ替えればいいのでしょうか?
0230nobodyさん
2009/10/28(水) 13:07:25ID:???単純に|で区切るやつにして欲しいです
0231nobodyさん
2009/10/28(水) 13:53:35ID:???0233nobodyさん
2009/10/28(水) 15:50:24ID:???0235nobodyさん
2009/10/28(水) 19:41:20ID:???$body .= '&';
を
$body .= '&';
に変えたということです。
2chって実体参照通るのね。
0236nobodyさん
2009/10/28(水) 19:59:24ID:???正規表現っていうのを初めて使うのですが
『おーい』『おーーーーーい』等の『ー』の数が決まっていない単語の
どちらにも対応させるにはどう書けばいいのでしょうか?
おー*い、おー+い、おー?い、おー(ー)?い ではスルーされて行き詰まってます…
0239236
2009/10/28(水) 20:42:37ID:???すみません、『えーーん』や『うーーん』にも応用したくて…
>>237さんの方法で、『えーーん』→『えー』と指定しまうと
『えーー!』等が引っかかってしまいます。
…ので、>>236の正規表現で煮詰まってます;
0240236
2009/10/28(水) 20:47:27ID:???ありがとうございます。
『お(ー)+い』を試してきましたが、スルーされました…。
スクリプト毎に、使える正規表現というのは
限定されているものなのでしょうか?
0244nobodyさん
2009/10/29(木) 05:48:07ID:???phaさんのサンプルのこん(に)?ち[はわ]すらスルーされる始末
正規表現使わなければ普通に動きます
どこに問題あるんでしょうか…
0245nobodyさん
2009/10/29(木) 11:58:27ID:???有料だけどここ使ってる人いる?
0246nobodyさん
2009/10/29(木) 12:21:28ID:???30秒でタイムアウトするって事だろ。
俺ここ使ってるけどたまにタイムアウトするよ。180秒にした方が無難なんだけど一回に? 0,0004はちょっとイタイ。
0247nobodyさん
2009/10/29(木) 16:55:26ID:???なにがタイムアウトしてそれがどう影響するのか
わからない程度の素人だけど180秒にしたほうが
いいとわかっただけでありがたい
一度試用してみるよーありがとう
0248nobodyさん
2009/10/29(木) 20:29:41ID:???自己解決しました。普通にver1.2つかってたよ、ごめんなさい。
正規表現難しいね
聞(こえ|いて)[んる](の)??
に反応してくんないんだけど、どっか間違ってるかな
0249nobodyさん
2009/10/30(金) 19:30:09ID:???「」の中だけとか
0250nobodyさん
2009/10/30(金) 19:44:57ID:???0251nobodyさん
2009/10/30(金) 20:46:18ID:???0252nobodyさん
2009/10/31(土) 02:12:59ID:???ソースほぼ丸々コピーでやってるのにエラー出てお手上げ状態だよ…
ソース公開してる記事のコメント見るに同じような状況の人もいるっぽいけど
解決してなくてどうしようもねえ
0253nobodyさん
2009/10/31(土) 02:15:45ID:???コピーした他人の奴をぐぐって動くように編集するのが難しいのかよ
まぁそれも力になるさ
0255nobodyさん
2009/11/01(日) 00:14:13ID:???公式の検索使った方がいいのかなぁ…。
0256nobodyさん
2009/11/01(日) 20:41:15ID:???0257nobodyさん
2009/11/02(月) 14:39:36ID:???0258nobodyさん
2009/11/02(月) 22:50:28ID:???無限ループに陥る可能性ある…よな?これ。
APIの回数制限とかあるけども。
0259nobodyさん
2009/11/03(火) 01:01:47ID:???キャラクター系botだとあるある。自分もそれが怖いのでおはようやおやすみのような日常会話系単語にリプライさせられないでいる。
リプライした相手を記録しておいて、投稿前に照合するくらいの対策しか思いつかない。(記録は一日一回クリアするってことで)
botとメッセージをやり取りしないbotなら気にしなくてもいいんだろうけど、自分が作ってるのがキャラ系botなんで、同じキャラbot同士での会話もさせたいんだ。
いろいろやってるうちに好きなだけcron回したくて自分専用のサーバ欲しくなるw
0260nobodyさん
2009/11/03(火) 02:51:05ID:???botからのpostは無視するようにすればいいんじゃないかなぁ
sourceがAPIとかなら無視させるとか botじゃなくてもAPIからの投稿だとスルーしちゃうけど
もしくはbotによくあるスクリーンネーム語尾が〜botなら無視させるとか… これも普通の人が〜botってスクリーンネームだとスルーしちゃうのが難点だな
0261nobodyさん
2009/11/03(火) 05:40:38ID:???昼過ぎにおはようって言うと、「寝坊?」って返すみたいなの
0263nobodyさん
2009/11/03(火) 14:32:48ID:???これって可能?
0265sage
2009/11/04(水) 00:25:58ID:oJ2uxGZIURLコピペで貼ってるから間違いないのに不完全なURLって出る。
時間あけて設定画面開いたら次は重すぎるって出ました。
ファイルが重いのは理解できるがステータス変わるの何でですか?
調べてみたけど分からなかったので分かる人いたら教えてください
0266nobodyさん
2009/11/04(水) 01:01:25ID:???ありがとう!
初心者ながら色々試してみたんだけど、どうにも無視されたり、他の時間帯のこと言ったりする…
実際発言のところに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);
}
}
0267nobodyさん
2009/11/04(水) 01:02:46ID:???なにこれ?
0268nobodyさん
2009/11/04(水) 01:08:25ID:???case ($now_g > '16') && ($now_g < '20') :
$plist = $mes['night'];
swichで時間帯設定したんだけど、発言の部分に「その時間だったら」って内容つけるのに四苦八苦した結果がこれです。
もしかして全然違う?
0269nobodyさん
2009/11/04(水) 01:09:07ID:???上のはswichで設定した分です。
0270nobodyさん
2009/11/04(水) 01:15:13ID:???そういう感じにフォロワーが色々いじってパラメータ変動させられるbotは面白いかもね。
ただしいたずらで無茶苦茶機嫌悪くさせたり病気にもできそうなのと
何よりその手の育成システムはアイデアとプログラムが割りと手間だな。
0272nobodyさん
2009/11/04(水) 01:44:35ID:???えっ!?
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
0273nobodyさん
2009/11/04(水) 02:58:30ID:???if($plist == $mes['night']){
なんじゃない?
0274nobodyさん
2009/11/04(水) 03:59:33ID:???ありがとうございます!正解は==なんですね…
早速=の数を直してみたんですが、やっぱり時間設定に反応してくれません。
if($plist == $mes['night']){はもちろん、if (($now_g == '3') or ($now_g == '4') ){ でも試してみたりしたのですが、完全にスルーです。
$now_g = date('G');も埋め込んであるんですが…なんで反応してくれないのかさっぱりです…
0275nobodyさん
2009/11/04(水) 04:55:42ID:???0276274
2009/11/04(水) 07:17:07ID:???swichはどうやっても反応しないので、諦めていろいろ試行錯誤してたらやっと反応してくれた!!
if($plist == $mes['night']){ の代わりに if(($now_g >= '10') && ($now_g <= '17')){ を個別に指定してみたらできましたー!
結局反応しなかった理由はよくわかんないけど、<= じゃなくて < になってたのも原因のひとつみたたいでした。
アドバイスがなかったら絶対途中でめげてた。聞いてくれた方ありがとうございました!
0277nobodyさん
2009/11/04(水) 07:54:05ID:???多様性とか面白さとかのアイデア方面がなかなかいいのが思いつかないな。
0278nobodyさん
2009/11/06(金) 18:16:08ID:???そうなんだよなあ。ヘタに@に対して定型文返してくるbotより、
単なるRSS垂れ流しの方がずっと有用だったりする現実。
■ このスレッドは過去ログ倉庫に格納されています