したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

Botの改造方法を紹介するスレ

1 pha :2009/12/03(木) 20:47:24
各所に細かい改造方法をかいてくれている人がいるので、そういうURLを集めたいです。
phaのスクリプトに関するものじゃなくてもいいです。どんなものでも参考になるので。

2 pha :2009/12/03(木) 20:48:18
呟きbotメモ  phaさんのreply_random.phpにおうむ返しを追加するスクリプト
http://mukurobot.blog101.fc2.com/blog-entry-3.html

「「hogehoge」って言って」と話しかけると「hogehoge」って返してくれるサンプル

3 pha :2009/12/03(木) 20:49:41
ぼっと倉庫:phaさんのに単語拾いを実装する場合のメモ。
http://blog.livedoor.jp/bot_1go/archives/1634282.html

相手の発言から名詞を抜き出して発言に利用するサンプル。
Yahoo APIの形態素解析を使ってるのでYahoo APIの登録(無料)が必要。

4 西っち :2009/12/04(金) 19:44:39
時間帯によって読込先のファイル変更する改造です。

記事にはしていないのでURLでなくてすみません…

//$file = "post_random.txt"; //発言を書き込んだファイルの名前(変更可能)
プログラム内に上の一文があるので消すか、コメントアウトする

--
$jikan = idate("H");

switch ($jikan) {
case 0:
case 23:
case 22:
case 21:
$file = "時間帯が22時から0時の時に発言するファイル名.txt";
break;
case 16:
$file = "時間が16時の時に発言するファイル名.txt";
break;
case 18:
$file = "時間が18時の時に発言するファイル名.txt";
break;
default:
$file = "上記時間帯以外に発言するファイル名.txt";
}

--
代わりに上記の条件判定分を入れるとランダムpostを時間帯ごとに違うファイルから読み込めます。
拙いですがもしcron何個も走らせることができないけど、夜と昼で発言内容変えたい人がいましたら使ってみてください。

5 うら :2010/01/15(金) 15:43:14
連続投稿回避関数つくった

// $messageを、投稿ログの各行と比較。違う文を選ぶまでループ。違う文を返します。
// 空のファイルtwit_log.txtをサーバにアップロードし、パーミッションを666に設定してください。
function rento_check(){
 $rento_limit = 10;  // n個前まで投稿を記録し、二重投稿を回避する
 //以前の投稿ログを読み込み
 $Posttweets = file_get_contents('twit_log.txt');  // 読み込み
 $p_tw = explode("\n", $Posttweets);  // 配列に格納
 //発言リストを読み込む
 $tweets = file_get_contents('RandomPost.txt');  //ランダム発言ファイル
 $tweets = trim($tweets);
 $tweets = preg_replace("@\n+@","\n",$tweets);
 $tw = explode("\n", $tweets);
 $message = $tw[array_rand($tw)];  //発言をランダムに一つ選ぶ
 
 while(true) {
   if(in_array($message, $p_tw)){  //発言にあるか?無ければ抜ける
     $message = $tw[array_rand($tw)];  //発言をランダムに一つ選ぶ
   }
   else { break; }  //無ければ抜ける
 }
 //投稿ログをローテート
 $p_tw2[0] = $message;
 for( $i = 1; $i < $rento_limit; $i++ ){  //1から$rento_limit直前まで
   if($p_tw[$i-1]) {
     $p_tw2[$i] = $p_tw[$i-1];  //古いのを送る。例:$p_tw2[1] = $p_tw[0]
   } else { break; }  //投稿が少ない時は抜ける
 }
 $p_tw_output = join("\n",$p_tw2);  //配列結合
 $fp = fopen('twit_log.txt', 'w');  //ファイルオープン
 flock($fp, LOCK_EX);  // ファイルのロック(排他制御)
 fwrite($fp,$p_tw_output);  //ファイル書き込み
 fclose($fp);  //ファイルクローズ
 
 return $message;  //違う文を戻り値として返す
}

6 うら :2010/01/15(金) 15:55:17
>>5を post_random.phpの <? と ?> の間の適当なところに放り込め。最後がいい?
全角空白入ってるから、コピペ注意。
あとは47行目〜54行目の

//発言リストを読み込む
//$tweets = file_get_contents($file);
//$tweets = trim($tweets);
//$tweets = preg_replace("@\n+@","\n",$tweets);
//$tw = explode("\n", $tweets);
//発言をランダムに一つ選ぶ
//$message = $tw[array_rand($tw)];

のようにコメント化して、

$message = rento_check();  //以前と重ならない発言を選ぶ

