Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

「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('&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) !== false ? 'OK' : 'FAILED') . "\n";
    sleep(SLEEP_TIME);
}

実際にやってみると、今度はちゃんとカウントされます。キモは、

で、「X-Ref-Ok=1」というCookieを投げてやる、ということでした。これはLiveHTTPHeadersなどで見ていると送信していることが分かります。とりあえず、もう一つCookieを送っていた(X-MV-Referer)ので、上のスクリプトではそれも併せて送っています。あと、REMOTE_ADDR単位で集計してる感じですかねぇ、やってみた感じ。。。
まあ、アクセスを自動化してどうするという訳でもないんですが、「お遊びにはお遊びで」ということで;-)