如何使用 Python 作为客户端使 Trello 会话持续存在?

How to make a Trello session persist using Python as the client?

我正在尝试编写一个 Python 脚本,通过我的命令行,我可以:

  1. 登录 Trello

  2. 使用 Trello Python API 从 Trello 看板等检索数据

我只能使用 Python 2.7.6,所以请不要提供任何 Python 3 个建议 — 我将无法使用它们。

我可以使用 requests 模块登录 Trello;但是,我一直在检索用户密钥以便能够使用 Trello API.

这是我目前所做的:

import trello
import requests

# Not shown: retrieve username and password from user

sess = requests.Session()

loginData = {
    'method': 'password',
    'factors[user]': username,
    'factors[password]': password
}

TRELLO_LOGIN_URL = "https://trello.com/1/authentication"

resp = sess.post(TRELLO_LOGIN_URL, trelloLogin)     # resp => <Response [200]>

此时,resp.text 包含一个字典(它在 JavaScript 或 Python 中同样有效)包含一个值为 a 的键 code很长的乱码)。我假设这(以及响应对象中的 200 状态代码)意味着我已成功登录。

所以,现在我(大概)已登录,我从 API:

请求令牌 URL
api = trello.TrelloApi(MY_API_KEY)
tokenUrl = api.get_token_url('MyApp') # => https://trello.com/1/authorize?key=<mykey>&name=MyApp&expiration=30days&response_type=token&scope=read,write

但是当我尝试使用那个时 URL:

sess.get(tokenUrl)

我得到的响应文本(由授权页面的 HTML 组成)有一个 "Log In" 按钮,而不是我在我的浏览器。对我来说,这表明 requests.Session 对象没有正确持久化。也许它在 get() 请求中使用了不正确的 cookie 或其他内容?

老实说,我并不关心问题的具体细节,只关心我必须做些什么来修复它。如何使会话持续到 get() 调用,以便我可以进行下一部分?

(当然,完全有可能——甚至有可能——我的方法从头开始就是不正确的,但我还没有找到任何文档来告诉我我应该做些什么不同的事情,所以这是这是我从 发现的 中所能想到的最好的。如果有关于以其他方式执行此操作的说明 - 但仍然来自命令行 - 请随时向我指出它们。)

显然需要进行 2 次调用才能获取令牌:

  1. https://trello.com/1/authentication 其中包含响应中的 code 字符串
  2. https://trello.com/1/authorization/session 使用之前检索到 post 的 code,应该 return 204 然后 token 将被设置为 cookie。 (您还需要提供 dsc 字符串,有关详细信息,请尝试通过 chrome 开发工具检查请求。)