2

こんにちは
、Facebookユーザーのアルバムのカバー写真を取得しようとしています。
APIページに記載されているように、
http s://graph.facebook.com/ [album_id]} / picture?access_token = blahblahblah ...を取得すると、「アルバムのカバー画像のURLを含むHTTP302」が返されます。
ここのドキュメント:http://developers.facebook.com/docs/reference/api/album

HTTParty、Net:HTTPを試しましたが、RedirectFollowerクラス
HTTPartyは画像自体を返しますが、
NET:HTTPとRedirectFollowerはどこにも「場所」(URL)情報が
ありません...URIを使用しない場合URLをgetメソッドに渡すときに.encodeを実行すると、「bad uri」エラー
が発生しますが、URI.encodeを使用してエンコードされたURIを渡すと、EOFError(ファイルの終わりに到達)が発生します
。驚くべきことに、場所のURLを確認できます。 apigeeのFBAPIを使用する場合

Net:HTTPドキュメントで推奨されているリダイレクト方法は次のとおりです。
何か変更する必要がありますか?またはこれを行う簡単な方法はありますか?ありがとうございました!!

def self.fetch(uri_str, limit = 10)
  response = Net::HTTP.get_response(URI.parse(uri_str))
  case response
    when Net::HTTPSuccess     then response
    when Net::HTTPRedirection then fetch(response['location'], limit - 1)
  else
    response.error!
  end
end
4

2 に答える 2

3

宝石を使用してもかまわない場合は、curbこれを行います。follow_locationパラメータの使用がすべてです。

gem 'curb'
require 'curb'

# http://www.stackoverflow.com/ redirects to http://stackoverflow.com/

result = Curl::Easy.http_get("http://www.stackoverflow.com/") do |curl|
 curl.follow_location = true
end

puts result.body_str

ただし、この機能を備えたライブラリはこれだけではありません。

注意として、多くの場合、ヘッダーに無効な場所があり、それを有用なものにレンダリングするには、ユーザーエージェントがそれを解釈する必要があります。のようなヘッダーLocation: /は、フェッチする前に書き直す必要があります。また、のようなヘッダーがLocation: uri=...表示され、そこから場所を引き出す必要がある場合もあります。自分で書き直すよりも、ライブラリに任せるのが本当に最善です。

于 2010-12-07T18:38:21.443 に答える
2

これが私がいくつかの試行錯誤の後に終わるものです:

uri_str = URI.encode(https://graph.facebook.com/[album_id]}/picture?access_token=blahblahblah...)

result = Curl::Easy.http_get(uri_str) do |curl|
  curl.follow_location = false
end
puts result.header_str.split('Location: ')[1].split(' ')[0]

返されたheader_strは「HTTPblahblahblah
Location:http://xxxxxxx/xxxx.jpg blah blah blah」の
ように見えるので、2 split()を使用してURLを取得できまし
た。最終結果は
、curl.follow_locationでもあるクリーンURLです。そのページの本文を返さないようにfalseにする必要があります

于 2010-12-08T15:58:25.040 に答える