twitterボットを作ってみた

twitterAPIの習得がてらに人工無脳bot)というのを作ってみた。

twitterボット ぬこ夫

仕様としては、トクトミがフォローしている人のタイムラインから言葉を学習してデータベースに蓄積していきます。

その際、レンタルサーバーの関係でchasenmecabなどの形態素解析は使えなかったので、単語単位での分け方はせずに、スペース、句読点くぎりで言葉を覚えていきます。

あとはマルコフ連鎖をつかって、単語のつながりもDBに入れ込んでいきます。



DBの構成は

・単語テーブル(ID,単語,文頭フラグ,文末フラグ)
・つながりテーブル(ID,つながり元単語ID,つながり先単語ID,出現回数)

となっています。

今後、キーワードを抽出して単語と結びつけるためのテーブルも作ろうと思っています。


TwitterAPIを使うにあたって参考にしたサイトはこちら

Twitter API 仕様書 日本語訳

twitterphpから投稿する関数

<?php
//twitter投稿api
//$textに投稿したいテキストを入れる

function add_twitter($text){

$url = "http://twitter.com/statuses/update.xml?";
$username = "アカウント名";
$password = "パスワード";
$params = "status=". rawurlencode($text);

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


?>

phptwitterのタイムラインのつぶやきを読み込む関数

Warning: file_get_contents(http://twitter.com/statuses/replies.rss) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /virtual/hogehoge/public_html/web-sashimi.com/bot/class/common.php on line 37

と言うエラーが出ていたが "method" => "POST"としていたのをGETにかえるとエラーが消えた。

<?php
//twitter記事を取得

function read_twitter(){

$url = "http://twitter.com/statuses/friends_timeline.rss";
$username = "アカウント名";
$password = "パスワード";
$result = file_get_contents($url,false, 
stream_context_create(array(
	"http" => array(
		"method" => "GET",
		"header" => "Authorization: Basic ".
 base64_encode($username. ":". $password)
	)
)));
return $result; 
}

?>

api経由で取得した日本語文字列が文字化けする。

//echo $rss = urldecode($rss);や
//echo $rss = utf8_encode($rss);など
色々やったが解決せず

文字コードというか文字の種類がhtml 数値文字参照というのに気付きやっと解決
単純に
$rss = mb_convert_encoding($rss,"utf8","HTML-ENTITIES");
こうするだけでよかった。