在我的应用程序中,我想允许用户引入一个Instagram的URL,然后自动检索它的嵌入代码。
我找到了这个参考: https://www.instagram.com/developer/embedding/#oembed
当我在Chrome浏览器中尝试给定示例(https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN)时,我会获得带有我正在寻找的代码的json。
但是,如果我从rails控制台尝试这个:
Net::HTTP.get_response(URI("https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN"))
我明白了:
#<Net::HTTPMovedPermanently 301 MOVED PERMANENTLY readbody=true>
我看到Instagram有一个新的API,但我不想让用户通过Instagram进行身份验证。
有办法吗?
答案 0 :(得分:3)
您可以oembed gem使用soulim。很好,干净的方式来嵌入代码
如果是Instagram,就像
在您的宝石文件中包含以下行
gem 'oembed'
下
bundle install
创建一个帮助类
class InstaApi
include Oembed::Client
def endpoint_uri
'http://api.instagram.com/oembed'
end
end
现在你可以使用
instClient = InstaApi.new
info = instClient.fetch('http://instagr.am/p/BUG/')
获取嵌入代码
embed_code = info["html"]
答案 1 :(得分:1)
使用docs
def fetch(uri_str, limit = 10)
# You should choose a better exception.
raise ArgumentError, 'too many HTTP redirects' if limit == 0
response = Net::HTTP.get_response(URI(uri_str))
case response
when Net::HTTPSuccess then
response
when Net::HTTPRedirection then
location = response['location']
warn "redirected to #{location}"
fetch(location, limit - 1)
else
response.value
end
end
str = "https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN"
response = fetch(str)
redirected to https://api.instagram.com/publicapi/oembed/?url=http://instagr.am/p/fA9uwTtkSN
redirected to https://www.instagram.com/publicapi/oembed/?url=http://instagr.am/p/fA9uwTtkSN
redirected to https://api.instagram.com/oembed/?url=http://instagr.am/p/fA9uwTtkSN
=> #<Net::HTTPOK 200 OK readbody=true>
response.body
=> # JSON response
所以只需按照重定向即可。