Portal:siro

ダイレクトマーケティングブログ

しろぼっとソースコード(一部)

大体こんな感じです。
replyを読み込んで返答する部分のみ。
通常発言のソースは面白みがなく、形態素解析ソースコードはぐぐれば出てきますし、DMに関しては非公開機能も含まれているので公開しません。


なお、Services_Twitterは本家ではなくphaさんの改造版を使用しています(in_reply_toが付けられるver)

<?php
require_once "Services/Twitter.php";
require_once "Services/ShortURL.php";
require_once "Jsphon/Decoder.php";

// 基本部分
$user = 'しろぼっと';
$pass = 'しろぼっとのぱすわーど';
$st =& new Services_Twitter($user, $pass);

// reply機能
// ファイル読み込み
$fp = fopen("【どのstatus_idまでreply完了したか記録するtxt】","r");
$fline = fgets($fp,64);
fclose($fp);
$json = new Jsphon_Decoder();
// replyを取得
$rep = $json->decode($st->getReplies());
// 未処理のreplyに対して[古いほうから]繰り返す
for ($i = 19; $i >= 0 ;$i--){
	if ( $rep[$i]["id"] > $fline && strcmp("sirobot_",$rep[$i]["user"]["screen_name"]) != 0){
		// 自分(sirobot_)からのreplyには反応しない(無限ループ防止)
		
		if ( strpos( $rep[$i]["text"], "やっといて" ) !== false ||
			 strpos( $rep[$i]["text"], "しておいて" ) !== false ) {
			kotowarutikara($i);	// 断る力
		} elseif ( strpos( $rep[$i]["text"], "って覚えといて" ) !== false &&
					strcmp("siro_xx",$rep[$i]["user"]["screen_name"]) == 0){ 
			rememberthemilk($i); // remember the milk機能
		} elseif ( strpos( $rep[$i]["text"], "って記帳して" ) !== false &&
					strcmp("siro_xx",$rep[$i]["user"]["screen_name"]) == 0){ 
			sanzai($i); // 散財.com(家計簿)機能
		 } elseif ( strpos( $rep[$i]["text"], "画像" ) !== false
				|| strpos( $rep[$i]["text"], "写真" ) !== false
				|| strpos( $rep[$i]["text"], "フォトライフ" ) !== false ){
			harahe($i); // はらへ(携帯百景)機能
			// 2010/01/05よりはらへ2(フォトライフ)機能として復活しました!!!!!!
		} elseif ( strpos( $rep[$i]["text"], "点取り" ) !== false
				|| strpos( $rep[$i]["text"], "占い" ) !== false ){
			tentori($i);	// 点取り占い機能
		} elseif ( strpos( $rep[$i]["text"], "ってメールして" ) !== false &&
					strcmp("siro_xx",$rep[$i]["user"]["screen_name"]) == 0){
			kanni_mail($i);	// 簡易メール機能
		}else{
			// 通常のreply作業
			$replymessage_array = file("【リプライ用txtファイル】");
			$rdm = rand(0,count($replymessage_array)-1);
			$reply_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $replymessage_array[$rdm];
			$st->setUpdate(array('status'=>$reply_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
		}
		$fline = $rep[$i]["id"];
	}
}

$fp = fopen("【どのstatus_idまでreply完了したか記録するtxt】","w");
fwrite($fp,$fline,strlen($fline));
fclose($fp);

echo "reply done.";	// デバッグ用


function kotowarutikara($i){	// 断る力機能
	global $st,$rep;
	$reply_kotowarutikara = file("【ことわるちからtxt】");
	$rdm = rand(0,count($reply_kotowarutikara)-1);
	$kotowaru_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $reply_kotowarutikara[$rdm];
	$st->setUpdate(array('status'=>$kotowaru_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
}

function rememberthemilk($i){	// RTM機能
	global $st,$rep;
	// RTMにメール送信してタスク登録(有効期限系は後で手動で何とか。メールは一括で受信箱に)
	$reply_rtm = file("【命令実行時応答txt】");
	$rdm = rand(0,count($reply_rtm)-1);
	$reply_rtm[$rdm] = str_replace("\n","",$reply_rtm[$rdm]);
	mb_language("japanese");
	mb_internal_encoding("UTF-8");
	$mailto = "RTMのメアド";
	$mailsubject = str_replace("@sirobot_","",str_replace("って覚えといて","",$rep[$i]["text"]));
	$mailbody = "";
	$mailfrom = "From: 適当なメアド";
	mb_send_mail($mailto,$mailsubject,$mailbody,$mailfrom);
	$rtm_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $reply_rtm[$rdm] . " 覚えたよ!";
	$st->setUpdate(array('status'=>$rtm_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
}

function sanzai($i){	// 散財.com機能
	global $st,$rep;
	$reply_sanzai = file("【命令実行時応答txt】");
	$rdm = rand(0,count($reply_sanzai)-1);
	$reply_sanzai[$rdm] = str_replace("\n","",$reply_sanzai[$rdm]);
	// 散財.comにメール送信して散財記録
	/// 形式
	// @sirobot_ 「セブンイレブン」お昼ご飯 198円って記帳して
	// @sirobot_ 「店名(任意)」[項目名] [値段半角]円/[項目名] [値段半角]円って記帳して
	mb_language("japanese");
	mb_internal_encoding("UTF-8");
	$sanzaito = "散財メアド";
	// メールの件名(店名)切り出し
	$sanzai_temp_text = $rep[$i]["text"];		// 元テキストのコピー
	$sanzaisubject = preg_replace("/.*「(.*)」.*/" ,"\\1" , $sanzai_temp_text);
	// 切り出し失敗の場合は件名を消去する
	if ( strcmp($sanzaisubject,$sanzai_temp_text) == 0 ) {
		$sanzaisubject = "";
		$sanzai_temp_text = preg_replace("/@sirobot_ (.*)円って記帳して/" ,"\\1" , $sanzai_temp_text );
	} else {
		$sanzai_temp_text = preg_replace("/.*」(.*)円って記帳して/" ,"\\1" , $sanzai_temp_text );
	}
	$sanzaibody = str_replace("円/","\n",$sanzai_temp_text);
	$sanzaifrom = "From: 適当なメアド";
	mb_send_mail($sanzaito,$sanzaisubject,$sanzaibody,$sanzaifrom);
	$sanzai_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $reply_sanzai[$rdm] ." 記帳したよ!";
	$st->setUpdate(array('status'=>$sanzai_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
}


function harahe($i){	// はらへ(<s>百景</s>フォトライフ)機能
	global $st,$rep;
	$harahe_word = preg_replace("/.*「(.*)」.*/" ,"\\1" , $rep[$i]["text"] );
	if ( strcmp($harahe_word,$rep[$i]["text"]) == 0 ){
		// はらへワード抽出失敗
		$harahe_status = "@" . $rep[$i]["user"]["screen_name"] . " 写真の手がかり(キーワード)を「」で囲ってほしいな。そうじゃないとおれわからないよ。";
		$st->setUpdate(array('status'=>$harahe_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
	}else{
		// サーチURL生成(全検索結果)
		$harahe_URL = "http://f.hatena.ne.jp/keyword/" . urlencode($harahe_word);
		$shorturl = Services_ShortURL::factory('TinyURL');
		//$st->setUpdate("@" . $rep[$i]["user"]["screen_name"] . " " . $harahe_word . "で探してきたよ。" . $harahe_URL);
		$harahe_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $harahe_word . "で探してきたよ。" . $shorturl->shorten($harahe_URL);
		$st->setUpdate(array('status'=>$harahe_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
	}
}

function tentori($i){	// 点取り占い機能
	global $st,$rep;
	$tentori = file("【点取りtxt】");
	$rdm = rand(0,count($tentori)-1);
	$tentori_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $tentori[$rdm];
	$st->setUpdate(array('status'=>$tentori_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
}

function kanni_mail($i){	// 簡易メール機能
	global $st,$rep;
	$reply_kanni_mail = file("【命令実行時応答txt】");
	$rdm = rand(0,count($reply_kanni_mail)-1);
	$reply_kanni_mail[$rdm] = str_replace("\n","",$reply_kanni_mail[$rdm]);
	// 散財.comにメール送信して散財記録
	/// 形式
	// @sirobot_ 「件名(ない場合はタイトルなし)」[本文]ってメールして
	mb_language("japanese");
	mb_internal_encoding("UTF-8");
	$kanni_mailto = "俺のメアド";
	// メールの件名切り出し
	$kanni_mail_temp_text = $rep[$i]["text"];		// 元テキストのコピー
	$kanni_mailsubject = preg_replace("/.*「(.*)」.*/" ,"\\1" , $kanni_mail_temp_text);
	// 切り出し失敗の場合は件名を消去する
	if ( strcmp($kanni_mailsubject,$kanni_mail_temp_text) == 0 ) {
		$kanni_mailsubject = "";
		$kanni_mail_temp_text = preg_replace("/@sirobot_ (.*)ってメールして/" ,"\\1" , $kanni_mail_temp_text );
	} else {
		$kanni_mail_temp_text = preg_replace("/.*」(.*)ってメールして/" ,"\\1" , $kanni_mail_temp_text );
	}
	$kanni_mailbody = $kanni_mail_temp_text;
	$kanni_mailfrom = "From: 適当なメアド";
	mb_send_mail($kanni_mailto,$kanni_mailsubject,$kanni_mailbody,$kanni_mailfrom);
	$kanni_mail_status = "@" . $rep[$i]["user"]["screen_name"] . " " . $reply_sanzai[$rdm] . " メールしたよ!";
	$st->setUpdate(array('status'=>$kanni_mail_status,'in_reply_to_status_id'=>$rep[$i]["id"]));
}

?>