首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python通过API访问LinkedIn数据(以及一般的授权)

使用python通过API访问LinkedIn数据(以及一般的授权)
EN

Stack Overflow用户
提问于 2018-07-05 23:30:01
回答 1查看 5.3K关注 0票数 5

我正在尝试通过应用程序接口访问LinkedIn数据(我没有应用程序,我只想访问公司数据-或者看看可以访问什么)。这里还有关于这个主题的其他问题,但大多数都是过时的(使用LinkedIn当前授权过程之前的软件包)。

我遵循了有关授权的LinkedIn文档:https://developer.linkedin.com/docs/oauth2

我创建了一个应用程序(使用一个无意义的网站url,因为我没有网站)。这给了我一个客户端ID和客户端密码。

使用(过时的)来自LinkedIn (https://github.com/linkedin/api-get-started/blob/master/python/tutorial.py)的东西,我写道:

代码语言:javascript
运行
复制
import oauth2 as oauth
import urllib.parse as urlparse

consumer_key    =   'my client id e.g. sjd6ffdf6262d'
consumer_secret =   'my customer secret e.g. d77373hhfh'

request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken'
access_token_url =  'https://api.linkedin.com/uas/oauth/accessToken'
authorize_url =     'https://api.linkedin.com/uas/oauth/authorize'

consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)

resp,content = client.request(request_token_url, "POST")

request_token = dict(urlparse.parse_qsl(content))

clean_request_token = {}
for key in request_token.keys():
    clean_request_token[key.decode('ascii')] = request_token[key].decode('ascii')
request_token = clean_request_token

print ("Go to the following link in your browser:")
print ("%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']

这个链接将我带到一个网站,在那里我“给予许可”,然后显示一个PIN码。使用此引脚(这里称为oauth_verifier ):

代码语言:javascript
运行
复制
oauth_verifier = 12345
token = oauth.Token(request_token['oauth_token'],
request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth.Client(consumer, token)
content = client.request(access_token_url,"POST")

access_token = dict(urlparse.parse_qsl(content[1]))

clean_access_token = {}
for key in access_token.keys():
    clean_access_token[key.decode('ascii')] = access_token[key].decode('ascii')
access_token = clean_request_token

token = oauth.Token(key=access_token['oauth_token'],secret=access_token['oauth_token_secret'])

client = oauth.Client(consumer, token)

response = client.request("http://api.linkedin.com/v1/companies/barclays")

此响应的代码为401,原因是“OAuth请求中使用的令牌已被撤销”。

潜在的问题是:

  • 我真的不了解api是如何工作的,它们是如何与python一起工作的,授权是如何工作的,或者如何知道我需要的api url。

在相关的案例中,我有过web抓取的经验(使用请求加上漂亮的汤来解析),但没有使用API。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-08 06:26:28

我最终解决了这个问题,在这里发帖,以防有人这样做。在你投入时间之前,我还发现免费的API现在只允许你访问你自己的个人资料或公司页面。所以你可以写一个应用程序,允许用户发布到他们自己的页面上,但你不能写一些东西来抓取数据。请看这里:

LinkedIn API unable to view _any_ company profile

无论如何,要让有限的API正常工作,您需要:

  • 创建一个LinkedIn帐户,创建一个应用程序,并将重定向URL添加到您的应用程序页面(我使用的是http://localhost:8000)。本文档讲述了如何设置应用程序:https://developer.linkedin.com/docs/oauth2
  • Following上述链接中的步骤,但在python中,您需要请求获取“访问代码”。

html = requests.get("https://www.linkedin.com/oauth/v2/authorization", params = {'response_type':'code','client_id':client_id, 'redirect_uri':'http://localhost:8000', 'state':'somestring'})

  • print html.url要获得一个巨大的链接-请单击它。您将被要求登录并允许访问,然后您将被重定向到您的重定向url。这里什么都没有,但是url的末尾会有一个很长的“访问码”。将其提取出来,并通过Post请求将其发送到LinkedIn:

token = requests.post('https://www.linkedin.com/oauth/v2/accessToken', data = {'grant_type':'authorization_code','code':access_code, 'redirect_uri':'http://localhost:8000', 'client_id':client_id,'client_secret':client_secret})

  • token.content将包含一个"access_token“。这是访问API所需的。例如,要访问您自己的个人资料:

headers = {'x-li-format': 'json', 'Content-Type': 'application/json'} params = {'oauth2_access_token': access_token}

html = requests.get("https://api.linkedin.com/v1/people/~",headers=headers,params = params)

希望这对从头开始的人有用,信息大部分都在那里,但有很多假定的步骤(比如如何在请求中使用访问令牌)。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51195121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档