PowerShell でラジコタイムフリー録音、レベル1公開

久しぶりにラジコタイムフリーの話題。

約2年前に、ラジコプレミアム エリアフリーに RadikoPad のコマンドラインツールを対応させるために Visual Basic で RadikoPad_cmd.exe というコマンドを作りました。バイナリー配布ですが、ソースを公開し、私がメンテナンスできなくても誰かがメンテナンスするだろうという考え方。

VBでプログラムを書いていて感じたのが、PowerShell と記述方法がよく似ているということ。配布とメンテナンスのことを考えて、だれでも無料で使えるVisual Studio を選択しましたけど、Windows10に標準で付いてくる PowerShell でも同じことが出来るのでは?と思っていました。

それから、約2年、ペンディング状態になっていた PowerShell でラジコ録音スクリプト製作を再開しました。

2年も経過すると、覚えているつもりでもかなり忘れています。覚えていたのは大きな流れだけで、Webアクセスや文字列操作の細かいコマンドやオプションをすっかり忘れていることに気づきました。四苦八苦しました。幸い、VBでの製作プログラムは、本サイトに全部残っているので、なぜこんな書き方をした?とか、なんとか、思い出しながら、無料会員が居住地に応じた放送局の番組をタイムフリー録音する骨格となるスクリプトができました。

公開しますが、バージョン 0.1 くらいの代物です。

使い方:

まず、以下のテキストファイルをダウンロード。

RadikoPad_ps_free1.txt

これの中身が以下。下の囲いの中をコピー&ペーストしても同じです。

以下の赤字の部分を編集してください。

具体的には、放送局ID、録音開始日時、録音終了日時、ffmpeg.exe のPATH。
放送番組データは、録音したい番組を特定するのに必要ですから、(現時点では)毎回設定し直す必要があります。
RadikoPad 同様、録音作業は ffmpeg.exe が行い、ffmpeg は標準コマンドではないため、この行でffmpegが含まれているフォルダーを指定する必要があります。(ダブルクォーテーションの最初の文字がセミコロンであることを忘れないように。)または、C:\App というフォルダーを作って、そこに ffmpeg.exe をコピーしてください。

# radiko.jp タイムフリー番組をPowerShellスクリプトで録音するツール。
# とりあえず、VBで製作した RadikoPad_cmd のロジックをPowerShellに移植したバージョン。
# 無料会員用のみ。エリアフリーには未対応
# ver.0.1
#copyright 2025 lifewithunix.jp

#録音ラジオ番組
#ラジオ局IDをダブルクォーテーションの中に指定。
$station_id="TBS"
#録音開始時刻を、ダブルクォーテーション内に、YYYYMMDDhhmm 形式で指定する。秒情報は不要。
$rec_from="202502111500"
#録音終了時刻を、ダブルクォーテーション内に、YYYYMMDDhhmm 形式で指定する。秒情報は不要。
$rec_to="202502111510"
#$prog_name="${station_id}${rec_from}"
$prog_name="${station_id}番組タイトル${rec_from}"
# ffmpeg.exe が格納されているフォルダーを指定
$env:Path+=";C:\App"

######################
#以下は編集しない事
######################

# CURL.exe オプション定義
#$curl="C:\Windows\System32\curl.exe"
$cookie="-c cookie.txt"
$method="POST"
$url1="https://radiko.jp/v4/api/member/login"
# radiko.jp AUTH Key
$authkey="bcd151073c03b352e1ef2fd66c32209da9ca0afa"

$resp1_status=""
$radiko_session="null"
$areafree="0"

# Auth1

