如何使用 Python 作为客户端使 Trello 会话持续存在?
How to make a Trello session persist using Python as the client?
我正在尝试编写一个 Python 脚本,通过我的命令行,我可以:
登录 Trello
使用 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 次调用才能获取令牌:
- https://trello.com/1/authentication
其中包含响应中的
code
字符串
- https://trello.com/1/authorization/session
使用之前检索到 post 的
code
,应该 return 204 然后 token
将被设置为 cookie。 (您还需要提供 dsc
字符串,有关详细信息,请尝试通过 chrome 开发工具检查请求。)
我正在尝试编写一个 Python 脚本,通过我的命令行,我可以:
登录 Trello
使用 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:
请求令牌 URLapi = 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 次调用才能获取令牌:
- https://trello.com/1/authentication
其中包含响应中的
code
字符串 - https://trello.com/1/authorization/session
使用之前检索到 post 的
code
,应该 return 204 然后token
将被设置为 cookie。 (您还需要提供dsc
字符串,有关详细信息,请尝试通过 chrome 开发工具检查请求。)