如何从 Twitter API 获取 Twitter 用户网站数据,以便我的 Rails Devise 注册



我正在使用带有设备的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

最新更新