「ver.2.0/応用/機能追加/postRandom」の編集履歴(バックアップ)一覧に戻る

ver.2.0/応用/機能追加/postRandom - (2014/02/03 (月) 00:39:36) のソース

※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。
#contents

*○月○日だけ違うファイルを読み込ませ、ランダムPOSTさせたい [#mc37f673]
bot.php内
 $response = $eb->postRandom("data.txt");
だと通常、data.txt内の一行をランダムにPOSTします。
これを
 switch(date("m.d")){
	case "06.01":
	$postfile = "specialdata.txt";
	break;
	default:
	$postfile = "data.txt";
 }
 $response = $eb->postRandom($postfile);//ランダムPOST
とすることで6月1日のみspecialdata.txt内の一行をランダムPOSTします。

**○月○日から△日までだけ違うファイルを読み込まる。 [#sabc59c4]
bot.php内
 $response = $eb->postRandom("data.txt");
だと通常、data.txt内の一行をランダムにPOSTします。
これを
 switch(true){
	case (date("m") == 6 && date("i") > 9 && date("i") < 16):
	$postfile = "specialdata.txt";
	break;
	default:
	$postfile = "data.txt";
 }
 $response = $eb->postRandom($postfile);//ランダムPOST
とすることで6月10日から15日の間のみspecialdata.txt内の一行をランダムPOSTします。


*ランダムPOSTで複数のファイルからランダムに発言させたい [#taae1569]
bot.php内
 $response = $eb->postRandom("data.txt");
だと通常、data.txt内の一行をランダムにPOSTします。
これを
 $randfile = array("one.txt","two.txt");//ランダムPOST-ファイル名
 $response = $eb->postRandom($randfile[array_rand($randfile)]);//ランダムPOST
とすることでone.txtかtwo.txtをランダムに選び、更にtxt内の一行をランダムにPOSTします。
人格を分けて発言させたい場合、one.txtに1人格目・two.txtに2人格目のセリフを入れましょう。

**人格名をフッターに追加したい場合 [#t7fb77c2]
EasyBotter.php内
 //ランダムにポスト
 function postRandom($datafile = "data.txt"){
 (略)   
	//idなどの変換
	if(preg_match("@{.+?}@",$status) == 1){
		$status = $this->convertText($status);
	}
とある部分を探して下さい。これの直後に
 //■■人格名フッター追加■■
 switch($datafile){
	case "one.txt":
	$reply_pattern_name = " ▲▲▲";
	$status .= $reply_pattern_name;
	break;
	case "two.txt":
	$reply_pattern_name = " ●●●";
	$status .= $reply_pattern_name;
	break;
 }
を追記する。
こうすることで例えばone.txt内の「あいうえお」と言うセリフをランダムPOSTする時、「あいうえお ▲▲▲」と言った形で発言します。


*ランダムPOSTで発言を重複させない様にする [#j9bda5e7]
ソースは Twitter Bot BBS [[http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1259840844/5-6]]

EasyBotter.php内の
 //発言を作る
 function makeTweet($file, $number = FALSE){
の直前に
 //■■ランダムPOST・重複チェック■■
 function rento_check($file){
        if(empty($this->_tweetData[$file])){
		$this->_tweetData[$file] = $this->readDataFile($file);
        }
	$rento_limit = 10; // n個前まで投稿を記録し、二重投稿を回避する
	$twit_logfile = "twit_log.txt";
	//$twit_logfileは存在するか?
	if(!file_exists($twit_logfile)){
		touch($twit_logfile) or die('ファイル作成に失敗\n');
		chmod($twit_logfile, 0606) or die('権限変更に失敗\n');//※パーミッションは鯖によって違います
	}
	$Posttweets = file_get_contents($twit_logfile); // 読み込み
	$p_tw = explode("\n", $Posttweets); // 配列に格納
	$status = $this->_tweetData[$file][array_rand($this->_tweetData[$file])];
	while(true) {
		if(in_array($status, $p_tw)){ //発言にあるか?無ければ抜ける
			//発言をランダムに一つ選ぶ
			$status = $this->_tweetData[$file][array_rand($this->_tweetData[$file])];
		}else{ break; } //無ければ抜ける
	}
	$p_tw2[0] = $status;//投稿ログをローテート
	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 $status; //違う文を戻り値として返す
 }
を追記する。

 //ランダムにポスト
 function postRandom($datafile = "data.txt"){
  $status = $this->makeTweet($datafile);
の
 $status = $this->makeTweet($datafile);
を
 $status = $this->rento_check($datafile);
へ変更する。
空のtwit_log.txtを作成し、アップロードする。※ログファイル用のパーミッションに。
※なくても自動作成するように記述はしてありますが、動かない場合もありますので自分で作成してうpするのが確実

*コメント [#u24d7adf]
- ランダムPOSTで発言を重複させない様にする を書き込みましたが。重複するエラーが出ます。また、5回連続でランダムポストを繰り返すにはどうしたらいいですか。  -- 安井一博  (2011-01-15 20:41:51)
- 複数ファイルから、ランダムに1行を抜き出し、ひとつの発言として結合させてポストするにはどうすれば良いのでしょうか。  -- 小林一郎  (2011-03-04 11:47:01)
- 日付ではなく、曜日で発言内容の変更(特定ファイルの読み込み)は可能でしょうか  -- 坂井  (2011-04-13 06:10:44)
- ↑ 可能  -- 名無しさん  (2011-04-17 18:40:38)
- 人格を作って、なおかつifを使って定期的に呟かせるにはどう調節すれば可能でしょうか?  -- 名無し  (2013-01-14 00:18:12)
- このページの内容は2.1版でも特に修正無しに使えますか?  -- 名無しさん  (2013-02-05 14:29:08)
- ランダム発言を重複しないようにする、はダメでした  -- 名無しさん  (2013-02-17 17:54:05)
- ↑ごめん、大嘘ついた。 ランダム発言重複回避はそのまま使えました  -- 名無しさん  (2013-02-17 18:05:30)
- ランダム重複回避は、改行が含まれてると俺の環境ではダメだった  -- 名無しさん  (2014-02-03 00:39:36)
#comment
目安箱バナー