---
title: "調査レポート: X投稿からモーニング女学院放送データを取得する方法 (#918)"
---

## 概要

X（旧Twitter）アカウント [@morning1422](https://x.com/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`）を使用する。**

### 選定理由

1. 既存の TikTok 収集（`scripts/collect-tiktok-posts.ts`）と同一のパターンで実装可能
2. 既存の `RAPIDAPI_KEY` Secret を共有できる
3. 無料プランで検証から開始できる
4. X公式APIと比較してコストが大幅に低い

### 実装方針

```
collect-onair-data-morning.ts
  → RapidAPI でアカウントの最新ツイートを取得
  → ツイートテキストを正規表現でパース
  → RadioEpisode / RadioMember / RadioOnairSong に格納
  → GitHub Actions で毎週土曜深夜に実行
```

### 制約・リスク

- RapidAPI のサービス変更・廃止リスクあり（TikTok収集と同様）
- ツイートフォーマットが変更された場合にパース処理の修正が必要
- 楽曲情報がツイートに含まれていない場合は別途収集手段を検討

---

## 後続Issueの進め方

1. **まずRapidAPIで実際のツイートを取得し、楽曲投稿フォーマットを確認する**
   - `twitter-scraper2` の無料プランで `@morning1422` の投稿を取得
   - 楽曲告知ツイートの形式を把握する
2. **#920 データ設計書**: 取得可能なフィールドとスキーママッピングを文書化
3. **#921 実装**: スクリプト + GitHub Actions ワークフロー作成
