【问题标题】:How to get LinkedIn profile picture using OAuth?如何使用 OAuth 获取 LinkedIn 个人资料图片?
【发布时间】:2014-04-29 11:41:03
【问题描述】:

借助 OAuth,用户可以使用他们的 LinkedIn 帐户登录我的 Rails 应用程序。但是,我无法显示用户的个人资料图片。以下网址不加载图片:

<%= image_tag("http://api.linkedin.com/v1/people/{user-id}/picture-url") %>

如何让用户的 LinkedIn 个人资料图片显示在我的 Rails 应用程序中?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 oauth linkedin


    【解决方案1】:

    尝试获取原图:

    http://api.linkedin.com/v1/people/{user-id}/picture-urls::(original)
    

    更新:

    来自current docs(推荐阅读):

    使用当前用户(用户登录后):

    http://api.linkedin.com/v1/people/~:(picture-url)
    

    使用 member_id:

    http://api.linkedin.com/v1/people/id=12345:(picture-url)
    

    公开资料:

    http://api.linkedin.com/v1/people/url=<public-profile-url>:(picture-url)
    

    这些 URL 返回xml,因此您可以解析xml 响应以获取picture-url 字符串并将其用作image_tag 的参数。或者,您可以将信息作为json 传递一个额外的参数来检索,例如:

    http://api.linkedin.com/v1/people/~:(picture-url)?format=json
    

    在这两种情况下(xmljson),您需要从 api 响应中提取 picture-url 以将其传递给 image_tag

    这颗宝石omniauth-linkedin-oauth2 可能会对你有所帮助。

    【讨论】:

    • 我更新了参考当前文档的答案。成功了吗?
    • 感谢您的更新。如何引用用户的会员令牌? uid 好像不是这个
    • 刚试过:&lt;%= image_tag("http://api.linkedin.com/v1/people/id={user-id}:(picture-url)") %&gt; 但还是没有成功
    • 是的,它们是选项。例如,使用@response = JSON.parse(open(url_with_json_format).read),您将获得@response 的哈希值。然后您可以访问@response['person']['profile_url'] 等属性。
    • 如果您使用 gem,最好将方法更改为:在 oauth 回调中,将哈希响应中的一些(相关)属性保存到用户表。其中之一,列picture_url,然后您就可以像这样使用它:@user.picture_url
    【解决方案2】:

    这是我的完美解决方案:

    def callback(self):
        self.validate_oauth2callback()
        oauth_session = self.service.get_auth_session(
            data={'code': request.args['code'],
                  'grant_type': 'authorization_code',
                  'redirect_uri': self.get_callback_url()},
            decoder=jsondecoder
        )
        me = oauth_session.get('people/~:(id,first-name,last-name,public-profile-url,email-address,picture-url,picture-urls::(original))?format=json&oauth2_access_token='+str(oauth_session.access_token), data={'x-li-format': 'json'}, bearer_auth=False).json()
        social_id = 'linkedin$' + me['id']
        name = me['firstName']
        surname = me['lastName']
        email = me['emailAddress']
        url = me['publicProfileUrl']
        image_small = me.get('pictureUrl', None)
        image_large = me.get('pictureUrls', {}).get('values', [])[0]
        return social_id, name, surname, email, url, image_small, image_large, me
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2012-01-24
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多