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