はてブカウンタのXML-RPC API用のシンプルなPHPコード

引数にホスト名、返り値がブックマーク数だけなので何十kもあるXML-RPCのライブラリをインクルードするのが無駄に思えて、HTTPの通信ごと自前で書いてみました。富豪的プログラミングにあるまじき汎用性のない行為ですが。

<?php
function getHatenaBookmarkCount($query)
{
    $host = 'b.hatena.ne.jp';
    $fp = fsockopen($host, 80);
    if (!$fp) {
        die("cannot connect b.hatena.ne.jp\\n");
    }
    $xml = '<?xml version="1.0"?><methodCall><methodName>bookmark.getTotalCount</methodName><params><param><value><string>'.$query.'</string></value></param></params></methodCall>';
    $len = strlen($xml);
    $request  = "POST /xmlrpc HTTP/1.0\\r\\nHost: $host\\r\\nUser-Agent: zuzara-http-client\\r\\nContent-Type: text/xml\\r\\nContent-Length: $len\\r\\n\\r\\n";
    $request .= $xml."\\r\\n\\r\\n";
    fwrite($fp, $request);
    $res = '';
    while (!feof($fp)) {
        $buf = fgets($fp);
        $res .= $buf;
    }
    fclose($fp);
    if (preg_match("'<int>(\\d+)</int>'", $res, $match)) {
        return $match[1];
    } else {
        return 0;
    }
}
echo getHatenaBookmarkCount('http://blog.zuzara.com/');
echo "\\n";

HTTPのheaderは案外、必須な項目があるようでContent-Type: text/xmlやContent-Lengthをつけずに通信したらエラーが返ってきました。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

Page optimized by WP Minify WordPress Plugin