【发布时间】:2015-01-16 01:14:45
【问题描述】:
tl;博士:
我第一次尝试在 Python HTTP 请求中设置标头并收到 404。我将不胜感激(见底部)。
我一直在尝试使用 Twitter API,但运气不佳。最终,我试图获取用户发布的所有媒体(照片)(每次获取 20 或 50 或其他任何内容)
根据我使用其他 API 的经验,此过程如下:获取 userID,使用该 userId 向某个端点发出获取请求,获取 JSON 提要响应。
在 Twitter 中似乎要复杂得多。
例如,我没有看到任何可以附加访问令牌或客户端 ID 的 URL。相反,在他们的文档中,他们显示了一个我可以检索我的地方的地方
消费者密钥、消费者秘密、访问令牌和访问令牌秘密
如果我输入我的请求 URI 和“查询”,它会生成一个 oAuth 签名,在这种情况下它包含一个
签名基本字符串、授权标头和cURL命令
这就是事情变得令人困惑的地方。它说
重要提示:这只会在几分钟内有效。还要记住 cURL 命令实际上会执行请求。
所以:
问题 1: 马上我想知道如果这些凭据在几分钟后失效,我该如何使用这些凭据来检索一整天或一个周末的媒体?
问题 2: 使用他们的“探索 API”控制台,我可以测试这个查询(我正在尝试获取福特的用户 ID)我使用的 Twitter 帐户 GET https://api.twitter.com/1.1/users/lookup.json?screen_name=hyundai
仅在浏览器中输入会返回 404
{"errors": [{"message": "Bad Authentication data","code": 215}]}
但是使用他们的小控制台应用程序,我可以选择“O Auth 1 身份验证”(使用我制作的推特应用程序),我得到了我想要的 JSON 响应。检查控制台中的请求对象显示:
GET /1.1/users/lookup.json?screen_name=hyundai HTTP/1.1
Authorization:
OAuth oauth_consumer_key="555SECRET555",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1421370510",oauth_nonce="1869828628",oauth_version="1.0",oauth_token="333DONTHACKMEPLEASE333",oauth_signature="444SECRET444"
Host:
api.twitter.com
X-Target-URI:
https://api.twitter.com
Connection:
Keep-Alive
tl;dr 版本:
所以,我认为这是我需要从 Python (3) 发送的标头对象以发出相同的请求。所以这是代码:
import urllib.request
header = {
"Authorization" : "OAuth",
"oauth_consumer_key" :"555SECRET555",
"oauth_signature_method": "HMAC-SHA1",
"oauth_timestamp" : "1421362844",
"oauth_nonce":"1201915763",
"oauth_version": "1.0",
"oauth_token":"333CHANGINGTHIS33333",
"oauth_signature":"222CHANGEDTHIS222",
"Host": "api.twitter.com",
"X-Target-URI": "https://api.twitter.com",
"Connection": "Keep-Alive"
}
endpoint = 'https://api.twitter.com/1.1/users/lookup.json?screen_name=hyundai'
q = urllib.request.Request(endpoint, headers=header)
a = urllib.request.urlopen(q)
print(a.read().decode('utf-8'))
但我得到了一个不好的 404 回复。
我是否在这里错误地格式化了我的标题,还是有其他方法可以做到这一点?
【问题讨论】: