我正在使用带有设备的Omniauth-Twitter。
推特 API 给我
{
"id": 2244994945,
"id_str": "2244994945",
"name": "TwitterDev",
"screen_name": "TwitterDev",
"location": "Internet",
"profile_location": null,
"description": "Developer and Platform Relations @Twitter. We are developer advocates. We can't answer all your questions, but we listen to all of them!",
"url": "http://twitter.com",
"entities": {
"url": {
"urls": [
{
"url": "https://twitter.com",
"expanded_url": "https://dev.twitter.com/",
"display_url": "dev.twitter.com",
"indices": [
0,
23
]
}
]
},
"description": {
"urls": []
}
},
.....
我需要获取我的网站字段的expanded_url,但它是在一个数组中,我如何获取这些数据?
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |designer|
user.provider = auth.provider
user.uid = auth.uid
user.username = auth.info.nickname
user.website = HERE_I_NEED_USERS_WEBISTE_INFO
end
end
假设您在一个名为 twitter_data
的变量中拥有该推特数据。 如果它具有上述结构,则可以通过以下方式进入extended_url
:
twitter_data["entities"]["url"]["urls"].first["expanded_url"]
我建议在控制台中使用一些真实数据尝试此操作,看看您会得到什么。
编辑:
根据 gem doco omniauth-twitter
,您可以从身份验证哈希中获取所有这些信息。
看起来您可以像这样获得相关的URL:
auth = request.env['omniauth.auth']
twitter_data = auth[:extra][:raw_info]
twitter_data["entities"]["url"]["urls"].first["expanded_url"]
将其
添加到我的 designer.rb 中起作用了!
begin
user.website = Net::HTTP.get_response(URI.parse(auth.info.urls.Website))['location']
rescue
user.website = auth.info.urls.Website
end