RSSからプレイリストを作って,それにより連続再生することができました(フェーズ5A完了)。
フェーズ5A 詳細マニュアル
RSS 1本から playlist.m3u を作る
0. 今回の目標
今回やることはこれだけです。
LISTENなどのRSSを1本用意する
↓
PythonでRSSを読む
↓
音声ファイルのURLを取り出す
↓
playlist.m3u を作る
↓
mpvで連続再生する
今回はまだ、以下はやりません。
複数RSS
棚選び
再生モード選び
LED
ロータリーエンコーダー
再生履歴
ここを欲張らないのが大事です。
まず「RSSから音声URLを取り出してmpvで鳴らす」だけ成功させます。
ステップ1:作業フォルダを作る
Raspberry Piでターミナルを開きます。
以下を入力します。
mkdir -p ~/tanaradio5
cd ~/tanaradio5
確認します。
pwd
次のように表示されればOKです。
/home/ユーザー名/tanaradio5
たとえばユーザー名が pi なら、
/home/pi/tanaradio5
です。
ステップ2:mpvが使えるか確認する
フェーズ4でmpvは使っているはずですが、念のため確認します。
mpv --version
mpvのバージョン情報が出ればOKです。
もし、
command not found
のように出たら、mpvを入れます。
sudo apt update
sudo apt install -y mpv
ステップ3:RSS URLを1本用意する
まずは、TanaRadioなど、公開RSSを1本使います。
作業フォルダ内に feed.txt を作ります。
nano feed.txt
開いたら、RSS URLを1行だけ貼り付けます。
例:
https://listen.style/p/xxxxx/rss
ここは、実際のTanaRadioのRSS URLに置き換えてください。
保存します。
Ctrl + O
Enter
Ctrl + X
確認します。
cat feed.txt
RSS URLが1行表示されればOKです。
ステップ4:Pythonスクリプトを作る
次に、RSSを読んで playlist.m3u を作るPythonファイルを作ります。
nano make_playlist_5a.py
次のコードをそのまま貼り付けます。
#!/usr/bin/env python3
import urllib.request
import xml.etree.ElementTree as ET
from pathlib import Path
FEED_FILE = "feed.txt"
PLAYLIST_FILE = "playlist.m3u"
def read_feed_url():
path = Path(FEED_FILE)
if not path.exists():
raise FileNotFoundError(f"{FEED_FILE} が見つかりません。")
url = path.read_text(encoding="utf-8").strip()
if not url:
raise ValueError(f"{FEED_FILE} にRSS URLが書かれていません。")
return url
def download_rss(url):
print(f"RSSを取得します: {url}")
request = urllib.request.Request(
url,
headers={
"User-Agent": "TanaRadio-Pi/5A"
}
)
with urllib.request.urlopen(request, timeout=20) as response:
return response.read()
def find_audio_url(item):
# RSSのenclosureタグから音声URLを探す
enclosure = item.find("enclosure")
if enclosure is not None:
audio_url = enclosure.attrib.get("url")
if audio_url:
return audio_url
# 念のため、media:content 形式にも軽く対応する
for child in item:
if child.tag.endswith("content"):
audio_url = child.attrib.get("url")
if audio_url:
return audio_url
return None
def get_text(item, tag_name):
element = item.find(tag_name)
if element is not None and element.text:
return element.text.strip()
return ""
def make_playlist(rss_data):
root = ET.fromstring(rss_data)
channel = root.find("channel")
if channel is None:
raise ValueError("RSSのchannelが見つかりません。")
items = channel.findall("item")
if not items:
raise ValueError("RSS内にitemが見つかりません。")
playlist_lines = ["#EXTM3U"]
count = 0
for item in items:
title = get_text(item, "title")
audio_url = find_audio_url(item)
if not audio_url:
continue
if title:
playlist_lines.append(f"# {title}")
playlist_lines.append(audio_url)
count += 1
if count == 0:
raise ValueError("音声URLを1件も見つけられませんでした。")
Path(PLAYLIST_FILE).write_text(
"\n".join(playlist_lines) + "\n",
encoding="utf-8"
)
print(f"{PLAYLIST_FILE} を作成しました。")
print(f"音声URL数: {count} 件")
def main():
try:
feed_url = read_feed_url()
rss_data = download_rss(feed_url)
make_playlist(rss_data)
print("完了しました。")
except Exception as e:
print("エラーが発生しました。")
print(e)
if __name__ == "__main__":
main()
保存します。
Ctrl + O
Enter
Ctrl + X
ステップ5:Pythonファイルを実行できるようにする
chmod +x make_playlist_5a.py
ステップ6:プレイリストを作る
実行します。
./make_playlist_5a.py
うまくいくと、たとえば次のように出ます。
RSSを取得します: https://listen.style/p/xxxxx/rss
playlist.m3u を作成しました。
音声URL数: 10 件
完了しました。
確認します。
ls
次の3つが見えればOKです。
feed.txt
make_playlist_5a.py
playlist.m3u
ステップ7:playlist.m3u の中身を確認する
head playlist.m3u
次のように、音声URLらしきものが出ていればOKです。
#EXTM3U
# エピソードタイトル
https://...
# エピソードタイトル
https://...
この段階で、RSSから音声URLを取り出すところは成功です。
ステップ8:mpvで再生する
いよいよ再生します。
mpv playlist.m3u
音が出れば成功です。
mpvの基本操作は次の通りです。
スペースキー:一時停止/再開
Enter:次へ
q:終了
もし音が出ない場合は、まず別の音声ファイルやYouTubeなどでRaspberry Piから音が出るか確認してください。
ここでの問題は、RSSではなく音声出力側の可能性があります。
ステップ9:成功条件
フェーズ5Aの成功条件は、次の3つです。
1. feed.txt にRSS URLを1本書けた
2. make_playlist_5a.py で playlist.m3u を作れた
3. mpv playlist.m3u で音声が再生できた
この3つができれば、フェーズ5Aは成功です。
よくあるエラー
1. feed.txt が見つかりません
原因:
作業フォルダが違う
feed.txt を作っていない
確認:
pwd
ls
~/tanaradio5 にいて、feed.txt があるか見ます。
2. 音声URLを1件も見つけられませんでした
原因としては、
RSS URLが間違っている
RSSが音声配信用ではない
RSSの形式が少し特殊
限定配信で取得できない
などが考えられます。
まずは公開RSSで試すのがよいです。
3. mpv playlist.m3u で音が出ない
原因は大きく3つです。
Raspberry Piの音声出力先が違う
USBスピーカーやBluetoothスピーカーが未接続
音量が小さい、またはミュート
確認:
mpv --volume=80 playlist.m3u
これで少し大きめの音量で再生できます。
今回はここで止めてよいです
5Aでは、ここまでで十分です。
RSSを読む
playlist.m3uを作る
mpvで鳴らす
これだけです。
次の5Bでは、このプレイリスト生成に、
過去3日分だけ
古い順
という条件を加えます。
でも今はまだ、そこへ行かなくて大丈夫です。
まずは「RSSがmpvで鳴る」。ここをきっちり成功させましょう。これはフェーズ5の土台です。
サマリー
本エピソードでは、TanaRadio Piのフェーズ5Aとして、RSSフィードからプレイリストを作成し、mpvで連続再生する手順が実行されました。まず作業フォルダの作成、mpvの動作確認、RSS URLの準備を行い、次にPythonスクリプトでRSSを読み込み、音声ファイルのURLからplaylist.m3uを生成しました。スクリプト実行時に初期エラーが発生しましたが、ChatGPTの助けを借りて解決し、最終的にmpvでの音声再生に成功。これにより、フェーズ5Aの目標が達成されました。
コメント
このエピソードのトピック
すべてのトピック →それぞれのトピックから、ほかの番組の会話も探せます。
似ているエピソード
タイトル・AI要約・文字起こしの話題をもとにおすすめしています。
-
372 日記 | 複数RSSで過去3日分を古い順に再生
TanaRadio
共通する話題: TanaRadio Pi · TanaRadio
TanaRadio Pi製作シリーズのフェーズ5Cでは、複数のRSSフィードから過去3日分のエピソードを古い順に再生するプレイリストを作成...
-
375 日記 | 棚を選択してプレイリストを作成
TanaRadio
共通する話題: TanaRadio Pi · TanaRadio
TanaRadio Pi製作シリーズのフェーズ5Eでは、ポッドキャストのグループである「棚」を作成し、コマンドで切り替える機能の実装を...
-
371 日記 | 過去3日分を古い順に再生
TanaRadio
共通する話題: TanaRadio Pi · TanaRadio · ChatGPT
TanaRadio Pi製作のフェーズ5Bでは、過去3日分のポッドキャストエピソードを古い順に再生する機能が実装されました。これにより...
-
374 日記 | 物理ボタンでプレイリスト再生を制御
TanaRadio
共通する話題: TanaRadio Pi · TanaRadio · Raspberry Pi
TanaRadio Pi製作シリーズのフェーズ5Dでは、既存の3つの物理ボタンでRSSプレイリストを操作することを目指しました。まず作業環...
-
368 日記 | TanaRadioの音声ファイル再生をボタンで制御
TanaRadio
共通する話題: TanaRadio · Raspberry Pi · ChatGPT
本エピソードでは、TanaRadioの音声再生システムをChromiumブラウザからmpvアプリケーションへ移行し、3つの物理ボタンで制御す...
-
はぢめも 71|LISTENのプレイリスト活用 ①
Camp@Us FM6214
ブラウザ録音⏺️ #声めも #はぢめも #note #きれはし #はじめの脳内はじめのめも。はぢっこめも。noteの切れ端にちょこっとめも。...
-
#40 増殖するPodcast++
CafeP #a4w_Radio (旧a4wラヂオ)
番組づくり・配信の工夫
-
#28 sox でファイルを結合
CafeP #a4w_Radio (旧a4wラヂオ)
ジングルと音声を sox で結合までしたファイルを anchor に投稿するようにしてみました。
-
#10 なぜMeetやZoomで録らないのか —— ポッドキャスト収録の技術
八百万のOSS
Logic Pro · Remotion · Windows · Android
-
EP#071 【sutand fm】スタエフの配信をPodcastに登録する方法
MARS⭐︎RADIO PODCAST
番組づくり・配信の工夫