この問題へのヒントです。→「FacebookのOGPデバッガーがログイン必須で自動キャッシュクリア不可になって困った」

例えばね。
こういうページがあって、このページのOGPタグのimage設定は上記のようなサムネイルの画像になってるの。

20131220_01http://antna.org/?id=32811

で、これを初めて見たとき、Facebookにシェアしようとすると、

20131220_02

こんな感じで、なんで!?っていう画像が表示されてしまってたわけですよ。
2度目のシェアの場合、設定した画像が出てくるんで、これは「Facebookの近況アップデートで入力された時に引っ張ってくる画像はかなりアホ適当だな」と思ったわけです。
なので、ページを作成した時点で自動的にFacebookのデバッガーを叩けばすむじゃん!と思ったわけです。
なのですが、自分でやるのも面倒だし、先人がうまくゴニョゴニョやってるだろうから、その知恵を拝借しよう!と思ったわけです。

そしたらぶち当たったのがこちらの記事。

FacebookのOGPデバッガーがログイン必須で自動キャッシュクリア不可になって困った | Web担当者Forum

かの有名な(?)Web担当者Forumの編集長さんも同じようなことやってて、つい最近正常に動作しなくなったからどうしましょうかね〜って記事です。

というわけでこのエントリーは、この問題をボクが解決して、編集長さんへの熱いラブレターとして書き記してやろう!という趣旨のものです、はい。

問題は、
・いままでは、記事の公開処理時に、対象URLを指定したFacebookデバッガーのURLに自動的にアクセスしたいた。
・しかし、気が付くとFacebookデバッガーを使うのにFacebookログインが必要になってしまっていた。
・当然ながら、ページを公開処理するWebサーバはFacebookにログインしていないわけだから「ログインしてください!」ってページにリダイレクトされる。
・どうしたものかねぇ〜。
って感じです。

ヒントはここにありました。
Using Self-Hosted Objects – Facebook for Developersより

When an action is published, or a Like button pointing to the object clicked, Facebook will ‘scrape’ the HTML page of the object and read the meta tags. The object scrape also occurs when:

  • The object URL is input in the Object Debugger
  • Every 7 days after the first scrape
  • When an app triggers a scrape using an API endpoint

ふむふむ、この1個目が問題なわけです。サーバがアクセスできないんですから。

で、それに続いて、

This Graph API endpoint is simply a call to:

POST /?id={object-instance-id or object-url}&scrape=true

とあります。

ふむふむ、デバッガーにアクセスできないのであれば、その先のGraph API(https://graph.facebook.com/)に直接アクセスすればいいじゃん。

と思ったわけですよ。

POSTか、ちょっと面倒やなぁと思いながら、とりあえずブラウザでアクセス検証してみたら……。
あ、GETでも動いてる……。

ばっちりシェア用の画像出てるじゃん!ってところで今日はおしまい。

P.S.
今回の検証は、まだキャッシュされてない状態に対する対応だから、Web担さんが困ってる「キャッシュされた場合」の対応ではありません。ヒントにはなってないかもしれませんね(汗

スポンサードリンク