【问题标题】:Invalid response (404) with Twitter API in Python (and in general)Python(和一般情况下)使用 Twitter API 的无效响应(404)
【发布时间】: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 回复。

我是否在这里错误地格式化了我的标题,还是有其他方法可以做到这一点?

【问题讨论】:

    标签: python json http twitter


    【解决方案1】:

    如果您从请求中捕获网络流量(使用 http 而不是 https),您将看到您发送的标头与预期的标头不同。这就是您收到 404 响应的原因。

    你想要的是类似的东西

    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"
    }
    

    当然,您始终可以使用 OAuth 库,例如 RAuth 或类似的,请参阅 Python: OAuth Library 讨论

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 2010-12-04
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多