WP Facebook Portal 復活方法

WP Facebook Portal を使いたいという人がいたので調べてみたら、どうもFacebook APIの仕様変更に伴い、正常に動作しないことになっていました。

WP Facebook Portal

APIの仕様を熟読するほど暇がないので、適当に情報検索したり、コードを眺めたり、APIの返り値を覗いたり・・・。

その中でとりあえず簡単に動作させる方法を見つけたので記事にしておきます。

前提として、Facebook for Developersで、client_id、client_secret 、facebook page id が取得できているものとします。

必要なものは「アクセストークン」で、簡単に取得する方法として他のプラグイン”Custom Facebook Feed“を導入します。

Custom Facebook Feed

設定画面を進めて行くと、Facebook Access Tokenが表示されます。

これをコピーしておいてください。 ※プラグインはもう必要ないので削除してOKです。

次にWP Facebook Portal プラグインのファイルを直接編集します。

/wp-content/plugins/wp-facebook-portal/libraries/facebook.php の167行目付近に $this->accessToken=”コピーしたトークン“; を1行追記してください。
これで動作するようになります。

    public function getAccessToken($config = array())
    {
        if (empty($config)) {
            if ($this->accessToken !== null) {
                return $this->accessToken;
            }
        } else {
            $this->setConfig($config);
        }
        $params = array(
            'client_id' => $this->appId,
            'client_secret' => $this->appSecret,
            'grant_type' => 'client_credentials',
        );
        if ($response = $this->apiRequest('/oauth/access_token', $params)) {
            if (is_array($response)) {
                $result = $response;
            } else {
                parse_str($response, $result);
            }
            if (!empty($result['access_token'])) {
                $this->setAccessToken($result['access_token']);
            }
        }
        $this->accessToken = "***********************";
        return $this->accessToken;
    }

Custom Facebook Feedで取得したトークンの有効期限は無期限になっているので、1度手を加えればAPIの変更がない限り永続して使えるかと思います。今回、プラグインのアクセストークンを取得する部分を改修しようと思いましたが、なかなか面倒くさく、この簡単な方法で対応しております。
一応、他のサイトを参考にしながら無期限のアクセストークンを取得するプログラムを作ってみたので参考に置いておきます。

有効期限の確認はアクセストークンデバッガーをお使いください。

<?php
session_start();
$client_id = "**************"; // 【client_id】
$client_secret = "****************"; // 【client_secret】
$redirect_uri = "***************"; // 【redirect_uri】

$code = $_REQUEST['code'];
$error = $_REQUEST['error'];
$error_reason = $_REQUEST['error_reason'];
$error_description = $_REQUEST['error_description'];

if (empty($code) && empty($error)) {

    // Facebook認証後のリダイレクトによるアクセスではない場合
    // (= GETパラメータに "code" または "error" がない場合)
    
    // CSRF protection
    $_SESSION['state'] = md5(uniqid(rand(), TRUE));
        
    // Facebook認証に遷移
    // 例;
    // Facebook未ログインの場合 → Facebookログイン画面を表示
    // Facebookログイン済 + アプリを許可済の場合
    // → "redirect_uri" に指定したURLに、GETパラメータ "code" 付きで
    // リダイレクトされる
    header('Location: https://graph.facebook.com/oauth/authorize'
                   . '?client_id=' . $client_id
                   . '&redirect_uri=' . urlencode($redirect_uri)
                   . '&scope=publish_pages,public_profile'
                   . '&display=popup'
                   . '&state=' . $_SESSION['state']);
} else {
    
    // Facebook認証後のリダイレクトによるアクセスの場合
    
    if (!empty($code)) {
        
        // Facebook認証成功の場合
        
        // "redirect_uri" に指定したURLに、
        // GETパラメータ "code" が付加されてリダイレクトされる
        if($_REQUEST['state'] == $_SESSION['state']) { // CSRF protection
            
            // アクセストークン取得用のURL生成
            $token_url = 'https://graph.facebook.com/oauth/access_token' 
                       . '?client_id=' . $client_id
                       . '&redirect_uri=' . urlencode($redirect_uri) 
                       . '&client_secret=' . $client_secret 
                       . '&code=' . $code;
            
            // アクセストークン取得 - [短い 有効期限]
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $token_url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $token = curl_exec($ch);
            
            // アクセストークンを表示
            //echo $token;
            $tk = json_decode($token);
            //echo $tk->{'access_token'};
            
            // アクセストークン取得用のURL生成
            $token_url = 'https://graph.facebook.com/oauth/access_token' 
                       . '?grant_type=fb_exchange_token'
                       . '&client_id=' . $client_id
                       . '&redirect_uri=' . urlencode($redirect_uri) 
                       . '&client_secret=' . $client_secret 
                       . '&code=' . $code
                       . '&fb_exchange_token=' . $tk->{'access_token'};
            
            // アクセストークン取得 - [長い 有効期限]
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $token_url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $token = curl_exec($ch);
            $tk = json_decode($token);
            echo $tk->{'access_token'};

            $token_url = "https://graph.facebook.com/v3.1/me/accounts?access_token=".$tk->{'access_token'};
            
            // アクセストークン取得 - [無期限 有効期限]
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $token_url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $token = curl_exec($ch);
            $tk = json_decode($token["data"]);

            // アクセストークンを表示
            echo $tk->{'access_token'};
        }
        
    } else if (!empty($error)) {
        
        // アクセス拒否の場合
        
        // Facebookアプリのインストール / 権限許可の画面で
        // "キャンセル" ボタンを押す等した場合、
        // "redirect_uri" に指定したURLにGETパラメータ 
        // "error" "error_reason" "error_description"
        // が付加されてリダイレクトされる
        echo 'error:' . $error 
          . '/error_reason:' . $error_reason 
          . '/error_description:' . $error_description;
    }
}

?>

参考サイト:Facebook API ページの無期限 Access Token 取得方法
参考サイト:アクセストークンを取得する (User Login Server-side Flow)

SMOOTH-GESTURES「先頭へ移動」「末尾へ移動」の復活方法

相変わらずChromeのマウスジェスチャーをSMOOTH-GESTURESにしています。

ただ、ずいぶん前にChromeの仕様が変わったせいで[先頭へ移動] [末尾へ移動]が動かなくなっておりました。

そこまで不便ではなかったので放置していたのですが、何となく復活させてみたので方法を紹介します。

しかし、未だに使っている人はいるのだろうか・・・?笑

 

前回の記事も参考にして頂きながら、smooth-gestures-0.15.4.crxを解凍します。

smooth-gestures

解凍したフォルダの中のJSフォルダに[background.js]があるので開きます。

smooth-gestures-0.15.4/js/

jsファイルを開く場合はTeraPadsakura editorを使用してください。

私は長年 sakura editor を愛用しています。

置換画面で、[document.body] を [document.scrollingElement] に書き換えます。

保存して、Chromeの拡張画面で『パッケージ化されていない拡張機能を読み込む』を選択し、解凍したフォルダを選択してください。

Chromeをいったんすべて閉じて、起動しなおすと[先頭へ移動] [末尾へ移動]が復活しているはずです。

これでまた快適なネットサーフィン環境が戻ってきますね!