获取LinkedIn个人资料图片

时间:2011-08-05 11:39:35

标签: api linkedin

有没有简单的方法来获取用户LinkedIn个人资料照片?

理想情况与Facebook的相似 - http://graph.facebook.com/userid/picture

11 个答案:

答案 0 :(得分:51)

您可以使用此调用检索原始照片尺寸:

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

请注意,这可能是任何尺寸,因此您需要进行缩放,但图像是用户上传的原始图像。

答案 1 :(得分:32)

不那么容易......你需要通过OAuth,然后代表会员,你要求:

http://api.linkedin.com/v1/people/{user-id}/picture-url

答案 2 :(得分:10)

使用OAuth 2.x完成Linkedin 用户身份验证后,请向人员网址发出请求。

  

https://api.linkedin.com/v1/people/~:(id,email-address,first-name,last-name,formatted-name,picture-url)?format=json

~代表当前经过身份验证的用户。响应将是这样的......

{
  "id": "KPxRFxLxuX",
  "emailAddress": "johndoe@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "formattedName": "John Doe",
  "pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}

希望这有帮助!

答案 3 :(得分:7)

如果您使用API​​的2.0版本(所有开发人员都需要迁移by March 1, 2019),则应使用投射方式来扩展profilePicture.displayImage。如果执行此操作,则displayImage~中将包含完整的JSON元素profilePicture(“〜”不是错字),其中包含您可能需要的所有信息。

https://api.linkedin.com/v2/me?projection=(id,profilePicture(displayImage~:playableStreams))

您可以在Profile Picture API doc上查看更多内容,以查看JSON响应或the Profile API doc

答案 4 :(得分:6)

我在我的解决方案中使用OWIN,因此在用户允许您的应用程序使用LinkedIn凭据后,对URL https://api.linkedin.com/v1/people/~:(picture-url)?format=json进行简单明了的GET请求,如前所述,请求标头中的Bearer授权解决了我的问题。

我的Startup.Auth.cs文件

var linkedInOptions = new LinkedInAuthenticationOptions()
{
   ClientId = [ClientID],
   ClientSecret = [ClientSecret],
   Provider = new LinkedInAuthenticationProvider()
   {
      OnAuthenticated = (context) =>
      {
          // This is the access token received by your application after user allows use LinkedIn credentials
          context.Identity.AddClaim(new Claim(
              "urn:linkedin:accesstoken", context.AccessToken));
          context.Identity.AddClaim(new Claim(
              "urn:linkedin:name", context.Name));
          context.Identity.AddClaim(new Claim(
              "urn:linkedin:username", context.UserName));
          context.Identity.AddClaim(new Claim(
              "urn:linkedin:email", context.Email));
          context.Identity.AddClaim(new Claim(
              "urn:linkedin:id", context.Id));

          return Task.FromResult(0);
      }
   }
};

app.UseLinkedInAuthentication(linkedInOptions);

我在LinkedIn中获取用户个人资料照片的方法:

public string GetUserPhotoUrl(string accessToken)
{
   string result = string.Empty;
   var apiRequestUri = new Uri("https://api.linkedin.com/v1/people/~:(picture-url)?format=json");
   using (var webClient = new WebClient())
   {
      webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + accessToken);
      var json = webClient.DownloadString(apiRequestUri);
      dynamic x = JsonConvert.DeserializeObject(json);
      string userPicture = x.pictureUrl;
      result = userPicture;
   }
   return result;
}

最后我的动作片段消耗了上述方法:

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
   ...
   var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
   string accessToken =
               externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == "urn:linkedin:accesstoken").Value;
   model.PhotoUrl = GetUserPhotoUrl(accessToken);
   ...
}

我希望它可以提供帮助。 最好的问候

答案 5 :(得分:4)

这对我有用!

解释 -

这是针对包含所有其他数据的缩略图 -

https://api.linkedin.com/v1/people/~:(id,location,picture-urls::(original),specialties,public-profile-url,email-address,formatted-name)?format=json

这适用于包含所有其他数据的原始图像 -

https://api.linkedin.com/v1/people/~:(id,location,picture-url,specialties,public-profile-url,email-address,formatted-name)?format=json

只需使用picture-urls::(original)代替picture-url

目前正在Gradbee

中使用

答案 6 :(得分:2)

当您登录linkedin时,您将获得accessstoken。使用该访问令牌,您可以检索用户数据

 LinkedInApiClient client = factory.createLinkedInApiClient(accessToken);
                        com.google.code.linkedinapi.schema.Person person = client.getProfileForCurrentUser(EnumSet.of(
                                ProfileField.ID, ProfileField.FIRST_NAME, ProfileField.LAST_NAME, ProfileField.HEADLINE,
                                ProfileField.INDUSTRY, ProfileField.PICTURE_URL, ProfileField.DATE_OF_BIRTH,
                                ProfileField.LOCATION_NAME, ProfileField.MAIN_ADDRESS, ProfileField.LOCATION_COUNTRY));
    String imgageUrl=person.getPictureUrl();

答案 7 :(得分:1)

如果您的目标只是在您的网站上显示照片,那么LinkedIn Member Profile Plugin可能会为您效劳。它将显示照片,一些其他信息以及LinkedIn品牌。

由于LinkedIn API仅用于代表current logged in user,因此它不提供与facebook图表api类似的功能。

答案 8 :(得分: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 = 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

答案 9 :(得分:0)

对我而言,这是有效的

image = auth.extra.raw_info.pictureUrls.values.last.first

使用omniauth-linkedin gem

答案 10 :(得分:0)

这可能不是您所要求的,但它对个人调查很有用。

在Firefox中调用页面,左键单击背景图像上的菜单。 选择Inspect Element(Q)。

搜索-target-image&#34; 这将是img元素中id属性的结束。 该img元素的src属性将是背景图像的URL。