PHP
curl
SNS

cURLの並行リクエストを使っていいね数・ツイート数・はてブ数を取得する

自分の環境ではいいね数がなぜか取得できないのでコメントの部分を使っています。

sns.php
    //―――――――――――――――――――――――――――――――――――
    //SNSシェア数取得
    //―――――――――――――――――――――――――――――――――――
    $PAGEIINE   = 0;
    $PAGETWEET  = 0;
    $PAGEHATEBU = 0;

    $urls = array();
    $chlist = array();

    $PAGEURL = "https://www.google.co.jp/";

    //いいね数  
    $urls['IINE'] = "http://graph.facebook.com/?id=" . urlencode($PAGEURL);
    //$urls['IINE'] = "https://www.facebook.com/plugins/like.php?&layout=button_count&href=" . urlencode($PAGEURL);

    //ツイート数
    $urls['TWEET'] = "http://urls.api.twitter.com/1/urls/count.json?url=" . urlencode($PAGEURL);

    //はてブ数
    $urls['HATEBU'] = "http://b.hatena.ne.jp/entry/jsonlite/?url=" . urlencode($PAGEURL);

    $mh = curl_multi_init();

    foreach ($urls as $sns => $url) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);     //変数に保存する
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);              //実行にかけられる時間の最大値
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko');
        curl_multi_add_handle($mh, $ch);
        $chlist[$sns] = $ch;
    }

    //―――――――――――――――――――――――――――――――――――
    //並行リクエスト実行
    //―――――――――――――――――――――――――――――――――――
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);

    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) != -1) {
            do {
                $mrc = curl_multi_exec($mh, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }

    //―――――――――――――――――――――――――――――――――――
    //リクエスト結果を取得
    //―――――――――――――――――――――――――――――――――――
    foreach ($chlist as $sns => $ch) {

        $contents = curl_multi_getcontent($ch);

        switch($sns){
            case 'IINE' :
                $json = json_decode($contents, true);
                $PAGEIINE = isset($json['shares']) ? intval($json['shares']) : 0;
                //if(preg_match('/<span class="pluginCountTextDisconnected">([0-9]+)<\/span>/', $contents, $match)){
                //  $PAGEIINE = intval($match[1]);
                //}
            break;
            case 'TWEET' :
                $json = json_decode($contents, true);
                $PAGETWEET = isset($json['count']) ? intval($json['count']) : 0;
            break;
            case 'HATEBU' :
                $json = json_decode($contents, true);
                $PAGEHATEBU = isset($json['count']) ? intval($json['count']) : 0;
            break;
        }
        curl_multi_remove_handle($mh, $ch);
        curl_close($ch);
    }

    curl_multi_close($mh);

    echo 'PAGEURL:' . $PAGEURL . '<BR>';
    echo 'PAGEIINE:' . $PAGEIINE . '<BR>';
    echo 'PAGETWEET:' . $PAGETWEET . '<BR>';
    echo 'PAGEHATEBU:' . $PAGEHATEBU . '<BR>';

結果がこんな感じです

result
PAGEURL:https://www.google.co.jp/
PAGEIINE:84428
PAGETWEET:135793
PAGEHATEBU:918

複数のSNSのAPIを叩くならやっぱり並行処理のほうが効率良いですね。