API

[PHP] Facebook APIのOauthのエラー解決「URLを読み込めません」「Can’t Load URL」

by codechord. 1 Comment

FacebookのAPIを使おうとOauth周りの処理に公式のPHP SDKのライブラリ(v5系)を利用している前提での話です。
(※2016年冬期の記事です。)
https://github.com/facebook/php-graph-sdk

本SDKライブラリを利用して、Facebook APIでOauth認証しようとする際、特定のサーバの環境下で、正式にApp登録をしているにもかかわらず、
下記のようなエラーがでる時があります。すごくはまりましたので、メモとして残します。(自分の場合はさくらのレンタルサーバでした。)

続きを読む »

Google Analytics APIのエラー。v2.3からv3移行手順。OAuth2対応とxmlからJSONへ

by codechord. 0 Comments

md_reporting
Google Analytics API v2.3のサポートが2015年5末頃に終了したみたいで、動かなくなっちゃったアプリケーションがあったので、2015年6月時点の最新であるv3に対応させないと行けないということで、書き記します。

次のようなエラーで引っかかった人のための記事です。

User does not have any Google Analytics Account.
Failed to authenticate user.

GA api v3で何が変わった

個人的に思うのは、大きく次の3つ。

  • OAuth2.0対応の必須
  • XML形式⇒JSON形式
  • リクエスト先のURLの変更

この中で特に大きいのはOAuth2への対応。
これまではEmailとPasswordで接続できてましたけど、APIキーを発行して、Analyticsの設定もかえないといけなくなった。プログラム側の修正はその後の話。

OAuthの対応の準備

手順としては、次の通り

  1. APIキーを発行
  2. Google Analyticsの管理画面で追加設定
  3. アプリ側の仕様変更へ対応。
    • OAuth対応(手順1で生成されたメールアドレスや鍵を利用。)
    • JSON形式に対応させるか、xml形式にフォーマットし直す。

[1,2]の手順は、こちらのページで詳しく書かれてますので、詳しくは割愛。
「Google Analytics API v3をPHPから利用する方法 | karakaram-blog」

[3]については、「Data export API」っていうものから「Analytics Core Reporting API」に代わるわけなんだけど、移行させるだけなので、APIの名称なんてどうでも良いです。
一応ドキュメントのリンクを。ちゃんと読みましょう。

コードの修正

さて、準備が整ったところで、実装を。
これから新規でv3アプリ作る人なんかは、composerなんかでよさそうなlibraryで対応したら良いと思います。
今回はcomposer使えない環境だったので手軽なライブラリを探したところ、「GAPI」なるものが良さ気で使った。
OAuth2がとても簡単。

githubのReadmeにあるサンプルの通りで簡単に動きます。簡単です。
https://github.com/erebusnz/gapi-google-analytics-php-interface
自分の場合、そのアプリ側がv2のxmlに最適化されてて、json形式用にフォーマット追加するのが面倒な環境だった。
移行の場合大体そう。
ライブラリ側で面倒みてくれば最高というわけで、このライブラリ側でv2のxml形式風に返すメソッド追加して、マージされるかはわからないけど、プルリクおくりましたという紹介。
https://github.com/tomothumb/gapi-google-analytics-php-interface/

とりあえず、僕のリポジトリつくったらxmlの文字列が返ってきます。
こんな感じです。

最後に使い方というかサンプルをば。ちなみに、xmlの文字列が返ってくるので、echo やver_dumpして、ブラウザ上で閲覧すると真っ白です。ソース表示にするとちゃんとxmlが出力されてるのがわかります。

たぶん、これで、xml前提のアプリとして実装されてた場合は移行がそこまで大変じゃなくなるのじゃないかな。もちろん、v3を活用するにはJSON用に作りなおすのがベストなんでしょうけどね。
ちなみに、v2のXML形式は、こちらのページを参考にしました。

(画像はGoogle Analytics APIのドキュメントページから拝借させていただきました。)