Twitterのボットのコードを公開

自分で作ったTwitterのボットのコードを公開。
何かに役立つと良いですね-。

ボットの紹介ページ

 

どらぺんのコード

$url = "http://twitter.com/statuses/update.xml?";
$username = Twitterのユーザー名;
$password = Twitterのパスワード;

//データベースから取得開始
$srv = "サーバー名"; // サーバー名
$id = "ユーザーID"; // ユーザーID
$passwd = "パスワード"; // パスワード
$dbn = "データベース名"; // データベース名

//DBへ接続開始
$dbHandle = mysql_connect($srv,$id,$passwd);
//DBの接続に失敗した場合はエラー表示をおこない処理中断
if ($dbHandle == False) {
print ("can not connect db\n");
exit;
}

//文字コードをutf-8にする
$sql = "SET NAMES utf8";
$utf = mysql_query($sql);

//SQL用関数定義
function funcSQL ($table, $koumoku) {

	$dbn = "データベース名"; // データベース名

	//SQLを作る
    $sql = "select ".$koumoku." from ".$table." order by rand()";

	//SQL文を実行する
	$rs1 = mysql_db_query($dbn,$sql);

	//データ格納?
	$row = mysql_fetch_array($rs1);

	return $row;
}

//主語取得
	//@かどうかをランダムに決める
	$shugo = mt_rand(1, 10);
	if($shugo <= 7) {
		$table = "at";
	} else {
		$table = "shugo";
	}

	$row1 = funcSQL($table, shugo);

//助詞取得
	$row2 = funcSQL(joshi, joshi);

//動詞取得
	$row3 = funcSQL(doushi, doushi);

//補語取得
	$row4 = funcSQL(hogo, hogo);

//目的語(~を)取得
	//@かどうかをランダムに決める
	$mokuteki = mt_rand(1, 10);
	if($mokuteki <= 6) {
		$table = "at";
	} else {
		$table = "mokuteki";
	}

	$row5 = funcSQL($table, mokuteki);

//目的語2(~に)取得
	$row6 = funcSQL(mokuteki_do, mokuteki_do);

//データベースから取得終了

//文章制作開始
//第一構文
	$bun1 = $row1["shugo"].$row2["joshi"].$row3["doushi"];
//第二構文
	$bun2 = $row1["shugo"].$row2["joshi"].$row4["hogo"].$row3["doushi"];
//目的語が@かどうかで文章変更
	if($mokuteki <= 6) {
		//第三構文(~を)
		$bun31 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."を".$row3["doushi"];
		//第三構文(~と)
		$bun32 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."と".$row3["doushi"];
		//第四構文(~を)
		$bun41 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."を".$row4["hogo"].$row3["doushi"];
		//第四構文(~と)
		$bun42 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."と".$row4["hogo"].$row3["doushi"];
		//第五構文(~を)
		$bun51 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."を".$row6["mokuteki_do"].$row3["doushi"];
		//第五構文(~と)
		$bun52 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"]."と".$row6["mokuteki_do"].$row3["doushi"];
	} else {
		//第三構文
		$bun31 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row3["doushi"];
		//第三構文
		$bun32 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row3["doushi"];
		//第四構文
		$bun41 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row4["hogo"].$row3["doushi"];
		//第四構文
		$bun42 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row4["hogo"].$row3["doushi"];
		//第五構文
		$bun51 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row6["mokuteki_do"].$row3["doushi"];
		//第五構文
		$bun52 = $row1["shugo"].$row2["joshi"].$row5["mokuteki"].$row6["mokuteki_do"].$row3["doushi"];
	}
//文章制作終了

//投稿文章の構文決定
$koubun = mt_rand(1, 15);

if($koubun <= 3) {
	$mes = $bun1;
} elseif($koubun <= 6) {
	$mes = $bun2;
} elseif($koubun <= 8) {
	$mes = $bun31;
} elseif($koubun <= 9) {
	$mes = $bun32;
} elseif($koubun <= 11) {
	$mes = $bun41;
} elseif($koubun <= 12) {
	$mes = $bun42;
} elseif($koubun <= 14) {
	$mes = $bun51;
} else {
	$mes = $bun52;
}

//投稿開始
$params = "status=". rawurlencode($mes);

$result = file_get_contents($url.$params , false, stream_context_create(array(
	"http" => array(
		"method" => "POST",
		"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
	)
)));
//投稿終了

にゃふーのコード

$url = "http://twitter.com/statuses/update.xml?";
$username = Twitterのユーザー名;
$password = Twitterのパスワード;

