Serenity 投稿に関連する Cashtag 議論を追跡する方法
Serenity 関連の cashtag を追うとき、最初から市場全体を検索しない方が安全です。広い検索では、同名銘柄、転載、リプライ、便乗アカウントが混ざりやすくなります。データ量は増えても、「Serenity 本人が何を投稿したか」が見えにくくなります。
最初に見るべき問いはもっと狭くできます。@aleabitoreddit が最近投稿した、cashtag を含むオリジナル投稿はどれか。源泉となる投稿を確認した後で、それぞれの cashtag を広い公開議論へ展開するか決めます。
この記事では、その最初のステップに TwexAPI の Advanced Twitter Search by Page を使います。
クエリ戦略
クエリ戦略 とは、検索範囲を Serenity 本人のアカウントに限定し、cashtag を含むオリジナル投稿だけを残すことです。得られるデータは少なくなりますが、各行の意味を説明しやすく、後続のアラートにも使いやすくなります。
固定クエリは次の通りです。
from:aleabitoreddit filter:cashtags -filter:retweets -filter:repliesこのクエリには 4 つの制約があります。
| 条件 | 目的 |
|---|---|
from:aleabitoreddit | Serenity アカウントの投稿だけを見る |
filter:cashtags | $TSLA や $NVDA のような cashtag を含む投稿だけを残す |
-filter:retweets | リポストを除外し、他人の意見を Serenity の発信として扱わない |
-filter:replies | リプライを除外し、オリジナル投稿のアーカイブに近づける |
sortBy は Latest を使います。監視では、新しい源泉投稿の方が過去に高エンゲージメントだった投稿より重要です。Top を使うと、過去に反応が大きかった投稿を見る用途に近くなり、新しく出た銘柄コードの検出には向きません。
API エンドポイント
API エンドポイント とは、この記事で使うリクエスト先です。この最初のステップでは cashtag 専用検索ではなく Advanced Search by Page を使います。既知の銘柄コードで全体検索するのではなく、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 を次のリクエストに渡します。
ページング例
ページング例 とは、1 ページ目、2 ページ目、それ以降をつなげる処理です。本番ジョブでは、すべてのページを取得し終えるまで待たず、ページごとに保存する方が安全です。
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 | cashtag だけで誤解しないための文脈 |
cashtags | Serenity が最近言及した銘柄コードの集計 |
view_count、retweet_count、quote_count、favorite_count | 優先して確認すべき投稿の判断 |
urls、media | ニュース、開示、スクリーンショットを引用しているか確認 |
簡単なアラート条件は、最新ページにまだデータベースにない tweet_id があり、cashtags が空でない場合に、本文と cashtag を Slack、Feishu、または社内ダッシュボードに送ることです。
広い議論へ展開する
広い議論へ展開する とは、Serenity の源泉投稿を確認した後で、その投稿から抽出した cashtag を広い検索に使うことです。順序が重要です。先に源泉投稿、次に市場全体の議論を見ることで、一般的な市場ノイズを Serenity 起点の議論と取り違えにくくなります。
流れは次の通りです。
- Advanced Search クエリで、Serenity の最新 cashtag 付きオリジナル投稿を取得する。
- 各源泉投稿から
$XYZのようなcashtagsを抽出する。 - その cashtag で公開議論を広く検索し、源泉投稿の前後で言及量、エンゲージメント、感情を比較する。
- 高エンゲージメント投稿を手動確認し、投資意見、冗談、反語を確定シグナルとして扱わない。
関連リソース
免責事項
免責事項 とは、この記事が公開 X データの取得と整理だけを説明するという意味です。Cashtag の活発さはソーシャルシグナルの一つであり、企業のファンダメンタルズや将来価格を証明するものではありません。投資助言でもありません。