You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twitter API v2免费版GET /2/users/me端点认证问题及代码改造咨询

Twitter API v2 /users/me端点认证问题解决方法

问题描述

我尝试用以下代码调用Twitter API v2免费版的/users/me端点:

import requests
import os

# 从环境变量获取Bearer Token
bearer_token = os.environ.get("BEARER_TOKEN")
headers = {
    'Authorization': f'Bearer {bearer_token}',
}
url = 'https://api.twitter.com/2/users/me'
response = requests.get(url, headers=headers)
# 打印JSON响应
print(response.json())

但收到403错误:

{'title': 'Unsupported Authentication', 'detail': 'Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint.  Supported authentication types are [OAuth 1.0a User Context, OAuth 2.0 User Context].', 'type': 'https://api.twitter.com/2/problems/unsupported-authentication', 'status': 403}

我原本以为这个端点不需要用户上下文认证,但看起来确实需要。我已经写了Tweepy的OAuth1.0a认证代码,但不知道怎么和API调用结合:

consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
consumer_secret = os.environ["TWITTER_CONSUMER_KEY_SECRET"]
access_token = os.environ["TWITTER_ACCESS_TOKEN"]
access_token_secret = os.environ["TWITTER_ACCESS_TOKEN_SECRET"]

# 使用密钥认证
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# 创建API实例
api = tweepy.API(auth)

问题原因

/users/me端点必须使用用户上下文认证(OAuth 1.0a User Context 或 OAuth 2.0 User Context),而你使用的OAuth 2.0应用级认证(Bearer Token)仅适用于无需用户权限的公共数据访问,无法获取当前用户的个人信息,因此被接口拒绝。

解决方案

方案1:用Tweepy直接调用API v2端点

Tweepy原生支持Twitter API v2,你可以基于已有的OAuth1.0a认证创建v2客户端,直接调用/users/me:

import tweepy
import os

# 从环境变量读取密钥
consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
consumer_secret = os.environ["TWITTER_CONSUMER_KEY_SECRET"]
access_token = os.environ["TWITTER_ACCESS_TOKEN"]
access_token_secret = os.environ["TWITTER_ACCESS_TOKEN_SECRET"]

# OAuth1.0a用户上下文认证
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# 创建API v2客户端
client = tweepy.Client(
    consumer_key=consumer_key,
    consumer_secret=consumer_secret,
    access_token=access_token,
    access_token_secret=access_token_secret
)

# 调用/users/me端点,指定需要返回的用户字段
response = client.get_me(user_fields=['id', 'name', 'username', 'created_at'])
print(response.data)

方案2:用requests结合OAuth1.0a签名

如果不想依赖Tweepy,可以用requests-oauthlib库生成符合要求的认证请求头:

  1. 先安装依赖包:
pip install requests-oauthlib
  1. 修改代码实现:
import requests
from requests_oauthlib import OAuth1
import os

# 读取环境变量中的密钥信息
consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
consumer_secret = os.environ["TWITTER_CONSUMER_KEY_SECRET"]
access_token = os.environ["TWITTER_ACCESS_TOKEN"]
access_token_secret = os.environ["TWITTER_ACCESS_TOKEN_SECRET"]

# 创建OAuth1认证对象
auth = OAuth1(consumer_key, consumer_secret, access_token, access_token_secret)

# 发起API请求
url = 'https://api.twitter.com/2/users/me'
response = requests.get(url, auth=auth)
print(response.json())

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:25:54