Google API を使ってアナリティクスの PV データから人気記事ランキングを作成する日次のバッチ処理が、一週間ほど前から失敗している(ランキングが更新されていない)ことに気付きました。本稿はその対処メモです。
Google API のエラー メッセージ
PHP のライブラリを使用しています。記録されているエラーは以下の通りでした。
PHP Fatal error: Uncaught exception 'Google_AuthException' with message 'Error refreshing the OAuth2 token, message: '{\n "error" : "invalid_grant"\n}''
OAuth2 トークンのリフレッシュに失敗している……? このメッセージ、何も伝えてくれない突き放し感が半端ない。
原因と対処
エラー メッセージ「invalid_grant」の方で検索したところ、サーバーの時刻同期(ntp 設定)に被疑がありそうでした。
多くの場合、アクセストークンの有効期限はライブラリが管理してくれます。(中略)Service Account方式の場合、自動的にOSの時刻設定を利用することがほとんどです(ライブラリにもよりますが)。これが解けない invalid_grantを生むことになります。(太字は引用者)
なるほど! 筆者はレンタルサーバー上でバッチ処理を実行しています。そういえば、以前からログのタイムスタンプが 3~4分ずれていたのを思い出しました。
サポートに連絡してサーバーの時計を修正してもらったところ解決しました。
おそらく、事象が発生するまでは ずれた時間でもギリギリ大丈夫だったのが、さらに ずれが進んでデッドラインを超えてしまったのでしょう。認証エラーの原因がサーバーの時計にあるとは思いもよりませんでしたので記事にしてみました。
おまけ
むしろ「Google API を使ってアナリティクスの PV データから人気記事ランキングを作成する」の方に関心を持たれた方がいるかも。筆者は以下サイトの通りに実装させていただきました。
どなたかのお役に立つことを願いつつ また次回。