4

我试图点击 Twitter API 从 POSTMAN 检索数据,但我遇到了一个错误。

我在 Twitter 中创建了一个项目,然后创建了一个与 twitter 项目相关联的应用程序。检索到密钥、秘密和承载令牌。我用 Bearer 令牌点击了下面的端点并得到了错误

端点:https ://api.twitter.com/2/tweets?ids=1261326399320715264,1278347468690915330

错误:在对 Twitter API v2 端点的请求进行身份验证时,您必须使用来自附加到项目的 Twitter 开发人员应用程序的密钥和令牌。您可以通过开发人员门户创建项目。

然后我使用带有消费者密钥、消费者秘密、访问令牌和访问秘密的 OAuth 1.0 对同一端点进行加热,并得到以下错误

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

我不明白我在那里缺少什么。有人可以帮忙吗?

由 Espoir Murhabazi 编辑:我已尝试使用 Beared 令牌进行身份验证,如本示例所示,但徒劳无功

我尝试使用 tweepy 使用的身份验证方案,但也是徒劳的。我看起来好像我们缺少一些东西。

这是我尝试过的完整示例:

import requests
import os
import sys
from tweepy import OAuthHandler
from dotenv import load_dotenv


load_dotenv()


def get_twitter_auth():
    """Setup Twitter authentication.

    Return: tweepy.OAuthHandler object
    """
    try:
        consumer_key = os.getenv('TWITTER_CONSUMER_KEY')
        consumer_secret = os.getenv('TWITTER_CONSUMER_SECRET')
        access_token = os.getenv('TWITTER_ACCESS_TOKEN')
        access_secret = os.getenv('TWITTER_ACCESS_SECRET')
        assert all([consumer_key, access_secret, access_token, consumer_secret])
    except KeyError:
        sys.stderr.write("TWITTER_*  not found\n")
        sys.exit(1)
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    return auth.apply_auth()


protected_url = "https://ads-api.twitter.com/9/insights/keywords/search?granularity=HOUR&keywords=developers&start_time=2021-07-02T10:00:00Z"
oauth = get_twitter_auth()
response = requests.get(url=protected_url, auth=oauth)

print(response.content, 10 * "**=|")

谢谢

4

4 回答 4

1

去 :

https://developer.twitter.com/en/portal/projects/new

创建一个新的应用程序,并复制将生成的不记名令牌

在此处输入图像描述

在邮递员中使用:

在此处输入图像描述

输出:

在此处输入图像描述

于 2021-07-10T23:14:03.673 回答
1

首先确保您使用的是 GET 请求而不是其他请求类型来处理这个特定的请求(如他们的文档中所示,这里有一个 Postman 示例。我只是尝试使用 POST 并且遇到了同样的错误,但在 GET 请求上工​​作正常。这是我在复制和粘贴问题中的 URL 时得到的结果,没有任何编辑;并使用带有 Bearer Token 的 GET 请求作为我的身份验证:

{
    "data": [
        {
            "id": "1261326399320715264",
            "text": "Tune in to the @MongoDB @Twitch stream featuring our very own @suhemparack to learn about Twitter Developer Labs - starting now! https://twitter.com/MongoDB/status/1261091720801980419"
        },
        {
            "id": "1278347468690915330",
            "text": "Good news and bad news: \n\n2020 is half over"
        }
    ]
}

上面代码段中的 url 已被编辑并替换为完整的 URL,因为 StackOverflow 不接受缩短的 URL。

要更改请求类型,请执行以下操作:

  1. 打开邮递员
  2. 单击 URL 输入文本框(您在其中编写 URL https://api.twitter.com/2/tweets?ids=1261326399320715264,1278347468690915330 )左侧的选择输入(也称为组合框)。应该不难看。
  3. 在选项上选择 GET。如果这不起作用,那么是时候重置您的密钥了。

要重置您的密钥(根据 Twitter 称为重新生成),请执行以下操作(如果以上解决了您的问题,您可以跳过整个过程):

  1. 在您的 Twitter 开发者帐户中访问您的项目。
  2. 在项目的主视图中,您应该会看到带有两个图标的应用程序;齿轮和钥匙图标。查找您要编辑的应用程序,单击它旁边的钥匙图标
  3. 在下一页上,您可以重新生成您可能无法访问的任何密钥。如果您选择重新生成不记名令牌,请单击与 Bearer Token文本同一行的重新生成。
  4. 您现在可以将 Bearer Token 复制到剪贴板,我建议将其复制到安全的地方,这样您就不必继续重置。
  5. 复制 Bearer Token 后,打开 postman
  6. 使用 GET 请求复制选项卡
  7. 在 URL 文本框下应该有一个标签Authorisation。点击它。
  8. 在该选项卡下应该有一个带有标签的选择输入(组合框)type,单击它并选择Bearer Token
  9. 在右侧将出现一个输入,token其左侧有标签。转到该输入并粘贴您的 URL,使用与您在问题中使用的完全相同的 URL,因为它按原样工作。
  10. 最后一步,按Enter或转到SendURL 文本框右侧的按钮。如果一切都正确完成,你应该有你的结果。
于 2021-07-11T17:09:28.800 回答
1

在邮递员的“授权”选项卡中添加您的bearer token(从 Twitter 开发人员帐户收到)[见附图],然后请求。我能够得到您提到的端点的响应。 在此处输入图像描述

于 2021-06-26T10:46:21.037 回答
0

不记名令牌是用于 OAuth 2.0 的主要访问令牌类型。Bearer Token 是一个不透明的字符串,对使用它的客户端没有任何意义。尝试使用 access_token 和 access_token_secret,而不是使用不记名令牌。有关更多信息,请参阅

于 2021-06-21T14:36:21.283 回答