「PHPで街を育てる」の続き
via. http://blog.kawadash.in/junzou/myminicity-ruby-update/
まだまだMyMiniCityブームらしいです。ようやく第3ステージ。
「他人に行動を起こしてもらうと自分にインセンティブがある」というのは、「人と人を繋げる」事を目的としているサービスに向いているのかも知れませんね(いい意味で)。
で、本題。前のエントリにトラックバックを頂いたので、スクリプトを修正しました。といっても、2行追加しただけですがw
<?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); $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'); } $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'); $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) !== false ? 'OK' : 'FAILED') . "\n"; sleep(SLEEP_TIME); }
実際にやってみると、今度はちゃんとカウントされます。キモは、
で、「X-Ref-Ok=1」というCookieを投げてやる、ということでした。これはLiveHTTPHeadersなどで見ていると送信していることが分かります。とりあえず、もう一つCookieを送っていた(X-MV-Referer)ので、上のスクリプトではそれも併せて送っています。あと、REMOTE_ADDR単位で集計してる感じですかねぇ、やってみた感じ。。。
まあ、アクセスを自動化してどうするという訳でもないんですが、「お遊びにはお遊びで」ということで;-)