使用Python无需浏览器访问LinkedIn

mpe*_*kov 9 python mechanize linkedin

我正在编写一个访问linkedin的命令行应用程序.我正在使用python-linkedin API.

事情按照我的预期运作,但我对身份验证过程抱有很大的抱怨.目前,我需要:

  1. 启动我的应用程序并等待它打印身份验证URL
  2. 使用我的浏览器转到该URL
  3. 为我的应用程序祝福并等待它将我重定向到URL
  4. 从URL中提取访问令牌
  5. 将访问令牌输入到我的应用程序中
  6. 做我需要做的与linkedin

我不喜欢手动执行步骤2到5,所以我想自动化它们.我在想的是:

  • 使用像机械化这样的无头客户端来访问上面步骤1中的URL
  • 刮掉屏幕并自动给我祝福(可能需要输入用户名和密码 - 我知道这些,所以没关系)
  • 等待重定向并获取重定向URL
  • 从URL中提取令牌
  • 利润!

提问时间:

  • 环顾四周,这个人就在SO这里尝试做类似的事情,但被告知这是不可能的.为什么?
  • 然后,这个人在Jython和HtmlUnit中完成它.应该可以用直接的Python和机械化,对吗?
  • 最后,有没有人看到过直接Python和机械化(或任何其他无头浏览器替代品)的解决方案?我不想重新发明轮子,但如有必要,我会对其进行编码.

编辑:

用于初始化令牌的代码(使用接受答案的方法):

api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
result = api.request_token()
if not result:
    print 'Initialization error:', api.get_error()
    return

print 'Go to URL:', api.get_authorize_url()
print 'Enter verifier: ',
verifier = sys.stdin.readline().strip()
if not result:
    print 'Initialization error:', api.get_error()
    return

result = api.access_token(verifier=verifier)
if not result:
    print 'Initialization error:', api.get_error()
    return

fin = open('tokens.pickle', 'w')
for t in (api._request_token, api._request_token_secret, 
        api._access_token, api._access_token_secret ):
    pickle.dump(t, fin)
fin.close()

print 'Initialization complete.'
Run Code Online (Sandbox Code Playgroud)

使用令牌的代码:

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 })
Run Code Online (Sandbox Code Playgroud)

Pau*_*ega 2

由于您计划仅对自己进行一次授权,然后调用 API 来获取您自己的信息,因此我只需手动检索您的访问令牌,而不必担心将其自动化。

除非您在授权屏幕上另行指定,否则当您授权给定应用程序时 LinkedIn 生成的用户访问令牌是永久性的。您需要做的就是使用您的应用程序生成授权屏幕,完成该过程,并在成功后回显并存储您的用户访问令牌(令牌和秘密)。一旦掌握了这些,您就可以将它们硬编码到文件、数据库等中,并在调用 API 时使用它们。

它是用 PHP 编写的,但这个演示基本上就是这样做的。只需修改 demo.php 脚本即可根据需要回显您的令牌。