LoginSignup
0
1

More than 5 years have passed since last update.

PHPでFacebookのシェア数を取得する (v2.7)

Last updated at Posted at 2016-09-21

はじめに

「Facebookのイイネ数が取れなくなったんだけど」というお話しがきました。
どうやら最近のアップデートなどで取得できなくなったようです。
FacebookのAPI周りはこまめにアップデートされていて、仕様変更などによって取れなくなることがあります。今回の変更(というか古いバージョンの廃止?)は2016年9月ごろにあったとのことでした。

App IDとシークレット

シェア数を取得するためにはApp ID(アプリID)とシークレットが必要となりました。

下記の参考サイトに従ってFacebook Appを作成し、App IDとシークレットを取得しました。

http://wp-suzaku.com/2016/02/01/【2016年版】facebook-app-id(アプリid)の取得方法/
http://itevangelist.net/blog/wordpress-facebook-developers-resgitration-and-add-app

Screenshot_9_7_16__6_30_AM.png

Facebook API

Facebook APIなるものを利用することになります。

https://developers.facebook.com/tools/explorer

ここにログインすると色々と試すことができます。
GETリクエストでだいたい何でもできるようです。

https://developers.facebook.com/docs/graph-api/reference/v2.7/url

公式のサンプルです。

コード

FacebookShareCount.php

class FacebookShareCount {

    /**
     * App ID
     * 数字のみで構成される
     *
     * @var string
     */
    private $appid = '';

    /**
     * シークレット
     * 16進数文字列で構成される
     *
     * @var string
     */
    private $appsecret = '';

    /**
     * アクセストークン
     * App IDとシークレットを | で繋げたもの
     *
     * @var string
     */
    private $access_token;

    public function __construct($appid, $appsecret) {
        $this->appid = $appid;
        $this->appsecret = $appsecret;
    }


    /**
     * AppIDとsecretがセットされているかどうかチェックする。
     * 正当性まではチェックしない。
     *
     * @throws Exception
     */
    private function is_valid_token() {
        if ( empty($this->appid) || empty($this->appsecret) ) {
            throw new Exception('Appid or App Secret is not set.');
        }
    }

    /**
     * FBのシェア数を取得する
     *
     * @link https://blog.hello-world.jp.net/api/2221/
     * @link https://graph.facebook.com/http://www.yahoo.co.jp
     *  // https://graph.facebook.com/?id=https://www.yahoo.co.jp にアクセス 
     * @link https://developers.facebook.com/docs/graph-api/reference/v2.7/url
     *
     * @param $permalink string permalink url
     *
     * @return int
     *
     * @throws Exception
     */
    public function get_fb_like_count($permalink) {
        $this->is_valid_token();

        $base_url = 'https://graph.facebook.com/v2.7/'; // OpenGraphプロトコルでアクセスするAPIのエンドポイント
        $parameters = array(
            'id' => urlencode($permalink), // // カウントを取得するURLをエンコードしたもの
            'access_token' => $this->appid .'|'. $this->appsecret,
        );

        $parameter_pair = array();
        foreach ( $parameters as $key => $parameter) { // GETのクエリを=で結ぶ
            $parameter_pair[] = $key . '=' . $parameter;
        }

        $url = $base_url . '?'. implode('&', $parameter_pair);

        $content = file_get_contents($url);
        $json = json_decode($content);
        if ( isset($json->share->share_count) ){
            return $json->share->share_count;
        } else { // 値が無い場合がある (一度もシェアされていない場合
            return 0;
        }
    }
}
sample.php
<?php
include 'FacebookShareCount.php';

main();


function main() {
    $appid = '';
    $secret = '';
    $url = 'http://www.yahoo.co.jp';
    $fsc = new FacebookShareCount($appid, $secret);
    $count = $fsc->get_fb_like_count($url);
    var_dump($count);
}

https://github.com/yousan/FacebookShareCount

Facebook APIの利用期限

Facebook APIは使用期限があるようです。

Screen Shot 2016-09-21 at 9.51.15 AM.png

https://developers.facebook.com/docs/apps/changelog

今回は最新のv2.7を利用したので延長がなければ2年弱は問題なく使える予定です。
逆に言うと2年経つと使えなくなる可能性があるので注意が必要ですね。

その他

Facebookのイイネ数、シェア数を取得するコードはそこそこ見つかったのですが、APIの使用期限の関連性もあって使えないコードも多くて、思ったより時間を使いました。
APIがバージョンによって廃止になっていることが原因だったようでした。
あと公式ライブラリがあるようですが使い切れませんでした。機会があればそっちも是非やってみたいですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1