9

何らかの理由で、Facebookクローラーが私のRailsアクションでjson応答をトリガーしています。これにより、アクションは、通常のhtmlマークアップ+オープングラフタグなしで、オブジェクトのjson表現を返すだけになります。私はこれをrails3.2.6でテストしました。Facebookのオープングラフデバッガーを使用して、スクレーパーが何を見ているかを確認します:http: //developers.facebook.com/tools/debug

コードは非常に単純です。ユーザーなどのオブジェクトに対する単純な「表示」アクションを想像してみてください。それはで終わります:

respond_to do |format|
  format.js { render :json => @this.to_json }
  format.html
end

Facebookクローラーがformat.jsをトリガーしているため、開いているグラフタグがレンダリングされません。なぜこれが起こるのか、それを修正する方法はありますか?ありがとう。

4

2 に答える 2

17

さて、Facebookはacceptsヘッダーを送信します

*/*

特定の形式は要求されないため、railsはrespond_toブロックを順番に下っていきます。以下のようにrespond_toブロックに最初にjsをリストすると、railsはFacebookのオープンクローラーにJSONで応答しますが、これは機能しません。

respond_to do |format|
  format.js { render :json => @this.to_json }
  format.html
end

順序を切り替えるだけで、デフォルトでRailsがHTMLで応答します。

respond_to do |format|
  format.html
  format.js { render :json => @this.to_json }
end

Facebookが探しているフォーマットを指定しない理由はわかりません...私にはかなりばかげているようです。うまくいけば、これは将来の誰かに役立つでしょう。

于 2012-06-20T13:58:56.310 に答える
2

Facebookクローラーが送信しているHTTPリクエストヘッダー(特にAcceptヘッダー)を確認します。

通常のHTML出力とは異なるものを送信する必要があるとアプリケーションに思わせる値を送信する可能性があります。

于 2012-06-20T07:53:45.010 に答える