//データベースから取得開始
$srv = "サーバー名"; // サーバー名
$id = "ユーザーID"; // ユーザーID
$passwd = "パスワード"; // パスワード
$dbn = "データベース名"; // データベース名

//DBへ接続開始
		$dbHandle = mysql_connect($srv,$id,$passwd);
//DBの接続に失敗した場合はエラー表示をおこない処理中断
		if ($dbHandle == False) {
			print ("can not connect db\n");
			exit;
		}

//文字コードをutf-8にする
		$sql = "SET NAMES utf8";
		$utf = mysql_query($sql);

//SQL文 主語取得
		$sql = "select at from at order by rand()";
	//SQL文を実行する
		$rs1 = mysql_db_query($dbn,$sql);
		$rowat = mysql_fetch_array($rs1);


//SQL文 猫語の取得
		$kosuu = mt_rand(3,6);
		$a = 0;
		while($a < $kosuu) {
			$sql = "select nyafuuu from nyafuuu order by rand()";
			$rs1 = mysql_db_query($dbn,$sql);
			$row1 = mysql_fetch_array($rs1);
			$neko = $neko.$row1["nyafuuu"];
			$a++;
	    }
//文章制作終了

//twwitterにログイン_start
require_once "HTTP/Client.php";
$basic = array('Authorization'=>'Basic '.base64_encode($user.':'.$pass));
//twwitterにログイン_end

//repliesのページ取得_start
$page = "statuses/replies.rss";
$client = new HTTP_Client(null, $basic);
$client->get("http://twitter.com/".$page);

$response = $client->currentResponse();		
$body = mb_convert_encoding($response['body'], "UTF-8","JIS,UTF-8,SJIS,EUC-JP");
//repliesのページ取得_end

//中身をスクレイピング_start

$st = $ed = 0;

while(true)
{
	$st = strpos($body, '', $ed);
	if($st===false) break;
	$ed = strpos($body, '/stat', $st) or error_message("strpos error.");
	$line = substr($body, $st, $ed-$st);

	preg_match('/http:\/\/twitter.com\/(.+)/', $line, $matches);
	$username = $matches[1];

	$st = strpos($body, 'uses/', $ed) or error_message("strpos error.");
	$ed = strpos($body, '', $st) or error_message("strpos error.");
	$line = substr($body, $st, $ed-$st);

	preg_match('/uses\/(.+)/', $line, $matches);
	$status_number = $matches[1];

	$twitter_list[] = array("status_number"=>$status_number, "username"=>$username);

}
	$TL_list = array_reverse($twitter_list);

//中身をスクレイピング_end

//status_nnumberの比較_start
	$number = fopen("./number.txt", "r");
	$hikaku = fgets($number);  // 読み込み
	$num10 = intval($hikaku);
//status_nnumberの比較_end
//リプライの@先_start
    foreach ($TL_list as $data){
		if ($num10 < $data["status_number"]) {
				$reply = 1;
				break;
		} else {
			$reply = 2;
		};
	};
//ファイルにステータスナンバーを書き込み閉じる_start
	$status = $data["status_number"];
	$status = $status + 1;

	$number = fopen("./number.txt", "w");
	fwrite($number, $status);
	fclose($number);
//ファイルにステータスナンバーを書き込み閉じる_end
//リプライの@先_end
//通常処理_start
//投稿文章の構成_start
		if($reply == 1) {
			$bunmatu = mt_rand(1, 5);
			if($bunmatu == 1) {
				$mes = "@".$data["username"]." ".$neko."?";
			} elseif($bunmatu == 2) {
				$mes = "@".$data["username"]." ".$neko."!";
			} else {
				$mes = "@".$data["username"]." ".$neko;
			}
		} else {
			$koubun = mt_rand(1, 3);
			if($koubun == 1) {
				$bunmatu = mt_rand(1, 5);
				if($bunmatu == 1) {
					$mes = $neko."?";
				} elseif($bunmatu == 2) {
					$mes = $neko."!";
				} else {
					$mes = $neko;
				};
			} else {
				$bunmatu = mt_rand(1, 5);
				if($bunmatu == 1) {
					$mes = $rowat["at"]." ".$neko."?";
				} elseif($bunmatu == 2) {
					$mes = $rowat["at"]." ".$neko."!";
				} else {
					$mes = $rowat["at"]." ".$neko;
				};
			};
		};
//投稿文章の構成_end

//投稿開始
$params = "status=". rawurlencode($mes);

$result = file_get_contents($url.$params , false, stream_context_create(array(
	"http" => array(
		"method" => "POST",
		"header" => "Authorization: Basic ". base64_encode($user.":". $pass)
	)
)));
//投稿終了
//通常処理_end

ボットの紹介ページへ戻る