先日作ったソーシャルリンクの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(); ?>&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時間はキャッシュする為、誰かがページを見てデータがキャッシュされればその後は早いです。
ちなみにここで言うキャッシュはソーシャルカウントの入れるのみのキャッシュです。ページキャッシュではありません。
ではでは
追記 修正版を書きました。
コチラ>>
おすすめのコンテンツ
広告