調査レポート: X投稿からモーニング女学院放送データを取得する方法 (#918)
概要
X(旧Twitter)アカウント @morning1422 の投稿から、モーニング女学院の放送データ(放送日・出演者・オンエア楽曲)を収集するための方法を調査した。
調査結果
1. X API v2 の利用可否
| 項目 | 内容 |
|---|---|
| Free tier | 廃止(2026年2月以降、新規開発者向け) |
| Pay-per-use | 投稿読み取り $0.005/件、月間200万件上限 |
| Basic | $200/月(過去7日間の検索が可能) |
| Pro | $5,000/月(全過去データの検索が可能) |
結論: X公式APIはコスト面で非推奨。
過去放送回データの遡及取得には Pro プランが必要であり、月$5,000は過大投資となる。
2. RapidAPI 等サードパーティ経由の代替手段
RapidAPI に複数の X/Twitter スクレイパーが存在する。既存の TikTok 収集(tiktok-scraper7.p.rapidapi.com)と同一の実装パターンで利用可能。
| サービス | 特徴 |
|---|---|
twitter-scraper2 (microworlds) |
無料プランあり、最も汎用的 |
twitter-crawler (theleaks) |
別の選択肢 |
| Old Bird V2 | 月100万ツイートで$179.99、旧Twitter APIを模倣 |
推奨: twitter-scraper2 を RapidAPI 経由で利用する(無料プランで検証後に判断)。
TikTok収集スクリプト(scripts/collect-tiktok-posts.ts)との共通化が可能。
RAPIDAPI_KEY は既存のSecret(RAPIDAPI_KEY)を流用できる。
3. @morning1422 のツイートフォーマット
X APIが402 Payment Requiredを返すため、直接ツイート全文を確認できなかった。 検索スニペットから確認できたフォーマット:
- メンバー告知ツイート(放送前):
🔔今夜のメンバー告知🔔 #ラジオ日本「モーニング娘。'24のモーニング女学院」土曜深夜0時‼️ 12月21日(土)は #牧野真莉愛 さん #北川莉央 さん #山﨑愛生 さんの3人出席 (日直は牧野さん) #morning1422 #morningmusume24 #モーニング娘24 - エンディングツイート(放送後):
🔔ラジオ日本「モーニング娘。'26のモーニング女学院」今週の放送も、あっという間にエンディングのお時間です🔔☆ #morning1422 #morningmusume26 #うちでモー女 #モーニング娘26 #野中美希 #井上春華
楽曲情報を含む投稿パターン(「今週の1曲目:〇〇」など)は検索スニペットでは確認できなかった。 まず RapidAPI で実際のツイート一覧を取得し、楽曲投稿のフォーマットを確認することが必要。
4. 投稿テキストの解析方法
楽曲告知ツイートのフォーマット確認後に設計するが、以下のパターンが想定される:
- 正規表現:
今週の(\d+)曲目:(.+?)/(.+?)(?:\n|$)のような形式 - ハッシュタグからメンバー特定:
#メンバー名→memberIdに変換 - 日直: 「日直は〇〇さん」→
RadioMember.isDayDuty = trueにマッピング
フォーマットの一貫性が低い場合は LLM(Claude API)による構造化抽出も検討する。
5. 既存スキーマとの整合性
| スキーマ | 対応 | 備考 |
|---|---|---|
RadioEpisode |
✅ 対応可能 | showId に morning1422 を使用 |
RadioMember (isDayDuty) |
✅ 対応可能 | 日直情報を格納 |
RadioOnairSong |
✅ 対応可能 | songTitle, trackOrder で管理 |
現行スキーマの拡張は不要と判断。楽曲のアーティスト名はモーニング娘。楽曲であれば trackId での紐付けが可能。
推奨収集手法
RapidAPI の Twitter スクレイパー(twitter-scraper2)を使用する。
選定理由
- 既存の TikTok 収集(
scripts/collect-tiktok-posts.ts)と同一のパターンで実装可能 - 既存の
RAPIDAPI_KEYSecret を共有できる - 無料プランで検証から開始できる
- X公式APIと比較してコストが大幅に低い
実装方針
collect-onair-data-morning.ts
→ RapidAPI でアカウントの最新ツイートを取得
→ ツイートテキストを正規表現でパース
→ RadioEpisode / RadioMember / RadioOnairSong に格納
→ GitHub Actions で毎週土曜深夜に実行
制約・リスク
- RapidAPI のサービス変更・廃止リスクあり(TikTok収集と同様)
- ツイートフォーマットが変更された場合にパース処理の修正が必要
- 楽曲情報がツイートに含まれていない場合は別途収集手段を検討
後続Issueの進め方
- まずRapidAPIで実際のツイートを取得し、楽曲投稿フォーマットを確認する
twitter-scraper2の無料プランで@morning1422の投稿を取得- 楽曲告知ツイートの形式を把握する
- #920 データ設計書: 取得可能なフィールドとスキーママッピングを文書化
- #921 実装: スクリプト + GitHub Actions ワークフロー作成