プラグインを使わないソーシャルリンク(本家取得版)

先日作ったソーシャルリンクのphpファイルですが、api.sharedcount.comの期限が来年の1月までで、その後からはapiキーを取得しないと使えなくなります。
freeプランもあるので、apiキーを取得が分かる人はsharedcount.comでカウントを取得したほうがhttpリクエストが減り良いのですが、分からない人もいるでしょうからテーマ内のソーシャルphpは本家取得版に切り替えました。

広告

本家取得版のコード

前回のapi.sharedcount.comからの取得ではなく、本家からカウントを取得するコードです。

<?php
    if ( false === ( $social_counts = get_transient( 'social_counts_' . get_the_ID() ) ) ) {
        $url = get_permalink();
        $org_timeout = ini_get('default_socket_timeout');
        $timeout_second = 3;  
        ini_set('default_socket_timeout', $timeout_second); 
        $stw = @file_get_contents('https://urls.api.twitter.com/1/urls/count.json?url='.rawurlencode($url));
        $sfb = @file_get_contents('https://graph.facebook.com/?id='.rawurlencode($url));
        $sgoogle = @file_get_contents( 'https://apis.google.com/_/+1/fastbutton?url=' . urlencode( $url ) );   
        $htebucount = @file_get_contents('http://api.b.st-hatena.com/entry.count?url='.rawurlencode($url));
        ini_set('default_socket_timeout', $org_timeout);
        $twc = json_decode($stw,true);
        $fbc = json_decode($sfb,true);
        preg_match( '/[2,([0-9.]+),[/', $sgoogle, $gcount );
        if(!isset($twc['count']) || !$twc['count']){$twcont = 0;}else{$twcont = $twc['count'];}
        if(!isset($fbc['shares']) || !$fbc['shares']){$fbcnt = 0;}else{$fbcnt = $fbc['shares'];}
        if(!isset($gcount[1]) || !$gcount[1]){$golcount = 0;}else{$golcount = $gcount[1];}
        if(!isset($htebucount) || !$htebucount){$htebucount = 0;}
        $social_counts = array(
            $twcont,
            $fbcnt,
            $golcount,
            $htebucount,
        );
        set_transient( 'social_counts_' . get_the_ID(), $social_counts, 60*60*24);
     }
?>
   <div class="social">
        <ul>
            <li>
            <a href="Twitter" class="twitter" rel="nofollow" onclick="window.open('//twitter.com/intent/tweet?url=<?php the_permalink(); ?>&text=<?php the_title(); ?>', '_blank', 'width=640,height=480,top=' + (screen.height-640)/2 + ',left=' + (screen.width-480)/2); return false;">
                <span class="socialbox"><i class="fa fa-twitter"></i> Tweet</span><s></s>
                <span class="scount">
                    <?php echo $social_counts[0]; ?>
                </span></a>
            </li>
            
            <li>
        <a href="Facebook" class="facebook" rel="nofollow" onclick="window.open('//www.facebook.com/plugins/like.php?href=<?php the_permalink(); ?>', '_blank', 'width=450,height=250,top=' + (screen.height-450)/2 + ',left=' + (screen.width-250)/2); return false;">
            <span class="socialbox"><i class="fa fa-facebook-square"></i> いいね</span><s></s>
                <span class="scount">
                      <?php if(!isset($social_counts[1]) || !$social_counts[1]){
                            $social_counts[1] = 0;
                        } echo $social_counts[1]; ?>
                </span></a>
            </li>
            
            <li>
        <a href="Google+" class="googleplus" rel="nofollow" onclick="window.open('//plus.google.com/share?url=<?php the_permalink(); ?>', '_blank', 'width=640,height=480,top=' + (screen.height-640)/2 + ',left=' + (screen.width-480)/2); return false;">
            <span class="socialbox"><i class="fa fa-google-plus"></i> 共有</span><s></s>
                <span class="scount">
                       <?php echo $social_counts[2]; ?>
                </span></a>
            </li>
            
            <li>
        <a href="Hatena" class="hatena" onclick="window.open('//b.hatena.ne.jp/add?mode=confirm&url=<?php the_permalink(); ?>', '_blank', 'width=640,height=480,top=' + (screen.height-640)/2 + ',left=' + (screen.width-480)/2); return false;">
            <span class="socialbox"><span class="hatenab">B!</span> Hatena</span><s></s>
               <span class="scount">
                       <?php echo $social_counts[3]; ?>
                </span></a>
            </li>
<?php if(function_exists('usces_the_item') && in_category('item')): ?>           
            <li>
        <a href="mailto:<?php usces_the_inquiry_mail(); ?>?subject=<?php the_title(); ?>&amp;body=ご記入ください">
            <span class="socialbox"><i class="fa fa-envelope-square"></i> Email</a>
            </li>
                
        <?php if (is_mymobile()): ?>    
            <li>
        <a href="tel:<?php usces_the_tel_number(); ?>">
            <span class="socialbox"><i class="fa fa-mobile"></i> TEL</a>
            </li>
        <?php endif; ?>       
<?php endif; ?>
        </ul>
    </div>

こんな感じです。
簡単に説明を書くと、各urlからデータを取得して配列にします。
httpリクエストで、時間がかかり過ぎは遅延になる為3秒でタイムアウトします。
その際、所得できない場合はカウントを0にセット。
そしてそれをデータベースにキャッシュします。

その後は前回の内容と同じです。

ただこの場合4ヶ所からデータを得る為、やや時間がかかります。
1度取得すれば24時間はキャッシュする為、誰かがページを見てデータがキャッシュされればその後は早いです。
ちなみにここで言うキャッシュはソーシャルカウントの入れるのみのキャッシュです。ページキャッシュではありません。

ではでは

追記 修正版を書きました。
コチラ>>

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です