$auth1_resp = curl.exe -s -c cookie.txt `
-H "X-Radiko-App: pc_html5" `
-H "X-Radiko-App-Version: 0.0.1" `
-H "X-Radiko-User: dummy_user" `
-H "X-Radiko-Device: pc" `
-I -L https://radiko.jp/v2/api/auth1

#$auth1_resp

$authtoken=""
$keylength=""
$keyoffset=""

foreach ($auth1_var in $auth1_resp){
$auth_var_a = ($auth1_var.Split(" ")[0]).tolower().replace(":","")
$auth_var_b = $auth1_var.Split(" ")[1]
if ($auth_var_a -eq "x-radiko-authtoken"){
$authtoken = $auth_var_b}
if ($auth_var_a -eq "x-radiko-keylength"){
$keylength = $auth_var_b}
if ($auth_var_a -eq "x-radiko-keyoffset"){
$keyoffset = $auth_var_b}
}

$authkey_cut=($authkey.Substring($keyoffset,$keylength))
$part_key=[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($authkey_cut))

# Auth2

$auth2_resp = curl.exe -s -c cookie.txt `
-H "X-Radiko-AuthToken: $authtoken" `
-H "X-Radiko-PartialKey: $part_key" `
-H "X-Radiko-User: dummy_user" `
-H "X-Radiko-Device: pc" `
-L https://radiko.jp/v2/api/auth2

# ffmpeg download
# for none areafree users

if ($areafree -eq "1"){
}else{
# ffmpeg.exe コマンドの存在PATHを直接指定すること。
ffmpeg.exe `
-fflags +discardcorrupt `
-headers "X-Radiko-AuthToken: $authtoken" `
-i "https://radiko.jp/v2/api/ts/playlist.m3u8?station_id=${station_id}&l=15&ft=${rec_from}00&to=${rec_to}00" `
-acodec copy `
-vn `
-bsf:a aac_adtstoasc `
-y `
"${prog_name}.m4a"
}

# logout


# Debug
echo "resp1_status: ${resp1_status}"
echo "radiko_session: ${radiko_session}"
echo "areafree: ${areafree}"
echo "--"
echo "authkey: ${authtoken}"
echo "keyoffset: ${keyoffset}"
echo "keylength: ${keylength}"
echo "--"

$authkey
$authkey_cut
$part_key

PowerShell スクリプトを他人が使う場合の厄介なところは、ただの文字列なのに、素直にダウンロードできないってこと。悪意がある人が、他人のコンピューターをダウンしたり悪意ある動作に使ったりできますからね。
PowerShell が管理者の権限を持つと、そのPCでできることは基本的に何でもアクセスできちゃうから怖い。そういうわけで、.ps1 拡張子のファイルは素直にダウンロードしたり保存できないようになっています。.txt ファイルをダウンロードして、手作業で .ps1 へ拡張子を変更してください。「RadikoPad_ps_free1.ps1」という名称になりますが、拡張子が .ps1 であればファイル名は何でもいい。

録音したい放送局、録音開始時刻、終了時刻を指定したら、ファイルを選択、右クリック→ PowerShellで実行。

Powershellで録音開始

初回は、以下の様にPowerShellスクリプトを実行する設定にポリシー変更しても構わないかどうかの質問が現れます。録音開始するには Y または A を選択する必要があります。

そして録音が開始される。

録音に成功すると、以下の様に設定したファイル名でmp4ファイルが出来上がります。
現時点では保存フォルダー設定機能を設けていないのでスクリプトと同じフォルダーに出来上がります。保存フォルダー指定機能、要るかな~?なくてもいい気がする。

ファイル名は、スクリプト中の “${station_id}番組タイトル${rec_from}” を編集すると変更できます。

 

Windows10デフォルト状態で、.ps1 ファイルはダブルクリックでは編集モードになる四に設定されていますので、ダブルクリックで録音開始するには、.ps1 と powershell.exe を結び付ける必要があります。

そのためには、設定画面などから、”C:\Windows\System32\WindowsPowerShell\v1.0\powerhsell.exe” を関連付けします。

.ps1 をダブルクリックで実行するアプリを結び付ける。 .ps1 をダブルクリックで実行するアプリを結び付ける。

ここまでは、2年前にVBで作った RadikoPad_cmd 無料会員用を PowerShell に置き換えただけ。

今後:

Level2 で、ラジコプレミアム エリアフリーに対応させる予定です。
Level2 が出来上がったら、このページのスクリプトは非公開にするかもしれません。

Level3 で、日付指定ではなく、曜日指定で録音開始できるようにできないかと考えています。つまり、スクリプトをコピーして、特定の番組の放送局、開始時刻と終了時刻、番組名 を書いておけば、スクリプトをいつ実行しても1週間以内の指定番組を録音できるというわけ。

しかし、使いたい人、いるかな~?

コメントを残す