自分で作った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