使用Python无浏览器访问LinkedIn
我正在编写一个访问linkedin的命令行应用程序。我正在使用API 事情按照我的预期进行,但我对认证过程有很大的不满。目前,我需要:使用Python无浏览器访问LinkedIn,python,mechanize,linkedin,Python,Mechanize,Linkedin,我正在编写一个访问linkedin的命令行应用程序。我正在使用API 事情按照我的预期进行,但我对认证过程有很大的不满。目前,我需要: 启动我的应用程序并等待它打印身份验证URL 使用我的浏览器转到该URL 为应用程序祝福,并等待它将我重定向到URL 从URL中提取访问令牌 将该访问令牌输入到我的应用程序中 用linkedin做我需要做的事情 我不喜欢手动执行步骤2到步骤5,所以我想将它们自动化。我想做的是: 使用无头客户端访问上面步骤1中的URL 刮屏并自动给我祝福(可能需要输入用户名和密码
- 使用无头客户端访问上面步骤1中的URL
- 刮屏并自动给我祝福(可能需要输入用户名和密码——我知道这些,所以没问题)
- 等待重定向并获取重定向URL
- 从URL中提取令牌
- 利润李>
- 环顾四周,他试图做一些类似的事情,但被告知这是不可能的。为什么?李>
- 然后,在Jython和HtmlUnit中。应该可以直接使用Python和mechanize,对吗
- 最后,有没有人见过使用纯Python和mechanize(或任何其他无头浏览器替代方案)的解决方案?我不想重新发明轮子,但如果必要的话,我会把它编出来
api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
tokens = tokens_fname()
try:
fin = open(tokens)
api._request_token = pickle.load(fin)
api._request_token_secret = pickle.load(fin)
api._access_token = pickle.load(fin)
api._access_token_secret = pickle.load(fin)
except IOError, ioe:
print ioe
print 'Please run `python init_tokens.py\' first'
return
profiles = api.get_search({ 'name' : name })
我自己也没有试过,但我相信理论上这是可能的。这一想法已被描述。由于您计划只对自己进行一次授权,然后调用API获取您自己的信息,我只需手动检索您的访问令牌,而不必担心它的自动化
除非您在授权屏幕上另有指定,否则LinkedIn在授权给定应用程序时生成的用户访问令牌是永久性的。您所需要做的就是使用应用程序生成授权屏幕,完成整个过程,并在成功后回显并存储您的用户访问令牌(令牌和密码)。一旦具备了这些功能,就可以将它们硬编码到文件、数据库等中,并在调用API时使用它们
它是用PHP编写的,但基本上是这样做的。只要修改demo.php脚本,根据需要回显您的令牌。您是根据API对自己进行身份验证,然后提取数据,还是其他人?@Paul:我在对自己进行身份验证。您不能手动执行一次,然后在本地存储令牌(将其硬编码到python脚本中)?看起来并没有那么简单。每次实例化API(每次执行)时,它似乎都需要一个新的令牌。除非您在授权屏幕上另有指定,否则LinkedIn在授权给定应用程序时生成的用户访问令牌是永久的。您所需要做的就是使用应用程序生成授权屏幕,完成整个过程,并在成功后回显并存储您的用户访问令牌(令牌和密码)。一旦具备了这些功能,就可以将它们硬编码到文件、数据库等中,并在调用API时使用它们。它是用PHP编写的,但基本上就是这样。只需修改demo.php脚本以回显您的令牌。
api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
tokens = tokens_fname()
try:
fin = open(tokens)
api._request_token = pickle.load(fin)
api._request_token_secret = pickle.load(fin)
api._access_token = pickle.load(fin)
api._access_token_secret = pickle.load(fin)
except IOError, ioe:
print ioe
print 'Please run `python init_tokens.py\' first'
return
profiles = api.get_search({ 'name' : name })