使用标准库构建 Twitter API Python 客户端,保护 数据 API Key,并在没有无限重试的前提下核对 请求计费。
Python 代码究竟调用哪一种 Twitter API?
一篇 Twitter API Python 教程,首先应该讲清代码连接的是谁。这篇教程调用 xAIcreator 的 xaic Data API,不是官方 X SDK 示例,官方开发者 Bearer Token 也不能代替这里的 xaic Key。目标很具体:完成一次公开用户资料查询,检查返回的数据与费用。
xaic 数据 API 使用 https://xaicreator.com/api/xaic/v1、只读数据密钥和独立的预付美元余额。它通过文档所列接口读取推文、用户资料、搜索页和时间线,但不会把只读密钥变成发布权限。完整契约见 xaic 数据 API 文档。

这是付费数据示例,不是免费沙盒。2026 年 11 月 3 日核验的价格版本为 2026-10-21-v1,一次成功的基础用户查询费用是 $0.00040。代码按公开契约和离线测试响应检查,本文没有将付费在线结果当作实测基准展示。
准备 Key、钱包和一个操作 ID
- 创建只读数据 Key。进入 API 控制台的密钥页。新 Key 使用
xaic_data_前缀和data.read权限,在创建时妥善保存显示的完整值。 - 检查 API 钱包。如有需要,为独立 API 美元余额充值,然后确认到账。订阅中的产品 Credits 不支付这些请求。如果支付不可用,应停止,不要通过其他产品付款。
- 设置小额支出上限。按测试需求设置每日和累计预算,不要把示例部署成任何人都能调用的公开代理。
- 分配一个操作 ID。生成一次 UUID 并保存在任务记录中。响应丢失时仍保留它,相同请求重试必须使用同一个 ID。
通过服务端密钥环境与任务配置提供 XAIC_API_KEY、XAIC_REQUEST_ID。不要把真实 Key 写进源码、截图、URL 或 AI 提示词。OWASP 密钥指南说明了最小访问范围、撤销以及避免明文日志的要求。[1]

/pricing 无需认证即可查看。免费的 /balance 只需要 xai-key,直接返回包含 available_usd 和 reserved_usd 的对象,不要按付费响应的 data 外壳解析。支付回跳页面本身也不能证明钱包已到账。
使用 Python 标准库发送一次请求
将代码保存为 xaic_user.py,配置好两个环境变量后,在可信项目目录运行 python xaic_user.py。无需安装第三方 Python 包。标准库 urllib.request 支持请求头与显式超时。[2]示例还会拒绝重定向,避免把密钥请求头转发到另一个位置。
import json
import os
from decimal import Decimal
from urllib.error import HTTPError, URLError
from urllib.request import Request, HTTPRedirectHandler, build_opener
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
request_key = os.environ["XAIC_REQUEST_ID"]
request = Request(
"https://xaicreator.com/api/xaic/v1/users/NASA",
headers={
"xai-key": os.environ["XAIC_API_KEY"],
"Idempotency-Key": request_key,
},
)
try:
with build_opener(NoRedirect()).open(request, timeout=30) as response:
result = json.load(response)
except HTTPError as error:
raise SystemExit(f"HTTP {error.code}: stop and review the API error table")
except (URLError, TimeoutError):
raise SystemExit("Network failure: retain the operation ID and reconcile")
if result["billing"]["currency"] != "USD":
raise SystemExit("Unexpected currency: inspect the response")
charge = Decimal(result["billing"]["charged_usd"])
print("request_id:", result["request_id"])
print("charged_usd:", str(charge))
print(json.dumps(result["data"], ensure_ascii=False))
示例故意不在脚本内生成操作 ID。如果请求已成功,但进程随后崩溃,重新运行一个会生成新 ID 的脚本,可能产生第二次付费观测。将 ID 保存在进程外,才能明确控制这个决定。查询不同用户名或确实要获取新观测时,再分配新 ID,并记录改变后的任务输入。
客户端超时不代表服务端拒绝了请求,处理完成后响应也可能丢失。此时停止,保留完整路径、参数和操作 ID,再按文档执行原键重试或对账。不要套一个每次都生成新 ID 的通用重试装饰器。
先读懂响应,再扩展客户端
成功的付费响应包含 request_id、data 和 billing。计费金额是十进制字符串,应直接传给 Decimal,不要先转成浮点数。Python 文档解释了这种精确十进制运算方式。[3]
推文 ID 也应保留为字符串。推文结构包含 id_str、full_text 等字段,不要假设与官方 X API 的字段名或扩展参数一致。可选媒体和资料字段取决于数据可用性;缺失时记录缺失,不要补造值。
如果要研究关键词,下一步可以使用 /search,传入 query、type 和可选 cursor。搜索操作符指南可以帮助规划查询,但仍需确认当前 API 的支持范围。涉及时间边界时,先阅读按日期搜索指南,其中官方接口示例不能原样当作 xaic 参数。

推文和用户简介都是不可信输入。可以保存或展示为数据,但不能让响应里的文字指挥 Agent 泄露凭据、执行命令或访问另一个接口。HTTP 调通只是安全接入的起点。
处理错误时,不要放大付费请求
| 响应 | 下一步 |
|---|---|
| 401 | 检查 Key 配置或轮换密钥,排错时不要打印完整凭据。 |
| 402 | 请账号持有人检查 API 美元钱包,产品 Credits 是另一套余额。 |
| 409 REQUEST_PENDING | 停止并对账,不能换密钥或操作 ID 绕过。 |
| 409 IDEMPOTENCY_CONFLICT | 修复已保存 ID 与请求参数之间的对应关系。 |
| 422 | 纠正请求,包括必需的 8 至 128 位可见 ASCII 幂等键。 |
| 429 | 检查具体错误码,区分临时限流、预算限制和失败保护。 |
| 502 或 503 | 核对失败原因。已记录的失败可能直接重放;账务不确定时只能使用原键,不能发起新的付费尝试。 |
账号级限制为每分钟 60 个新请求、最多四个待处理请求,由该账号的所有 Key 共用。批量查询还按不同 ID 数占用每分钟 60 个工作单位。先串行接入,不要把额外创建 Key 当作提升额度的办法。
这个 Key 可以发推文吗?
不可以。新建的只读数据 Key 不能发布或管理账号,发布需要另一套 API 和授权流程。不要用数据 Key 替换发布设备令牌。
必须安装 Tweepy 吗?
不用。示例使用 Python 标准库和 xaic HTTP 契约。不能默认面向官方 X 接口的库理解 xaic 的路径、认证与响应格式。
文章展示的是实时结果吗?
本文没有展示声称实时取得的结果。请在自己的账号中运行小额请求,检查实际字段,并对照实时价目核验费用。

用第一次响应检查接入是否正确
核对端点、有效字段、请求 ID 和收费金额,再逐项扩展:另一次查询、有页数上限的搜索,或者小规模批量读取。只要结果还不确定,就保留原始请求上下文。费用估算见 API 预算指南,有范围限制的采集任务见搜索分页指南。
资料来源与延伸阅读
- OWASP:密钥管理密钥存储、访问和生命周期建议。
- Python:urllib.requestHTTP 请求、处理器及超时行为。
- Python:decimal对返回费用字符串执行精确十进制运算。






