feed-triage · git:20260909.346d99b · 2026-09-09 · sha256 13d1d8af7d74d272
feed-triage git:20260909.346d99bA
Immutable. This exact content is served forever at /api/v1/blob/13d1d8af7d74d272.
---
name: feed-triage
description: podcastfreaks.com で「サイトの状態」issue が立ったとき、または /errors にエラーや警告が出たときに、原因を調べて直す。フィードが取得できない、音声を持たない、ドメインが第三者に取得された、といった番組の扱いを決める。「フィードのエラー」「番組が取得できない」「site-health の issue」「rss-inactive へ移す」時に使用。
---
# フィードの不具合を調べて直す
毎日のビルドで問題が見つかると `site-health` ラベルの issue が立つ。この手順で1件ずつ片付ける。
## 前提
| 場所 | 中身 |
|---|---|
| `data/rss.json` | 登録中の番組(フィードURL・Twitter・ハッシュタグ) |
| `data/rss-inactive.json` | 登録解除した番組。**理由を必ず添える** |
| `data/added-at.json` | 登録日。GitHub Actions が git 履歴から生成する。手で編集しない |
| `https://podcastfreaks.com/errors/` | 直近のビルドのエラーと警告 |
| `static/downloads/rss/<key>.rss` | 取得済みのフィード(`yarn prebuild` 後) |
## 1. 症状を確かめる
issue の本文に番組のキーが並んでいる。まず実際のフィードを見る。
```sh
curl -sL "$(node -e "console.log(require('./data/rss.json')['<key>'].feed)")" | head -c 2000
```
見るところは3つ。
- `<title>` が登録している番組と一致するか
- `<item>`(または `<entry>`)があるか
- `<enclosure url="...">` があるか
## 2. 症状ごとの対処
### フィードが取得できない(`wget` / `getaddrinfo ENOTFOUND` / 404)
ドメインが失効しているか、配信元を移行した可能性が高い。
1. 番組の公式サイトや X を見て、移行先のフィードを探す
2. Apple Podcasts に登録があれば、そこから正しいフィードを辿れることがある
```sh
curl -s "https://itunes.apple.com/search?media=podcast&country=JP&limit=10&term=<番組名>" \
| node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>JSON.parse(d).results.forEach(r=>console.log(r.collectionName,'|',r.feedUrl)))"
```
3. 移行先が見つかれば `data/rss.json` のフィードURLを差し替える
4. 見つからなければ登録解除(下記)
### 音声を持たない(`podcastCheck` の警告)
2通りある。**どちらかを見極めてから直す**。
- **記事用のフィードを登録している** — エピソードのタイトルが番組の内容と合っている場合。上と同じ方法で正しいフィード(多くは `/feed/podcast` や FeedBurner)を探して差し替える
- **ドメインが第三者に取得された** — `<title>` が全く別のサイトになっている場合。すぐ登録解除する。`kumocast` はアダルトサイトのフィードに変わっていた( 4712f66 )
### `No episodes found`
フィードは取得できるがエピソードが無い。一時的な場合もあるので、**まず数日様子を見る**。続くようなら上と同じ手順で移行先を探す。
## 3. 直し方
### フィードURLを差し替える
`data/rss.json` の該当キーの `feed` を書き換えて、重複していないか確かめる。
```sh
yarn validate
```
### 登録解除する
`data/rss.json` から消すだけでなく、**理由を添えて** `data/rss-inactive.json` へ移す(README の方針)。
```json
"<key>": {
"feed": "...",
"twitter": "...",
"hashtag": "...",
"reason": "domain revocation"
}
```
`reason` は既存の値に揃える。`feed not found` / `domain revocation` / `end of broadcast` / `website is closed` / `domain moved`。
そのあと登録日を同期する。
```sh
yarn added-at
```
## 4. 確認する
```sh
yarn validate # 重複がないか
yarn prebuild # 実際に取得できるか(数分かかる。ネットワークが要る)
```
`yarn prebuild` を最後まで通せない環境では、`data/` の変更だけコミットして、次の日次ビルドの結果を `/errors` で確認する。
## 5. コミットする
コミットメッセージは日本語で、**何が起きていたか**を書く。番組を外す判断をした場合は、その根拠(フィードの中身がどう変わっていたか)を残す。
## 注意
- `static/downloads/` は生成物。gitignore 対象なのでコミットしない
- `data/added-at.json` と `data/apple-podcasts.json` は Actions が管理する。手で書くのは `apple-podcasts.json` の `"source": "manual"` の項目だけ
- 番組を外すと Frequency や登録日のデータからも消える。次の Actions 実行で自動的に揃う