如何追踪 Serenity 帖子相关的 Cashtag 讨论
追踪 Serenity 相关的 cashtag,第一步不要从全站搜索开始。全站讨论很容易混进同名股票、搬运号、转推和回复噪音,最后看起来数据很多,真正能解释“Serenity 自己说了什么”的内容反而不清楚。
更稳的做法是先回答一个窄问题:@aleabitoreddit 最近发布过哪些带 cashtag 的原创帖?确认源帖之后,再决定要不要把这些 cashtag 拿去做更广泛的全站讨论监控。
这篇文章用 TwexAPI 的 Advanced Twitter Search by Page 来实现这个第一步。
查询策略
查询策略 指先把搜索范围锁定到 Serenity 账号本人,再只保留含 cashtag 的原创帖。这样得到的数据少一些,但每条都更容易解释,也更适合做后续告警。
这篇文章使用固定查询:
from:aleabitoreddit filter:cashtags -filter:retweets -filter:replies这条查询里有四个关键限制:
| 条件 | 作用 |
|---|---|
from:aleabitoreddit | 只看 Serenity 账号发布的内容 |
filter:cashtags | 只保留带 $TSLA、$NVDA 这类 cashtag 的帖子 |
-filter:retweets | 去掉转推,避免把别人观点算成 Serenity 的原始表达 |
-filter:replies | 去掉回复,让结果更接近可归档的原创帖 |
sortBy 使用 Latest。监控场景下,新内容比历史热门内容更重要;如果用 Top,结果会更像“过去互动高的帖子”,不适合发现刚出现的股票代码。
API 端点
API 端点 指这篇文章使用的请求入口。这里不要用 cashtag 专用搜索端点,因为我们不是先给定股票代码去搜全站,而是先从 Serenity 的原创帖中发现他提到了哪些代码。
POST https://api.twexapi.io/twitter/advanced_search/page
Authorization: Bearer <your_token>
Content-Type: application/json首次请求不需要传 next_cursor:
curl --request POST \
--url https://api.twexapi.io/twitter/advanced_search/page \
--header 'Authorization: Bearer <your_token>' \
--header 'Content-Type: application/json' \
--data '{
"searchTerms": [
"from:aleabitoreddit filter:cashtags -filter:retweets -filter:replies"
],
"sortBy": "Latest"
}'接口每页最多返回 20 条推文。如果响应里的 has_next_page 是 true,把返回的 next_cursor 放进下一次请求继续翻页。
分页抓取示例
分页抓取示例 指把第一页、第二页和后续页面串起来。生产任务里不要等所有页都抓完再写入,最好每拿到一页就落库一次。
1import requests
2
3TOKEN = "<your_token>"
4ENDPOINT = "https://api.twexapi.io/twitter/advanced_search/page"
5QUERY = "from:aleabitoreddit filter:cashtags -filter:retweets -filter:replies"
6
7def fetch_serenity_cashtag_posts(max_pages=5):
8 tweets = []
9 next_cursor = None
10
11 for _ in range(max_pages):
12 payload = {
13 "searchTerms": [QUERY],
14 "sortBy": "Latest",
15 }
16
17 if next_cursor:
18 payload["next_cursor"] = next_cursor
19
20 response = requests.post(
21 ENDPOINT,
22 headers={"Authorization": f"Bearer {TOKEN}"},
23 json=payload,
24 timeout=30,
25 )
26 response.raise_for_status()
27 body = response.json()
28
29 page_items = body.get("data") or []
30 tweets.extend(page_items)
31
32 if not body.get("has_next_page"):
33 break
34
35 next_cursor = body.get("next_cursor")
36 if not next_cursor:
37 break
38
39 return tweets
40
41for tweet in fetch_serenity_cashtag_posts():
42 print(
43 tweet.get("tweet_id"),
44 tweet.get("created_at_datetime"),
45 tweet.get("cashtags", []),
46 (tweet.get("text") or tweet.get("full_text") or "")[:140],
47 )这个脚本会按 Latest 顺序翻页。实际跑定时任务时,建议用 tweet_id 做唯一键:同一条帖子被重复抓到时更新互动指标,不重复创建记录。
落库和告警建议
落库和告警建议 指把抓取结果变成可持续监控,而不是只在命令行看一次输出。最小可用版本可以只存帖子 ID、发布时间、正文、cashtag 和互动指标。
| 字段 | 用途 |
|---|---|
tweet_id | 去重和后续更新的主键 |
created_at_datetime | 判断是否为新帖,做时间线排序 |
text / full_text | 人工复核上下文,避免只看股票代码误判 |
cashtags | 统计 Serenity 最近集中提到哪些代码 |
view_count、retweet_count、quote_count、favorite_count | 判断哪条帖子需要优先复核 |
urls、media | 判断是否引用了新闻、公告或截图 |
一个简单的告警规则可以是:如果最新一页里出现数据库中没有的 tweet_id,并且 cashtags 非空,就把帖子正文和 cashtag 推到 Slack、飞书或内部看板。
扩大到全站讨论
扩大到全站讨论 指在确认 Serenity 的源帖之后,再把提取出来的 cashtag 用于更宽的搜索。顺序很重要:先找源帖,再看扩散,否则很容易把市场本身的讨论误当成 Serenity 带来的讨论。
可以按这个流程拆:
- 用本文的 Advanced Search 查询抓取 Serenity 最新含 cashtag 原创帖。
- 从每条源帖里提取
cashtags,例如$XYZ。 - 再用 cashtag 或关键词搜索全站讨论,比较源帖发布前后的提及量、互动和情绪变化。
- 人工复核高互动帖子,避免把投资建议、玩笑或反讽当成确定信号。
相关资源
免责声明
免责声明 指本文只说明如何抓取和整理公开 X 数据。Cashtag 活跃度是一种社交信号,不能证明公司基本面或未来价格走势,也不构成投资建议。