過去に制作したウェブサイトでFacebookグラフAPIとアクセストークンを使ってFacebookページの記事データを取得し一覧表示していたのですが、何らかのエラーで表示されなくなっていました。その際の状況や解決に至った経緯を残しておきたいと思います。
Facebookページのフィード取得ができなくなったときの状況
表示していたページの状態
次のようなエラーが出ており、アクセストークンによる投稿データの取得に失敗しているようです。
failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in ~~
その結果、投稿を表示するループもエラーになります。
Invalid argument supplied for foreach() in ~~
PHPのエラーを表示する設定「display_errors」は運用中のウェブサイトではオフ推奨です。
エラーの表示と共に予期しない情報を公開してしまう可能性があります。
アクセストークンの確認
使用しているアクセストークンをアクセストークンデバッガーで調べてみると「使用する前に権限を与えてください云々」といった感じの英語のエラーが帰ってきました。
参考リンク
Meta for Developers – アクセストークンデバッガー
アクセストークンデバッガーで表示されたエラーの英文を書き留めておくべきでした──。
少し前まで正常に動いていたのは確認しているので仕様変更等も疑いつつ、アクセストークンそのもの、もしくはそれを発行しているFacebookアプリに目星をつけて調べ始めました。
確認箇所と修正
見覚えのない「アプリタイプ」の表示
調べているうちにFacebookアプリのダッシュボード画面上部に「アプリタイプ 生活者」という表記があることに気づきました。「アプリタイプ・生活者」どちらの言葉にも見覚えがないので(忘れているだけかも)マニュアルを見てみるとアプリタイプの種類によって権限に違いがあるようです。
そして「生活者」では今まで行っていたような権限は無いようです。
参考リンク
Meta for Developers – アプリ管理
試しにアプリを新規作成しようとすると参考画像のようなアプリタイプを選択するところから始まります。
アプリタイプは後から変更できない
アプリタイプが「ビジネス」であれば十分な権限があるのでこれにしたいところですがアプリタイプは後から変更できないらしく、2021年3月22日より前に作成されたアプリに限りアプリタイプを削除できるとのこと。
私の場合は「2021年3月22日より前」に該当するのでアプリタイプの削除を試すことにしました。
アプリのダッシュボードでは「生活者」と書かれていますが公式マニュアルでは「消費者」と書かれており表記が安定しません──。ちなみに英語表記では「Consumer」のようです。
アプリタイプ「生活者」を削除してみる
アクセス権限に制限のある「生活者」を削除してみます。
アプリタイプは変更できず削除のみとのことですがここでは「アプリタイプを変更」と表記されています。
ダッシュボード上部にこの案内が無い場合は
「アプリダッシュボード > アプリレビュー > アクセス許可と機能 > ページ最下部のアプリタイプを削除ボタン」
から操作できます。
理由を選んで保存すれば削除できるようです。
今回の場合の理由はまさに「必要なアクセス許可や機能が見当たらない」です。
Facebookアプリのダッシュボードからアプリタイプの表示が消えたので削除できたようです。
アプリ一覧画面(マイアプリ)ではなぜか「タイプ:ビジネス」となっていますが表記の曖昧さは気にせず続けます。
復旧完了:アプリタイプによる権限不足が原因だった
この操作を終えた時点でFacebookページの投稿データ取得も復活し、ウェブサイトにも正しく表示されるようになりました。アクセストークンデバッガーもエラーは出ていません。
やはり「生活者」による権限不足が原因だったようです。
補足
新しいデータアクセスレベル
後から調べてみて分かったのはFacebookアプリの権限に関する部分が新しくなったようです。
これに関して「APIへのアクセスを保持し、無効化を避けるためには色々確認してくだい」という旨の案内がアプリ管理画面に届いていたのですが、これに気づかず確認を怠ったためなんらかの基準により「生活者」が割り当てられていたのではないかと思います。
参考リンク
Meta for Developers – ドキュメント > アプリタイプ
Meta for Developers – ドキュメント > アクセスレベル