API 从 twitter 调用 (python) returns 未经授权的错误,但适用于 Postman

API call (python) from twitter returns Unauthorized error but works on Postman

我最近尝试使用邮递员获取 organic metrics 的推文。我试用postman成功了,我用的是Oauth 1.0授权。从这个例子中,我为 API 请求提取了 python 语法。

示例代码如下:

import requests
url = "https://api.twitter.com/2/tweets/123456789?tweet.fields=non_public_metrics,organic_metrics"
payload={}
headers = {
  'Authorization': 'OAuth oauth_consumer_key="xxxxxxxxxx",oauth_token="xxxxxxxxxx",oauth_signature_method="HMAC-SHA1",oauth_timestamp="123432343",oauth_nonce="abcdefgh",oauth_version="1.0",oauth_signature="xxxxxxx"'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)

但是,当我尝试 运行 作为一个独立的 python 脚本时,它 returns unauthorized error 通过邮递员它工作。请问这种行为的原因是什么?

错误:

{
  "title": "Unauthorized",
  "type": "about:blank",
  "status": 401,
  "detail": "Unauthorized"
}

期待建议!谢谢。

要在 Twitter API 上使用用户上下文,请使用 requests_oauthlib class。 您可以在下面的 python:

中找到一个简单的实现
consumer_key = "xxxxxxxx"
consumer_secret = "xxxxxxxxx"
access_token = "xxxxxxxxxxx"
access_token_secret = "xxxxxxxxxxxx"

from requests_oauthlib import OAuth1Session
params = {"ids": "123234343"}
oauth = OAuth1Session(
    consumer_key,
    client_secret=consumer_secret,
    resource_owner_key=access_token,
    resource_owner_secret=access_token_secret,
)
response = oauth.get(
    "https://api.twitter.com/2/tweets", params=params
)

此实施要求您拥有所有关键参数,如 consumer keyconsumer secretaccess_tokenaccess token secret。请访问你的 Twitter 开发页面以生成所有值(如果你不确定你可以按照他们的文档 https://developer.twitter.com/en/docs/authentication/oauth-1-0a/api-key-and-secret

谢谢,希望对大家有帮助!