引数にホスト名、返り値がブックマーク数だけなので何十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をつけずに通信したらエラーが返ってきました。