DOM::loadHTML - 「PHPで街を育てる」の続きの続きの続き
このネタも引っ張りすぎです。これで最後(多分)ということで、さりげなく。。。
で、本題。前に紹介した
ですが、作者が同僚ということが判明。。。早く言ってよっ!で、話しているうちに「PHP5だったらDOMで一発じゃーん」「。。。あ!そういえば」という流れになり、コードを書き直しました。といっても、HTML→XHTML→SimpleXMLの部分だけですが。
<?php error_reporting(E_ALL); 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); $request->addCookie('X-MV-Referer', ""); $request->addCookie('X-Ref-Ok', "1"); $response = $request->sendRequest(); if (PEAR::isError($response)) { echo $request->getResponseCode(); return false; } return $request->getResponseBody(); } $doc = sendRequest(HATENA_URL); if (!$doc) { die('request failed'); } $doc = mb_ereg_replace('\x1c', '', $doc); $dom = new DOMDocument(); $dom->loadHTML($doc); $xml = simplexml_import_dom($dom); foreach ($xml->xpath('//div[@class="section"]//td[2]/a[starts-with(.,"http://")]') as $element) { $url = $element[0]; echo "request : $url ... "; echo (sendRequest($url) !== false ? 'OK' : 'FAILED') . "\n"; sleep(SLEEP_TIME); }
しばらくDOMを使ってなかったので、loadHTMLメソッドなんて覚えてないよっ!(負け惜しみ)