を直後に入れろ。ファイル名注意な。
うらはphpのプロじゃないので、もっと良いやり方があると思う。
コメント入れたから、各自考えろ。うらのサーバでは動いた。

7 少年ありす :2010/01/30(土) 16:17:47
使わせていただいているBotの改造内容をBlogに記載しましたのでこちらにリンクを貼らせていただきます。

http://shonenalice.seesaa.net/article/139776170.html

改造内容は
■擬似CRON設置の時の修正
■自動的に読み込ませる改造
■間隔を置いてツイートさせる改造
■Webページから投稿内容の追加変更削除を行うプログラム
です。

8 OAuth上での変換 :2010/02/08(月) 04:48:06
&nbsp; &nbsp; &nbsp; &nbsp; //id、名前を変換する
&nbsp; &nbsp; &nbsp; &nbsp; //タイムラインからランダムに最近発言した人のデータを取る
&nbsp; &nbsp; &nbsp; &nbsp; if(preg_match("@{timeline_id}@",$message) === 1){
$timeline_id_result = $to->OAuthRequest("http://twitter.com/statuses/user_timeline.xml?count=20&quot;,array(),&quot;GET&quot;);
preg_match_all("/.*?<screen_name>(.+?)<\/screen_name>/is",$timeline_id_result,$timeline_id_kekka,PREG_SET_ORDER);
$timeline_id_kekkard_keys = array_rand($timeline_id_kekka);
$message = preg_replace("@{timeline_id}@u",$timeline_id_kekka[$timeline_id_kekkard_keys][1],$message);
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; if(preg_match("@{timeline_name}@",$message) === 1){
$timeline_name_result = $to->OAuthRequest("http://twitter.com/statuses/user_timeline.xml?count=20&quot;,array(),&quot;GET&quot;);
preg_match_all("/.*?<name>(.+?)<\/name>/is",$timeline_name_result,$timeline_name_kekka,PREG_SET_ORDER);
$timeline_name_kekkard_keys = array_rand($timeline_name_kekka);
$message = preg_replace("@{timeline_name}@u",$timeline_name_kekka[$timeline_name_kekkard_keys][1],$message);
&nbsp; &nbsp; &nbsp; &nbsp; }

9 名無しさん :2010/02/08(月) 04:50:12
って続き書こうと思ったらNGワードが入ってるようで書き込めないw
同様にfriends.xmlとfollowers.xml呼び出してみてる&hellip;んだけども
これで出来てるんだけど、どうかな&hellip;重いかな?

10 inoue_ben :2010/03/01(月) 12:20:02
既出だったらごめんなさい。

@bot_name 停止「○○の理由で機能を停止します」
@bot_name 開始「お待たせしました。再開します」

などのコマンド送信で、BOTの停止と開始ができるスクリプトを、EasyBotter1.42とEasyBotter2.04beta用に書きましたが、
どなたかにテストとデバグを丸投げしたいと思います。
(私はEasyBotterユーザーではないので...)

もしやっていただけるご親切な方がいらっしゃいましたら、宜しくお願いします。

詳しくは↓とソースのコメントをご覧下さい。
http://twbot.blogspot.com/2010/03/20100227-28bot-phpbotphaeasybotter1.html

@inoue_ben

11 うら :2010/03/10(水) 10:29:34
ええと、ageで。

「簡単じゃない twitter bot」 の作り方メモ 様に Botの緊急停止についてスクリプトと設置方法がありましたので、紹介します。
できればもう、デフォで組み込んで欲しいです > pha 氏

> コマンド送信でBOTの停止・開始を(災害や緊急時のBOT停止)
> http://twbot.blogspot.com/2010/03/20100227-28bot-phpbotphaeasybotter1.html
> EasyBotter用 停止コマンドの設置方法です。
> http://twbot.blogspot.com/2010/03/botbot-easybotter2.html

12 名無しさん :2010/04/11(日) 22:31:58
質問です。

http://wiki.livedoor.jp/easybotter_wiki/にある
ランダムPOSTで発言を重複させない様にするを参考にして
//■■ランダムPOST・重複チェック■■の機能を追加してみたんですけど、
二重投稿の回避機能が上手く機能してないみたいで、ランダムPOSTが重複してしまいます。

//■■ランダムPOST・重複チェック■■以降の部分は

//発言を作る
function makeTweet($file, $number = FALSE){

の前にコピペで追記しましたし
$rento_limit = 10; // n個前まで投稿を記録し、二重投稿を回避する
の10の数字を100に変更した以外は書き換えてません。

//ランダムにポスト
function postRandom($datafile = "data.txt"){
$status = $this->makeTweet($datafile);

の一番下の行もちゃんと
$status = $this->rento_check($datafile);
に書き換えてますし、
サーバーにアップしたtwit_log.txtにはちゃんとbotの発言も記録されてます。

特に間違った事をしてるつもりは無いのですが、一体何がいけないのでしょうか?

13 名無しさん :2010/04/12(月) 00:23:36
>>12
てか100件も台詞あるの?

14 名無しさん :2010/04/23(金) 09:15:36
>>7
こちらで紹介されている
■間隔を置いてツイートさせる改造
というのは
最新のEasyBotter2.04betaでも
動作させることはできるのでしょうか?

EasyBotter.phpに記事通り手を加えて
アプロしてみましたが
cronの間隔でツイートしてしまいました…

15 うら :2010/04/23(金) 12:37:22
自動フォロー返しですが、
鍵つきの相手からフォローを受けた時、相手がフォローを許可しない限り、
延々とフォロー返しをし続けてしまいます。
というわけで、そんな状態を回避するための改造です。

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

16 うら :2010/04/23(金) 12:47:46
>>14
できます。

ま、改造なのできちんと理解した上でやってくださいね。
あと、こちらのスレッドは紹介スレなので、質問はスレ違いですかね。

17 名無しさん :2010/06/18(金) 12:05:26
EasyBotter2.0に特定キーワードを含むリプライを受け取った場合
自動でフォローまたはリムーブを行いリプライを返す改造をしましたので、その方法を書いてみました。

改造ソースを外部サイトに貼り付けましたので、URLの上から順にご覧ください。
ご自身のbotへ組み込む、EasyBotter 非公式wikiへの転載はご自由にどうぞ。
(これから配布されるEasyBotterそのものに組み込んでもらってもかまいません。)
ただし、このソースが必ず動く保証はできません。テストはしてください。
もっといい方法や間違いがありましたら、教えていただけると幸いです。

ttp://paste.pocoo.org/show/CRlqoeeMLwSdZPuEteAY/

ttp://paste.pocoo.org/show/Os13ybmGHOKFSpKodzD0/

ttp://paste.pocoo.org/show/rCjoqcO74IIq7T5R6Xgy/

ttp://paste.pocoo.org/show/5TLWwMg4gwCjzYpeInKF/

ttp://paste.pocoo.org/show/dY6VDKXQzYZg4mQcL3g4/

18 名無しさん :2010/06/18(金) 15:37:47
>>17
if(empty($status) || $status == "[[follow]]"){
if(empty($status) || $status == "[[unfollow]]"){
のempty($status) || って必要あるんでしょうか?
回ってくることはないと思いますが一応・・・

19 名無しさん :2010/06/27(日) 15:37:19
広告スレがかなり多くなったので整理・誘導age

20 名無しさん :2010/07/10(土) 12:57:54
広告スレがすごく多くなったので整理・誘導age

21 名無しさん :2010/09/23(木) 17:45:10
age

22 名無しさん :2010/09/25(土) 15:09:41
整理age

23 名無しさん :2010/10/14(木) 03:02:25
整理age

24 名無しさん :2010/11/05(金) 06:31:51
最近あんまり使われてないけど整理age

25 名無しさん :2010/11/06(土) 16:24:39
整理age

26 名無しさん :2010/11/09(火) 00:21:24
整理age

27 名無しさん :2010/11/11(木) 03:13:47
整理age

28 りょう :2010/12/21(火) 02:08:13
if(!empty($this->_replyPatternData[$replyPatternFile])){
foreach($this->_replyPatternData[$replyPatternFile] as $pattern => $res){
if(preg_match("@"."おはよう"."@u",$reply->text, $matches) === 1){
$honbun = @file_get_contents('sample.html');
echo $honbun."読み取った際の値";
$honbun = mb_convert_encoding($honbun, "EUC-JP","AUTO");
if(get_magic_quotes_gpc()) { $honbun = stripslashes($honbun); }
$filename = "kusaisample.html";
$honbun = $honbun + 1000;
echo $honbun."読み取り後の値";
$handle = fopen( $filename, 'w');
fwrite( $handle, $honbun);
fclose( $handle );


break;
}
}
}


3週間近くこのコードとにらめっこをして悩んでいます。。。

ある特定の単語に反応して、テキストファイルに値を追加していく仕組みを作りたいのですが、どうもうまくいきません。
値を増加させることはできたのですが、
どうにも、特定の単語に反応させることができません。

どなたか、ご教授いただければ幸いです・・・。(泣きそうです

29 名無しさん :2011/01/16(日) 00:21:30
ニックネーム呼称機能。探しても見当たらなかったので作成&公開
もっとシンプルでやりやすく広まっている方法とかあったら教えてください。

Easybotter.php修正箇所
if(strpos($text,"{name}") !== FALSE){
if(!empty($reply)){
require_once 'name.php';
$userName = (string)$reply->user->screen_name;
echo $userName;
if($nameset[$userName]) {
$text = str_replace("{name}",$nameset[$userName],$text);
} else {
$text = str_replace("{name}",$reply->user->name,$text);
}
}else{
$randomTweet = $this->getRandomTweet();
$text = str_replace("{name}",$randomTweet->user->name,$text);
}
}

name.php(新規作成。勿論文字エンコはUTF-8で。)
<?php
$nameset["id1"] = "ほげおくん";
$nameset["id2"] = "ほげこさん";
?>


以上です。なんか●●って呼んで!!っていうと
その名前で呼んでくれるBOTもあるらしいので
その機能も追って追加したいです。

30 名無しさん :2011/02/01(火) 02:08:32
>>29

こちらのサイトを参考にされてはいかがでしょうか?
http://twbot.blogspot.com/2010_08_01_archive.html

「〇〇」って呼んでって言うと、それ以降は「〇〇さん」と呼んでくれるそうですが、
試してみたところ、さん付けにはなったんですが、名前は以前のままでした・・・
どっかが間違っていると思うので、それを今から調べてみるところです。

31 29 :2011/02/05(土) 05:23:27
>>30
ありがとうございます!!
あの後、○○って呼んで機能に対応すべく大改造を行い
PHPの参考書やサイト等を閲覧してなんとか実装しましたが
それでもこっちのバグを消してはあっちでバグが…みたいな状態で
半ば諦めかけていました。

そちらのサイトを参考に作成させて頂きます。

32 名無しさん :2011/05/06(金) 19:24:17
>>3
でEasyBotterにYahoo APIの形態素解析の導入の仕方が紹介されていますが、EasyBotterの旧バージョンでの導入の仕方なので、最新バージョンでの導入の仕方が紹介されているサイトなど、どなたかご存知ではありませんか?

33 名無しさん :2011/05/16(月) 22:40:49
>>32
http://www26.atwiki.jp/easybotter_wiki/pages/26.html

34 名無しさん :2011/08/05(金) 19:05:27
こちら、AGEておきます

35 初心者スレ712 :2011/08/09(火) 11:58:28
こちらのスレで合っているのか不安ですが…
初心者スレで質問したところ、頂いた回答を見る限りもう少し発展した内容であるようなので、こちらで質問させて頂くことにしました。

過去スレなどで検索をかけてみたのですが、なかなか見つからなかったので質問させていただきます。
もし私の見落としで似たような質問があったら、すみません。

【バージョン】Ver.2.05
【設置鯖名】 @Pages
【PHPのバージョン】不明
【手動】 動きます
【実行】 GAE-Cron Crubで提供されているもの
【実行間隔】 3分間隔
【不明点】少し長くなってしまいますが、下記のことについて質問させてください。

cronを3分に一回の周期で使っているのですが、TL返信の際に同じ相手に2回返事してしまいます。
一度対応語句に反応して、3分後に作動したときもう一度返信してしまう、ということです。

説明が下手ですいません。

たとえば、
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
bot「@A おはよう!」(7:03)
となってしまうということです。

この二回目の返信をしないようにしたいのですが、いくつか条件があります。
まず、Aが次にツイートしたもののうちに、違う対応語句が入っていた場合にはTL返信できるようにしたい。
例)
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「いってきます」(7:03)
bot「@A いってらっしゃい」(7:03)

二つ目に、リプライには反応するようにしたい。ただし、TL返信と同じように同一のリプライに反応はさせたくない。
○例)このような反応なら大丈夫です。
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「@bot おはようありがとう。元気?」(7:03)
bot「@A 元気です」(7:03)

×例)このようにはしたくありません。
A「おはようございます」(7:00)
bot「@A おはよう!」(7:00)
A「@bot おはようありがとう。元気?」(7:03)
bot「@A 元気です」(7:03)
《ここでAが返信をしなかったとして》
bot「@A 元気です」(7:06)

条件が面倒ですみません。
すべての条件に当てはまらなくてもよいので、同一のツイートに反応しないようにするPHPを教えていただきたいです。

一応PHPの説明などは読んでみたのですが、
一定の時間内に何回リプライをもらったら返事を止める、などの記述は見つかったのですが、同じツイートに返事しないようにする、ということに当てはまった記述がなかなか見つけられなかったので質問させていただきました。
初歩的な質問なのかもしれませんが、回答お待ちしています。

36 名無しさん :2011/08/09(火) 16:23:35
>>35
ここは「紹介」スレ
実際の改造における質問は2.0スレ
板内で紹介された改造なら引用元提示すればいい

37 35 :2011/08/09(火) 17:04:18
>>36
すいませんでした…やはりスレチでしたか…
2.0の方で質問し直したいと思います。
なんども投稿してしまってすみません。

38 名無しさん :2011/08/12(金) 10:31:36
調整あげ

39 saorin :2011/08/31(水) 14:15:30
不景気だと騒がれていますが・・・(#^^)b。 http://tinyurl.k2i.me/Afjh

40 名無しさん :2011/09/25(日) 10:52:51
Ver2.05でも使える、相手の発言を拾ったりしてbotが学習していく方法を紹介しているところはありません?
フォロワーの方々にも好きな言葉を覚えさせてもらって、色々喋れるようにしていきたいんです

41 40 :2011/09/25(日) 10:53:59
あ、あげてなかった・・・どなたかお願いします

42 john3825 :2011/09/25(日) 14:10:13
>>6 を居間版のeasybotterではどうやって使うのですか?

43 名無しさん :2011/12/27(火) 17:43:04
>>30
そのサイト見れなかったんだけど…

44 名無しさん :2011/12/27(火) 19:22:54
半年以上前の書き込みに何いってんのw
そこをさらに改造した別のサイト(複数)でも紹介されてんじゃんwwww

45 名無しさん :2011/12/27(火) 22:53:49
>>44
いや、知りません
ここですよ、なんて教えてくれれば優しい方だなと思ったのですが…
まぁ、ネットの世界なんてそんなものですよね
教えて下さりありがとうございました

46 名無しさん :2011/12/28(水) 04:17:44
紹介スレであって教えてスレじゃないことに気付けないマルチポストまがいには
やさしい人でも教えてくれないと思いますよ
完全なるスレチな上に努力が足りない

47 しゅてるん :2012/04/08(日) 14:25:54
追加求!

48 名無しさん :2012/04/17(火) 10:52:07
空気読まずに。

Easy botterで なんちゃって診断メーカー機能(やっつけ改造)
http://www36.atpages.jp/scubot/adiary/adiary.cgi/scubot/06

単語(文でもOKだけど)が羅列された複数のファイルから、一つずつの
単語を抜き出して、一つの文章を生成してツイート

今、本家診断メーカーみたいに日替わりとかできるように試行錯誤中です。

49 名無しさん :2012/09/11(火) 18:59:07
age

51 名無しさん :2012/11/01(木) 00:58:47
viaをカスタムしたい人用の情報貼っときます

Twitter公式クライアントのコンシューマキー ― Gist
https://gist.github.com/3878505

53 名無しさん :2013/06/01(土) 21:51:27
if (date("G") == 9 && date("i") % 60 == 0){
$response = $eb->postRandom("nemu.php");}
if (date("G") == 17 && date("i") % 60 == 0){
$response = $eb->postRandom("oha.php");}

if(date("i") % 20 == 0 && (date("G") <= 8 || date("G") >= 18)){
$response = $eb->postRandom("data.php");
}elseif (date("i") % 60 == 0 && date("G") % 2 == 0){
$response = $eb->postRandom("data2.php");}

if(date("G") <= 8 || date("G") >= 18){
$response = $eb->reply(4,"data.php","reply_pattern.php");
}else{
$response = $eb->reply(4,"data2.php","reply_uranai.php");}

if(date("G") <= 8 || date("G") > 18){
$response = $eb->replyTimeline(6,"reply_timeline.php");}

お世話になりっぱなしなので紹介しておく
cronの実行間隔が2分なのでリプライ範囲を4分にしている
複数条件の記述ってあんまし記載されてないよね…もっとみんな複数条件記載すればいいのに
まだお勉強中なので、リプライ反応ファイルを分割(複数参照)する方法がわかる方いたら教えて…
|で分岐させたけどうまくいかなかったんだ…


新着レスの表示


名前: E-mail(省略可)

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

■ したらば のおすすめアイテム ■

サクラクエスト 3巻 (まんがタイムKRコミックス) - Alexandre S. D. Celibidache


この欄のアイテムは掲示板管理メニューから自由に変更可能です。


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