読者です 読者をやめる 読者になる 読者になる

新はてなブックマーク件数取得API用のPHP classをつくった

先日公開された新はてなブックマーク件数取得API用のPHP classをつくった
(開発者さま向け)はてなブックマーク件数取得APIに新しいAPIを追加 - はてなブックマーク日記 - 機能変更、お知らせなど


まあ、id:amachangが公開しているようにHTMLだけで完結するのでPHPでやる必要もないかもしれないですが
新はてなブックマーク件数取得 API を使って自分のページに件数を埋め込む最も簡単な方法 - IT戦記



配列でURLを渡すと複数のURLのブックマーク数を取得できるようになっています。
また、newするときに遅延時間を設定すると複数取得時に遅延するようにしています。

http://tknzk.com/lab/hatena/
http://tknzk.com/lab/hatena/hatenabookmarkcount.phps

<?php
/**
 * Hatena Bookmark Count class
 *
 * @author      tknzk <info@tknzk.com>
 * @version     0.0.1
 * @copyright   Copyright (c) 2009, tknzk.com All rights reserved.
 * @license     BSD License
 *
 */

class HatenaBookmarkCount
{
    const DEBUG = false;

    const HATENA_API_URL = 'http://api.b.st-hatena.com';

    const VERSION = '0.0.1';

    /**
     * Delay Time Micro seconds
     *
     * @var int
     */
    private $delay;

    /**
     * Default constructor
     *
     * @return  void
     * @param   int $delay
     *
     */
    public function __construct($delay = null)
    {
        if($delay !== null) {
            $this->setDelay($delay);
        }
    }

    /**
     * Get Hatena Bookmark Count
     *
     * @access      public
     * @param       string  $urls
     * @return      array
     * @static
     */
    public function entrycount($urls)
    {
        if(is_array($urls))
        {
            $i = 0;
            foreach($urls as $url) {

                $apiurl = self::HATENA_API_URL  . '/entry.count?'
                                                . 'url='    . urlencode($url) 
                                                . '';

                //$response = file_get_contents($apiurl);

                $curl = curl_init();
                curl_setopt($curl,  CURLOPT_URL,            $apiurl);
                curl_setopt($curl,  CURLOPT_HEADER,         false);
                curl_setopt($curl,  CURLOPT_RETURNTRANSFER, true);
                $response = curl_exec($curl);
                curl_close($curl);

                $json = json_decode($response,true);

                if($json) {
                    $ret[$i]['url']   = $url;
                    $ret[$i]['count'] = $json;
                }

                if($i > 1) {
                    if($this->delay !== null) {
                        usleep($this->delay);
                    }
                }

                $i++;

            }

            return $ret;

        }else{
            $ret = array();
            $apiurl = self::HATENA_API_URL  . '/entry.count?'
                                            . 'url='    . urlencode($urls) 
                                            . '';

            //$response = file_get_contents($apiurl);

            $curl = curl_init();
            curl_setopt($curl,  CURLOPT_URL,            $apiurl);
            curl_setopt($curl,  CURLOPT_HEADER,         false);
            curl_setopt($curl,  CURLOPT_RETURNTRANSFER, true);
            $response = curl_exec($curl);
            curl_close($curl);

            $json = json_decode($response,true);

            if($json) {
                $ret = array();
                $ret['url']     = $urls;
                $ret['count']   = $json;
            }

            return $ret;

        }

    }

    /**
     * Set Delay micro seconds
     *
     * @return  void
     * @pram    string
     */
    public function setDelay($delay)
    {
        $this->delay = (string) $delay;
    }

}

使い方はこんな感じ

<?php
require_once 'hatenabookmarkcount.php';

$hatebucount = new HatenaBookmarkCount(200000);

$url = "http://www.hatena.ne.jp";
$url2 = "http://b.hatena.ne.jp";

$count = $hatebucount->entrycount($url);

echo "-------- url --------";
echo "<pre>";
print_r($count);
echo "</pre>";

echo "-------- urls --------";
$urls = array($url,$url2);
$count = $hatebucount->entrycount($urls);
echo "<pre>";
print_r($count);
echo "</pre>";