Do You PHP はてな このページをアンテナに追加 RSSフィード Twitter

2007-12-20

[][]PHPで街を育てる

via. no title

空前のMyMiniCityブームですが、ようやく工場が建ち始めました。

で、いきなり本題。no titleとかno titleに倣って、myminicitygrower.phpを書いてみました。

HTML要素の取り回しはやはりSimpleXMLが楽なんですが、はてなのページはHTML4.01 Transitionalらしいので、一度XHTMLに変換することにしました。その際、tidy拡張モジュールでも良かったんですが面倒だったwので、404 Not Foundで公開されている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('&nbsp;', ' ', $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)

続きは「PHPで街を育てる」の続き - Do You PHP はてなで。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証