有关迁移到Linkedin API版本2.0的问题

时间:2018-12-18 13:45:32

标签: rest linkedin linkedin-api

最近的linkedin发送了一封提醒电子邮件:

  

重要更新:所有开发人员都需要在2019年3月1日之前迁移到我们的API版本2.0和OAuth 2.0。了解更多

授权后,我正在使用Linkedin Rest API获取用户信息。 旧的v1 API是: https://api.linkedin.com/v1/people/~

查看此处的迁移指南: https://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/migration-faq?context=linkedin/consumer/context

此请求必须更改。我试图提出以下要求:

https://api.linkedin.com/v2/me

获取用户基本信息(作为名字和姓氏)

然后:

https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements *(句柄〜))

获取用户电子邮件地址

不幸的是,第一个请求总是返回:

{
    "serviceErrorCode": 100,
    "message": "Not enough permissions to access: GET /me",
    "status": 403
}

我在stackoverflow上进行了很多搜索,很多建议您需要作为合作伙伴进行订阅才能访问v2 api

此处: https://business.linkedin.com/marketing-solutions/marketing-partners/become-a-partner/marketing-developer-program

迁移指南中的LinkedIn表示:

  

我的开发人员应用程序可以访问v2 API吗?通过LinkedIn开发人员门户创建的任何开发人员应用程序   在2018年12月15日之后将自动访问v2 API。

     

现有的开发人员应用程序如何?如果您的开发人员应用程序自10月1日以来已成功发出v1 API请求,   2018年,您的开发人员应用程序将自动访问v2   API。

此外,如果我要求使用emailAddress v2 API,我会得到正确的答复...因此,我认为我不需要编写成为合作伙伴的表格。

应该是什么问题?

这里是身份验证和API调用的完整路径:

1)转到身份验证页面以请求权限

window.location.href = "https://www.linkedin.com/oauth/v2/authorization?response_type=code" +
        "&client_id=" + linkedin_id + "&redirect_uri=" + redirect_uri +
        "&state=" + state + "&scope=r_basicprofile+r_emailaddress"

2)检索访问令牌

request = ("https://www.linkedin.com/oauth/v2/accessToken?grant_type=authorization_code&code=" +
                     code + "&redirect_uri=" +
                     redirect_uri + "&client_id="
                     + linkedin_id +
                     "&client_secret=" + linkedin_secret)

response = requests.get(request)

3)检索访问令牌,我们可以请求用户信息始终403

headers = {"Authorization": "Bearer "+token }
    get_user = requests.get('https://api.linkedin.com/v2/me', headers=headers)

4)获取user_email 正常工作

get_user_email = requests.get('https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))', headers=headers)

谢谢

3 个答案:

答案 0 :(得分:2)

如果只需要名字和姓氏,请尝试使用r_liteprofile而不是r_basicprofile

答案 1 :(得分:0)

尝试一下:

更改第一步: &scope = r_basicprofile + r_emailaddress进入 &scope = r_liteprofile + r_emailaddress

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

正在获取r_liteprofile信息 您将获得firstName,lastName,profilePicture,id

答案 2 :(得分:0)

在访问AccessToken请求时,您应该通过'&scope = r_basicprofile + r_emailaddress'

步骤1: AccessToken Requst将类似于

https://www.linkedin.com/oauth/v2/accessToken?grant_type=authorization_code&code={Your code}&redirect_uri={Yourredirect_uri}&client_id={Your client_id}&client_secret={Your client_secret }&scope=r_liteprofile+r_emailaddress

这将返回AccessToken,您必须使用AccessToken再次发出2个请求 1用于电子邮件和个人资料详细信息

步骤2: 电子邮件请求将类似于

https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))&oauth2_access_token={AccessToken You get from step 1}'

步骤3: 基本配置文件请求将像

https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,emailAddress,profilePicture(displayImage~:playableStreams))&oauth2_access_token={AccessToken You get from step 1}'