当前位置: 首页 > 知识库问答 >
问题:

Twitter V2 API POST/2/tweets 403禁止

谷良弼
2023-03-14

我正在尝试制作一个发布推文的机器人
由于我的开发人员帐户只是必需的,所以我只能使用V2 API。首先,这是我发布推文时使用的github示例:https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/main/Manage-Tweets/create_tweet.py

consumer_key = "somekey"
consumer_secret = "somesecret"

payload = {"text": "Hello world!"}

request_token_url = "https://api.twitter.com/oauth/request_token"
oauth = OAuth1Session(consumer_key, client_secret=consumer_secret)

try:
    fetch_response = oauth.fetch_request_token(request_token_url)
except ValueError:
    print(
    "There may have been an issue with the consumer_key or consumer_secret you entered."
    )
    
    
resource_owner_key = fetch_response.get("oauth_token")
resource_owner_secret = fetch_response.get("oauth_token_secret")
print("Got OAuth token: %s" % resource_owner_key)
print("Got OAuth token secret: %s" % resource_owner_secret)


# Get authorization
base_authorization_url = "https://api.twitter.com/oauth/authorize"
authorization_url = oauth.authorization_url(base_authorization_url)
print("Please go here and authorize: %s" % authorization_url)
verifier = input("Paste the PIN here: ")

# Get the access token
access_token_url = "https://api.twitter.com/oauth/access_token"
oauth = OAuth1Session(
    consumer_key,
    client_secret=consumer_secret,
    resource_owner_key=resource_owner_key,
    resource_owner_secret=resource_owner_secret,
    verifier=verifier,
)
oauth_tokens = oauth.fetch_access_token(access_token_url)

access_token = oauth_tokens["oauth_token"]
access_token_secret = oauth_tokens["oauth_token_secret"]
print("Got OAuth token: %s" % access_token)
print("Got OAuth token: %s" % access_token_secret)


# Make the request
oauth = OAuth1Session(
    consumer_key,
    client_secret=consumer_secret,
    resource_owner_key=access_token,
    resource_owner_secret=access_token_secret,
)

# Making the request
response = oauth.post(
    "https://api.twitter.com/2/tweets",
    json=payload,
)   

if response.status_code != 201:
    raise Exception(
        "Request returned an error: {} {}".format(response.status_code, response.text)
    )

print("Response code: {}".format(response.status_code))

# Saving the response as JSON
json_response = response.json()
print(json.dumps(json_response, indent=4, sort_keys=True))

用户流程如下。似乎必须使用OAuth,因此,您必须获得一个6位数字并在终端中输入它才能获得访问令牌:

Got OAuth token: #######
Got OAuth token secret: #######
Please go here and authorize: https://api.twitter.com/oauth/authorize?oauth_token=####
Paste the PIN here: ######
Got OAuth token: ########################################
Got OAuth token: ###############################

直到最后一步:用JSON发布推文。在这里,我得到了以下错误:

Request returned an error: 403 {"title":"Forbidden","detail":"Forbidden","type":"about:blank","status":403}

我能做什么?我只想使用Twitter V2 API发布一条推文,仅此而已。大多数教程使用旧的V1或V1。1 api,这是没有帮助的。

编辑:它似乎与身份验证是只读的有关:Twitter新API Essential access

共有1个答案

百里俭
2023-03-14

遇到了同样的问题,我需要添加oauth_callbackx_auth_access_typerequest_token请求

https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/main/Manage-Tweets/create_tweet.py#L16

request_token_url = "https://api.twitter.com/oauth/request_token?oauth_callback=oob&x_auth_access_type=write"

资料来源:https://developer.twitter.com/en/docs/authentication/api-reference/request_token

(归功于zmoon-https://github.com/twitterdev/Twitter-API-v2-sample-code/issues/73)

 类似资料:
  • 嘿,我已经花了一天左右的时间绞尽脑汁尝试和失败的ATS,我知道它被认为是不好的,但我目前只是在内部工作的应用程序。我在网上尝试了很多建议都没有用,最新的尝试如下info.plist。我不知道该怎么办? 调试控制台eror打印 Error=可选(Error Domain=nsurlErrorDomain Code=-1022“无法加载资源,因为应用程序传输安全策略要求使用安全连接.”UserInfo

  • 我有spring boot 2 REST应用程序,启用了Spring执行器。默认情况下,spring会在endpoint中生成大量指标(jvm、cpu、内存等)。除此之外,我还使用测微计API创建自定义指标。到目前为止,它一直运行得很好。 现在,我需要只生成自定义指标,但禁用spring提供的所有默认指标。请注意,我不想禁用endpoint,但我只想禁用默认指标。 现在直接/间接地可能吗? 谢谢你

  • 问题内容: Struts 2会为其标签自动生成HTML表。如何禁用它?任何帮助将不胜感激。谢谢。 问题答案: Struts2具有主题生成功能,基于该功能可以生成基于表的HTMl代码,其标签的默认值是x_html,这是您的情况。您可以通过在页面级别将主题设置为简单来避免这种情况,或者每个标签都具有theme属性,这些属性将生成基于div的html内容 或者您可以将整个页面的主题设置为静态值以下 属性

  • 我收到了明显臭名昭著的apache 2禁止错误#403,我尝试遵循有关该主题的指南,但似乎都不起作用。我使用的是Ubuntu Server和Apache 2.4.41 我的网站结构类似于/var/www/html/index.html 我的apache2.conf[/etc/apache2/apache2.conf]: 我的vhosts.conf[/etc/apache2/站点可用/000-def

  • 我需要了解全局禁用EF Core 2中级联删除的方法。感谢您的帮助。 在EF 6. x中,我们使用以下代码来禁用和实现上的级联删除:

  • 我不想让泽西做任何依赖注射。我认为有从Jersey到Guice的桥梁,但是基于我不能在这里显示的程序需求,我需要自己创建REST控制器实例,并向Guice请求它们。 我的问题:我怎样才能禁用泽西岛的依赖注入? 我当前正在使用注释。也许我可以改用注释,以为Jersey不会在寻找这些注释。但我还是宁愿把泽西岛的依赖注射关了。我怎么能那样做?