2007-12-20
■[PHP][雑記]PHPで街を育てる
via. Rauru Blog » Blog Archive » Ruby とか Perl とかで街を育てる
空前のMyMiniCityブームですが、ようやく工場が建ち始めました。
で、いきなり本題。no titleとかRauru Blog » Blog Archive » Ruby とか Perl とかで街を育てるに倣って、myminicitygrower.phpを書いてみました。
HTML要素の取り回しはやはりSimpleXMLが楽なんですが、はてなのページはHTML4.01 Transitionalらしいので、一度XHTMLに変換することにしました。その際、tidy拡張モジュールでも良かったんですが面倒だったwので、Under Construction, Babyで公開されているHTMLParserを使わせてもらいました。
で、目的のコードは以下のような感じで手抜きまくりです;-)
<?php error_reporting(E_ALL); /** * @see http://www.rcdtokyo.com/ucb/contents/i000799.php */ require_once('HTMLParser.class.php'); require_once('HTTP/Request.php'); define('HATENA_URL', 'http://twitter.g.hatena.ne.jp/keyword/MyMiniCity%e9%83%a8'); define('SLEEP_TIME', 3); function sendRequest($url) { $request = new HTTP_Request($url); $response = $request->sendRequest(); if (PEAR::isError($response)) { return false; } return $request->getResponseBody(); } $doc = sendRequest(HATENA_URL); if (!$doc) { die('request failed'); } $parser = new HTMLParser(); $parser->setRuleFile('./xhtml1-transitional_dtd.inc.php'); $parser->setRoot('html', array('lang' => 'ja')); $parser->setGenericParent('body'); $parser->parse($doc); $doc = $parser->dump('utf-8'); // HTMLの微調整とゴミ取り $doc = mb_ereg_replace(' ', ' ', $doc); $doc = mb_ereg_replace('\x1c', '', $doc); $xml = new SimpleXMLElement($doc); foreach ($xml->xpath('//div[@class="section"]//td[2]/a') as $element) { $url = $element[0]; if (!preg_match('#http://.*#', $url)) { continue; } echo "request : $url ... "; echo (sendRequest($url) ? 'OK' : 'FAILED') . "\n"; sleep(SLEEP_TIME); }
まあ、
それでまあ、ここまで作ってから思ったんだけど、MyMiniCity って、実は単に GET でアクセスするだけじゃ駄目で、flash だか javascript だかで変なことしなきゃいけなかったりしない? なんかこのスクリプト走らせても人口増えてないような気がするんだが…
Rauru Blog » Blog Archive » Ruby とか Perl とかで街を育てる
と思うので、効果は期待しないでください;-)
うーん。XPath楽だぁ。
追記(2007/12/24 16:55)
トラックバック - http://d.hatena.ne.jp/shimooka/20071220/1198124082
リンク元
- 191 http://twitter.g.hatena.ne.jp/keyword/MyMiniCity部
- 78 http://reader.livedoor.com/reader/
- 63 http://b.hatena.ne.jp/entrylist?sort=hot
- 62 http://b.hatena.ne.jp/
- 57 http://creazy.net/2007/12/myminicity_api.html
- 46 http://www.rcdtokyo.com/ucb/contents/i000799.php
- 44 http://blog.kawadash.in/junzou/myminicity-ruby-update/
- 40 http://d.hatena.ne.jp/
- 24 http://www.google.com/reader/view/
- 15 http://moshican.g.hatena.ne.jp/sasezaki/







