twitterボットを作ってみた
twitterのAPIの習得がてらに人工無脳(bot)というのを作ってみた。
仕様としては、トクトミがフォローしている人のタイムラインから言葉を学習してデータベースに蓄積していきます。
その際、レンタルサーバーの関係でchasenやmecabなどの形態素解析は使えなかったので、単語単位での分け方はせずに、スペース、句読点くぎりで言葉を覚えていきます。
あとはマルコフ連鎖をつかって、単語のつながりもDBに入れ込んでいきます。
DBの構成は
・単語テーブル(ID,単語,文頭フラグ,文末フラグ)
・つながりテーブル(ID,つながり元単語ID,つながり先単語ID,出現回数)
となっています。
今後、キーワードを抽出して単語と結びつけるためのテーブルも作ろうと思っています。
TwitterAPIを使うにあたって参考にしたサイトはこちら
<?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) ) ))); } ?>
phpでtwitterのタイムラインのつぶやきを読み込む関数
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");
こうするだけでよかった。