まめことネコゼのどたばた会議で宣言した「名言BOTを作る!」を完成させました。
http://twitter.com/dictumer
今回はPHPとpearを使って、CORESERVERで動かしています。
CORESERVERでpearを動かすにあたってはこちらのエントリーが非常に参考になりました。あざっす!(n’ ∀ ‘)η
共有サーバ(CORESERVER.JP)で自由にPEARのインストールをする
twitterへのPOST自体はpearを使えばすごく簡単に出来るのですが、HTMLを取得して特定のタグから必要なデータのみ抜き出す(スクレイピング)作業と、その抜き取ったデータの処理(無駄なデータを削除するなど)、エラー処理に苦労しました。
pearを使ったのが初めてだった事もあるのですが、スクレイピングのやり方が分からずPHPで昔ながらの手法で作業しました。これは何か方法があるに違いない!pear&PHPの詳しい人教えて!><
まぁそんなつたないコードですが、公開しますので赤字つけてくれる人大募集!
コメントでもtwitterでも何でも良いのでお願いします><
<?php
require_once 'HTTP/Request.php';//名言集.comの最大数
$max = 2019;//乱数を生成
$random = rand(0,$max);//twitterAPIのURL
$url ="http://twitter.com/statuses/update.xml";// URL をオープン
$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');//データが無い場合は再度乱数を生成してURLを変更する
while (!$fp) {
//乱数を再度生成
$random = rand(0,$max);
echo '乱数;'.$random.'<br />';
$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');
if($fp) break; // ループ脱出
}// HTML を読み出す
while (! feof($fp)) {
$buffer = fgets($fp, 4096);
if(strpos($buffer, '"text"')){
while(!strpos($buffer, '</div>')){
$meigen .= $buffer;
$buffer = fgets($fp, 4096);
}
$meigen .= $buffer;
}
else if(strpos($buffer, '"author"')){
while(!strpos($buffer, '</div>')){
$author .= $buffer;
$buffer = fgets($fp, 4096);
}
$author .= $buffer;
}
}
//タグ除去
$meigen = strip_tags($meigen);
$author = strip_tags($author);//正規表現でテキストから不要な部分を除去
//特定のカテゴリに入ってる名言は
if( ereg("\[映画の名言\]|\[漫画・アニメの名言\]|\[ドラマの名言\]|\[ことわざ\]“, $author) ){
$meigen = ereg_replace(”[\r\n\]| | ”, “”, $meigen);
$author = ereg_replace(”[\r\n\]| | | |^ |\[.+\]| 出典.|^出典.”, “”, $author);
$author = ereg_replace(” ”, “ ”, $author);
}
else{
//全角スペース、半角スペース除去
$meigen = ereg_replace(”[\r\n\]| | ”, “”, $meigen);
$author = ereg_replace(”[\r\n\]| | |^ | |^出典.| 出典.|\(.+\)|\[.+\]|(.+)”, “”, $author);
$author = ereg_replace(”/出典+/”, “”, $author);
}
// HTML のクローズ
fclose($fp) or die(”CLOSE”);//出典が空の場合があるので「不明」と入力
if($author==”) $author=’不明’;// ソケットを開き、送信形式を指定し、データを送信する
$req = new HTTP_Request();
$req->setBasicAuth(”twitterID”, “twitterPASSWORD”);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData(’status’, $meigen.’ 出典:「’.$author.’」’);
$req->setURL($url);if (!PEAR::isError($req->sendRequest())) {
$response = $req->getResponseBody();
}
?>
- Newer: links for 2008-05-19
- Older: links for 2008-05-17
Comments:0
Trackback+Pingback:0
- TrackBack URL for this entry
- http://blog.grayash.com/archives/737/trackback
- Listed below are links to weblogs that reference
- 名言集.comの名言を一日一回POSTするtwitterBOTを作った。 from blog.grayash.com