给 AI

操作指南

怎么每天记录多个国家的 X(推特)趋势

只用一个接口,每个国家调一次:X 趋势,传 ISO 国家代码。下面的示例把 10 个国家各读一次,共 10 次调用,花费 $0.09;失败的调用不扣费,传了不支持的国家代码也一样。

更新于

要做的事:按国家、按天记下 X 上都在热什么。X 只展示当下的趋势榜,不保留历史,想要历史只能自己存。每天早上跑一个小任务,读 10 个国家的榜单写进数据库,历史就攒起来了。一个月后就能回答这些问题:哪些话题同时在好几个国家上榜,一个话题在某国榜单上待了几天,某个周二日本在热什么。

最后得到一张 SQLite 表:每个国家、每个名次、每一天一行,带趋势名、X 显示的帖子量(有的话)和一个搜索链接。整个过程不需要 X 开发者账号。

分步操作

第一步:读一个国家的榜单

调用X 趋势,country 填两位 ISO 国家代码:US、GB、JP、IN、BR 等。不传 country 就是全球榜。这里用的不是 WOEID(X 官方 API 用的雅虎地点 ID),而是你本来就熟悉的国家代码。

不是每个国家都有榜单。传了不支持的代码会返回 invalid_params,不扣费,返回的 problems 里会列出可用的代码。怎么用 API 获取某个国家的推特趋势里也列了这份清单,大约覆盖二十几个大市场,不提供城市级榜单。

一次调用返回整张榜单,约 30 条趋势,每次 $0.009。没有第二页,page.has_more 为 false。每条趋势有:

  • rank:榜单名次,1 是第一。
  • name:X 显示的趋势名,可能是话题标签,也可能是一个短语。
  • heat:X 在旁边显示的帖子量;没显示时为 null。
  • url:这个趋势在 X 上的搜索链接。
curl -G "https://api.okdata.online/v1/x/trends/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d country=JP

第二步:每天跑的任务,顺便存起来

下面的脚本把每个国家读一次,追加写进 x_trends.db。每个请求都带一个由国家和日期拼成的 Idempotency-Key。同一天里 cron 触发了两次,或者任务崩了你又重跑一遍,24 小时内的第二次请求会直接拿回存好的榜单,meta.replayed 为 true,不扣费。同一天的数据永远不会付两次钱。

import datetime
import os
import sqlite3
import requests

API = "https://api.okdata.online/v1/x/trends/list"
KEY = os.environ["OKDATA_API_KEY"]
COUNTRIES = ["US", "GB", "JP", "IN", "BR", "DE", "FR", "ID", "MX", "TR"]

db = sqlite3.connect("x_trends.db")
db.execute("""CREATE TABLE IF NOT EXISTS trends (
    day TEXT, country TEXT, rank INTEGER, name TEXT, heat INTEGER, url TEXT, fetched_at TEXT,
    PRIMARY KEY (day, country, rank))""")

day = datetime.date.today().isoformat()
for country in COUNTRIES:
    headers = {"Authorization": f"Bearer {KEY}", "Idempotency-Key": f"x-trends-{country}-{day}"}
    try:
        body = requests.get(API, headers=headers, params={"country": country}, timeout=60).json()
    except requests.RequestException as err:
        print(country, "network error:", err)  # 稍后重跑;同一个 key 不会重复扣费
        continue
    if body["code"] != "ok":
        print(country, body["code"], body["message"])  # 失败的调用不扣费
        continue
    rows = [(day, country, t["rank"], t["name"], t["heat"], t["url"], body["meta"]["fetched_at"])
            for t in body["data"]["items"]]
    db.executemany("INSERT OR REPLACE INTO trends VALUES (?, ?, ?, ?, ?, ?, ?)", rows)
    db.commit()
    print(country, len(rows), "trends")

用 cron 定时跑,比如 0 7 * * * 就是每天早上 7 点。10 个国家每天一次,跑 30 天是 300 次调用,$2.70。想抓变化更快的话题,可以每隔几小时跑一次,同时把 key 和 day 这一列改成带小时的格式。

第三步:拿存档回答问题

攒了几天数据之后,用普通 SQL 就能回答有用的问题。比如同一天在 3 个及以上国家上榜的话题:

SELECT day, name, COUNT(DISTINCT country) AS countries, MIN(rank) AS best_rank
FROM trends
GROUP BY day, name
HAVING countries >= 3
ORDER BY day DESC, countries DESC;

某个话题在某国榜单上待了几天:SELECT country, name, COUNT(*) FROM trends GROUP BY country, name ORDER BY 3 DESC。

注意事项

  • 榜单只是一个瞬间。 趋势几个小时就会换一批。像脚本里那样把 meta.fetched_at 一起存下,才知道每一行对应的是哪个时刻。
  • 同一件事,各国叫法不同。 同一个新闻在日本和巴西会用不同的词上榜。跨国比较时,先把趋势名翻译或归一化再分组。
  • heat 经常是 null。 X 只给部分趋势显示帖子量。能稳定横向比较的字段是名次。
  • 只有公开榜单。 个性化的“为你推荐”趋势拿不到。
  • 想知道趋势在说什么。 把趋势名传给X 帖子搜索,sort=top,读一页($0.002)通常就能看出是哪些帖子带起来的。
  • 官方渠道。 X 官方 API 按 WOEID 提供趋势,除了国家,还覆盖城市和地区;它的价格页写明按量计费下每次趋势请求 1 美分。需要城市级榜单,或者本来就有 X 开发者账号,就用官方的。

只查一个国家的问题,见怎么用 API 获取某个国家的推特趋势。趋势加搜索的完整做法在热搜与趋势里。

示例花费

给 10 个国家的 X 趋势榜各拍一次当天快照:US、GB、JP、IN、BR、DE、FR、ID、MX、TR

接口调用次数单价小计
X 趋势10$0.009$0.09
合计10$0.09

按本页生成时的价格计算。失败的调用不扣费。

在你的 AI 里用(MCP)

先接好 MCP 服务,然后直接说你要什么。智能体会自己找到这些接口、看清价格,再用你的余额调用。

可以这样说取 US、GB、JP、IN、BR、DE、FR、ID、MX 和 TR 当前的 X 趋势,整理成一张表:国家、排名、趋势名、X 显示的帖子量(有的话)。再告诉我哪些趋势同时出现在多个国家。

智能体第一次调用 call 工具时发送的内容
{
  "endpoint": "x.trends.list",
  "params": {},
  "idempotency_key": "<新的 UUID>"
}

配置 MCP 服务 →

资料来源

  1. X API pay-per-usage pricing and creditsdocs.x.com · 读取于
  2. X API: Trends by WOEIDdocs.x.com · 读取于

接上一次,以后直接问 AI。

新 key 自带 $0.10 试用额度。贴一句话,就能接进你的智能体。

免费开始
一句话接进你的 AI

把这句话发给你的智能体

读一下 https://okdata.online/zh/agents.md,帮我把 okdata 配好;我的 key 在环境变量 OKDATA_API_KEY 里。

Claude Code、Cursor、Codex 等能打开网址的智能体,读完会自己配好。

MCP 地址https://api.okdata.online/mcp