0

私のアプリは、omniaauth と omniauth-facebook gem を使用して facebook に接続します。必要なすべてのデータを取得できますが、プロファイル画像のレンダリングに問題があります。

ディスクに保存するのではなく、写真の URL を使用してユーザーのプロフィール写真を表示したいと考えています。

私はこれを試しました:

<%= image_tag "#{@user.facebook.info.image}" %>

これと同様に:

<img src="http://graph.facebook.com/<UID>?fields=picture" > 

しかし、どちらも機能していません。

ディスクに保存する代わりに URL を使用することを禁じる Facebook のドキュメントは見つかりませんでした。何か不足していますか?

4

3 に答える 3

1

次のURLパターンを提供するAvatars.ioのようなサービスを使用できます。

http://avatars.io/facebook/:id
http://avatars.io/facebook/:username

このアプローチの良い点の1つは、他のサービスでもうまく機能することです。

于 2012-11-06T18:56:33.323 に答える
1

使用する:

<img src="http://graph.facebook.com/<UID>/picture" />

このエンドポイントは、画像への 301 リダイレクトを返します。Using?fields=は json オブジェクトを返します。

于 2012-11-06T16:24:58.480 に答える
0

これが解決策です。この記事で学んだ CURB gem を活用する必要がありました。

最終的に、このメソッドをアプリケーション ヘルパーに組み込みました。

def redirect_location_for(url)
  uri_str = URI.encode(url)

  result = Curl::Easy.http_get(uri_str) do |curl|
    curl.follow_location = false
  end

  result.header_str.split('Location: ')[1].split(' ')[0]
end

そして、私はこれを私の見解に持つことができました。

<%= image_tag redirect_location_for("https://graph.facebook.com/<nickname>/picture?type=square"), :size => "60x60" %>

このソリューションでは、グラフの URL に「http」ではなく「https」を使用する必要があることに注意してください。これにより、http とは異なる URL にリダイレクトされ、何らかの理由で、HTTPS を使用して写真を取得している場合、Facebook は写真のダウンロードとレンダリングの方法を制限しません。

于 2012-11-06T18:35:07.017 に答える