如何使用OAuth获取LinkedIn个人资料图片?

时间:2014-03-21 21:42:22

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

尝试使用以下内容获取原始图片:

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)

这些网址返回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可能对你有帮助。

答案 1 :(得分:1)

这是我的解决方案:

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