【问题标题】:python-linkedin api - how do I use it?python-linkedin api - 我如何使用它?
【发布时间】:2015-07-17 17:15:54
【问题描述】:

我知道,之前已经提出过有关此问题的问题,但我找不到解决方案。我正在尝试通过据称简单易用的 python-linkedin 库访问我的 LinkedIn 帐户,但无法做到。根据 Ozgur 的页面https://github.com/ozgur/python-linkedin,我应该能够打开从 .authorization_url 函数生成的链接,但这不起作用,因为我收到错误消息,指出我的重定向链接是错误的,即使我已经在 LinkedIn 的应用程序中输入了它开发者页面。 IE。尝试打开 .authorization_url 函数提供的链接时,浏览器中显示的是以下错误消息:

“无效的redirect_uri。此值必须与使用API​​ Key 注册的URL 匹配。”

我期待的是一个我可以批准访问我的帐户的页面。我可以像下面的代码那样将 localhost:8000 (如 Ozgur 的页面所示)作为重定向链接或它必须是什么类型的链接?可以是什么吗?

from linkedin import linkedin
import webbrowser

API_KEY = '********'
API_SECRET = '*******'
RETURN_URL = 'http://localhost:8000'

authentication = linkedin.LinkedInAuthentication(API_KEY, API_SECRET, RETURN_URL, linkedin.PERMISSIONS.enums.values())
print (authentication.authorization_url)  # open this url on your browser
webbrowser.open(authentication.authorization_url)
application = linkedin.LinkedInApplication(authentication)
authentication.authorization_code = '4CqONljAz622ZBo0'
authentication.get_access_token()

我该怎么做呢?

还有一个问题,上面提到的是使用 Oauth2,但是根据他们的开发者页面,应该仍然可以使用 Oauth1,并且还没有被弃用。然而,使用 Oauth1 需要四个不同的密钥,主要指的是:

CONSUMER_KEY、CONSUMER_SECRET、USER_TOKEN、USER_SECRET

但是,从应用程序页面(即 LinkedIn 的,一个注册应用程序的地方)我只能找到两个:ClientID 和 Client_SECRET,它们用于 Oauth2。这是否意味着无论如何都不能使用 oauth1 ?

【问题讨论】:

  • 请发布实际错误消息的副本。
  • @tsroten 当然,应该这样做。现在它更新了。你知道如何做到这一点吗?
  • 我在linkedin.PERMISSIONS.enums.values() 中有一个错误需要导入吗?

标签: python linkedin


【解决方案1】:

你只需要ClientID and Client_SECRET。以下代码将帮助您获取其他两个重要密钥。 访问令牌密钥的有效期为 60 天。 无论如何使用ouath2, 我选择的重定向网址是'http://localhost:3000/auth/linkedin/callback'

检查一下

import oauth2 as oauth
import urlparse

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

request_token_url      = 'https://api.linkedin.com/uas/oauth/requestToken'
resp, content = client.request(request_token_url, "POST")
if resp['status'] != '200':
    raise Exception("Invalid response %s." % resp['status'])

print content
print "\n"

request_token = dict(urlparse.parse_qsl(content))

print "Requesr Token:",  "\n"
print "- oauth_token        = %s" % request_token['oauth_token'], "\n"
print "- oauth_token_secret = %s" % request_token['oauth_token_secret'], "\n"

authorize_url = 'https://api.linkedin.com/uas/oauth/authorize'
print "Go to the following link in your browser:", "\n"
print "%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']), "\n"

accepted = 'n'
while accepted.lower() == 'n':
    accepted = raw_input('Have you authorized me? (y/n) ')
oauth_verifier = raw_input('What is the PIN? ')

access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken'
token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth.Client(consumer, token)

resp, content = client.request(access_token_url, "POST")
access_token = dict(urlparse.parse_qsl(content))

print "Access Token:", "\n"
print "- oauth_token        = %s" % access_token['oauth_token'], "\n"
print "- oauth_token_secret = %s" % access_token['oauth_token_secret']
print "You may now access protected resources using the access tokens above."

【讨论】:

  • 这对我有用,应该是选择的答案,谢谢
  • 这也适用于我。但我被困在如何使用访问令牌来获取我所有连接的列表。你能帮忙吗?
  • 当我尝试注册时,它需要有关应用程序徽标、应用程序名称、公司等的详细信息。但我只是打算使用 Python 进行测试。我应该在那里填写什么?有什么更简单的方法可以从我自己的个人资料中获取数据?
【解决方案2】:

针对 Python 3 更新:

#%%### 3. LinkedIn API Work

import oauth2 as oauth
import urllib

consumer_key='XXXXXX' #from Linkedin site
consumer_secret='XXXXXX' #from Linkedin site
consumer=oauth.Consumer(consumer_key, consumer_secret)
client=oauth.Client(consumer)

request_token_url='https://api.linkedin.com/uas/oauth/requestToken'
resp, content=client.request(request_token_url, "POST")
if resp['status']!='200':
    raise Exception("Invalid response %s." % resp['status'])
content_utf8=str(content,'utf-8') #convert binary to utf-8 string
request_token=dict(urllib.parse.parse_qsl(content_utf8))
authorize_url=request_token['xoauth_request_auth_url']

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

accepted='n'
while accepted.lower()=='n':
    accepted=input('Have you authorized me? (y/n)') #prompt for input (y)
oauth_verifier=input('What is the PIN?') #prompt for pin

access_token_url='https://api.linkedin.com/uas/oauth/accessToken'
token=oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth.Client(consumer, token)
resp, content = client.request(access_token_url, "POST")
content8=str(content,'utf-8')
access_token = dict(urllib.parse.parse_qsl(content8))

print("Access Token:", "\n")
print("- oauth_token        = "+access_token['oauth_token']+'\n')
print("- oauth_token_secret = "+access_token['oauth_token_secret'])
print("You may now access protected resources using the access tokens above.")

【讨论】:

  • 当我点击授权生成的链接时,它无法打开一个页面并说: 找不到页面哦,我们似乎找不到您要查找的页面。尝试返回上一页或查看我们的帮助中心以获取更多信息。我哪里错了?
  • 这里的别针是什么?
【解决方案3】:

看起来很多这些答案可能已经过时了。

鉴于您似乎与特定项目无关,我建议您查看https://github.com/tomquirk/linkedin-api(免责声明:我维护它)。

您可以通过以下方式向 LinkedIn 进行身份验证:

from linkedin_api import LinkedIn

# Authenticate using any LinkedIn account credentials
api = Linkedin('youremail@gmail.com', 'l33tpassword')

之后,您可以继续执行请求,获取电子邮件,获取 LinkedIn 个人资料:

profile = api.get_profile('profile-id')

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多