ラジコ:タイムフリー録音ツール RadikoClipper

先日から、RadikoPad_cmd.exe を PowerShell化したツール、RadikoPad_PS を作り、非プレミアムユーザーが使える RadikoPad_ps_free1 を公開し、その後も開発を続けてきました。
ラジコプレミアムに対応させた時点で Level2 として公開しようと思っていましたが、RadikoPad_cmd.exe のようにコマンド + 引数 で録音するより、ダブルクリックで録音する(Level3)機能実装後に公開する方がよさそうだと考え直しました。

そして、エラー処理に手抜きはあるものの(今のところ、どんなエラーが起きるか再現できていないので)version 0.7 くらいの品質のものが出来上がったので、公開することとしました。

プログラム名は、「RadikoClipper」に。

いつものように、説明は後回しにして、ダウンロードファイルから。
そうそう、プログラム名を、RadikoPad_ps から、 RadikoClipper へ変更しました。以下解説にあるような動きなので、数ある番組から希望のものだけダブルクリックで切り抜く感じをイメージして Clipper という名称を付けるのが適当かなということで。(Web検索してみたけど、重複するものがなかったので決めました。)

プログラムのダウンロード

RadikoClipper (マウス右クリックで保存してください。)

Level1 同様、PowerShell スクリプトを直接ダウンロードして実行するには制限が掛かるので、一度テキストファイルとしてダウンロードしたあとで、PowerShell 拡張子へと手作業で編集する必要があります。意外とスクリプト全体が長くなってしまっているので、このページにスクリプトの中身を表示するのは見送ります。ファイルを保存して中身を確認してください。

RadikoClipper ファイル一つで録音可能な番組は、一つだけです。複数番組を録音したい場合は、RadikoCliper.txt をマスターとして、番組数分コピーしてください。

使用前に、RadikoClipper.txt の拡張子を手作業で、RadikoCliper.ps1 へ変更してください。

ffmpeg.exe: RadikoPad, RadikoPad_cmd 同様、外部プログラム ffmpeg.exe が必要です。(RadikoPadをお使いの方は、RadikoPad用の ffmpeg を共用可能です。)

開発環境

「Windows10 PowerShell ISE」

その他のWindows PowerShell環境では動作確認していませんが、\Windows\system32 下に curl.exe が存在していてPowershellが使えるなら、どこでも動くのではないかと思います。PowerShell は Windows10以降、デフォルトでOSに入っているため、Visual Basic のような実行環境インストール作業は不要です。これもPowerShell環境を選んだ理由の一つ。
Powershellを動かせる環境には、Windows以外、LinuxとMacOSがあると聞いていますが、Linux・Mac PowerShell環境を試したことはなくPowerShellから見ると外部コマンドである curl.exe と ffmpeg.exe のオプション書式が同じであれば、動きそうな気がします。しかし、PATHの区切り指定文字がスラッシュ/ とバックスラッシュ \ の違いがあるので、試してみないとわからない状態です。

PowerShellスクリプト実行許可

この作業は初期設定の後に行ってもOK。すでに 前の RadikoPad_ps を実行した人は、不要の確率大。
以前は、拡張子 .ps1 ファイルをダブルクリックで実行できたと記憶していますが、どこのビルドからか、ダブルクリックでは編集環境のメモ帳が開くようになっています。.ps1ファイルを実行するには、デフォルトでは 1) マウス右クリックで「Powershell で実行」を選ぶか、2)手作業で .ps1 と PowerShell.exe を結び付ける必要があります。これらの方法は、RadikoPad_ps_free1 の使い方ページに書いてありますのでご覧ください。

Powershell で実行する

.ps1 と powershell を関連付けする

RadikoPad_PS 同様、.ps1 ファイルを(そのユーザーアカウントで)初回実行しようとすると、以下のメッセージが出てくることがあるので、YまたはAをクリックして許可を与えます。

PowerShellスクリプト初回実行時許可画面この実行許可作業は、初期設定後でも構いません。むしろその方がいいかも。

RadikoClipper はダウンロード、保存した時点で、TBSラジオの日曜天国 を録音する設定になっています。(関東の人のみすぐに試せる)関東地区の人は、アイコン右クリック、PowerShellで実行 をすれば、すぐに試せるはず。

初期設定

番組を録音するには、放送局、録音年月日、録音時間を設定する必要があります。(当然ですね。)これは、GUIアプリでも、スクリプトでも変わりありません。プレミアム会員の場合は、加えて、認証情報
その他、FFMPEG.exe コマンドの場所保存する場所、番組名を設定する必要があります。場所と番組名を録音後に手動で行う場合は、デフォルトでOK。設定箇所を注意深く確認する必要はありますが、設定が必要なのはGUIもスクリプトも同じ。

メモ帳(NotePad)やテキストエディタ、PowerShell ISEなどで、RadikoCliper.ps1 を開きます。

  1. 有料会員の場合、ラジコプレミアムログイン情報の設定
    ####################################################################
    #ラジコ会員情報
    #メールアドレスは、必ず'"(シングルクォート、ダブルクォート) と "'(ダブルクォート、シングルクォート)で囲むこと。
    #$email='"mail=radiko_test@radiko.jp"'
    #ラジコプレミアムログインパスワードは、必ず'"(シングルクォート、ダブルクォート) と "'(ダブルクォート、シングルクォート)で囲むこと。
    #$pass='"pass=password"'

    赤文字の部分のコメントを外し、自分のラジコアカウント情報に置き換えます。(囲い文字は消さないで、メールアドレスとパスワードだけ書き換えること。以下、赤文字部分)
    $email='”mail=radiko_test@radiko.jp“‘
    $pass='”pass=password“‘

  2. 無料会員の場合で、もしメールアドレス登録していれば、とりあえず同様に入力してください。入力しても何も起きませんけど、エリアフリー事前登録と同じです。
  3. 録音したい番組情報編集
    スクリプトの33行目にある、以下の部分を目的の番組に合わせて編集します。
    ####################################################################
    #録音ラジオ番組
    #録音番組がある曜日を「日、月、火、水、木、金、土」の中から一つだけ曜日を記述
    $rec_day=”日”
    #ラジオ局IDをダブルクォーテーションの中に指定。
    $station_id=”TBS”
    #録音開始時刻を設定
    $prog_start_time=”10:00″
    #録音終了時刻を設定
    $prog_end_time=”11:55″上記の例は、毎週日曜日、TBSラジオ、朝10時~11時55分 を録音するという意味になります。(24時間制)
    直近の、指定曜日の日付時間を録音します。
    もし、RadikoClipper を起動した曜日と同じ曜日の場合は、最も近い過去の番組を録音します。例えば、午前2時にプログラムを起動し、午前10時の番組を録音しようとすると7日前の番組を録音します。午前0時の番組の場合は微妙で、番組終了から十分時間が経過していれば録音可能ですが、まだ放送中の場合、サーバー上にデータがないので恐らくエラーになります。起動時刻にはご注意を。
  4. 録音ファイル名を決める
    何もしない場合は、<放送局ID><録音開始時刻>.m4a というファイル名が出来上がります。録音時点で番組名を入れたい場合は、47行、48行 あたりを編集してください。
    $title=”_安住紳一郎の日曜天国_
    という感じ。
    「TBS_安住紳一郎の日曜天国_<日付>1000.m4a」というファイルが出来上がります。
  5. 録音ファイルフォルダー
    未設定の場合、自分のユーザーフォルダーの最上位、または、RadikoClipper があるフォルダーに録音ファイルが出来上がります。(スタート状況により異なります。)
    都合が悪い場合は、30,31 行目の $rec_dir に保存場所を指定してください。
    #$rec_dir=”C:\Users\radiko\radiko_rec_folder
    $rec_dir=””  (←初期値は空になっている)
    もし、Apple iTunes を使っているなら、
    $rec_dir=”C:\Users\<User Name>\Music\iTunes\iTunes Music\iTunesに自動的に追加”
    とすれば、録音終了後、自動的に iTunes のMusic として登録されます。
    便利ではありますが、録音番組情報がファイル名以外何もないので、情報空っぽの曲になります。ファイル属性をMusic から Podcast に変更すると、番組を podcast として同期できます。使いやすいかどうかは別問題。
  6. ffmpeg.exe のパス
    ffmpeg.exe コマンドがあるフォルダー名を56行目に指定してください。
    $env:Path+=”;C:\App”
    デフォルトでは、C:\App フォルダーに保存されていると仮定していますので、1) C:\App を作ってそこにffmpeg.exe をコピーする または、2) RadikoPad 用に使っているフォルダーを指定してください。
    $env:Path+=”;C:\Users\radio\radikopad“ (radiko というユーザーの個人フォルダー下 radikopad 直下に ffmpeg.exe がある場合の例)
    コロンやカンマは必要な文字ですので消さないように。(SYSTEM変数PATH にffmpeg のPATHを追加します)
  7. RadikoCliper.ps1 ファイル名の編集
    上にも書いた通り、一つの RadikoClipper が録音できる番組は一つだけです。複数番組を録音したい場合、区別のためにファイル名を番組名やその短縮形に変更しておくことをお勧めします。
    例えば、RadikoClipper.ps1 → TBS日曜天国.ps1 や Nichi10.ps1
    他にもタイムフリー録音したい番組がある場合は、このスクリプトファイルをコピーし、
    曜日、放送局ID、録音開始時刻、終了時刻 とファイル名を書き換えます。
  8. 拡張子と実行プログラムの結び付け
    ダブルクリックで編集ではなく、実行するためには拡張子と実行プログラムを指定する必要があります。
    RadikoPad_ps のページをご覧ください。

以上で初期設定終了。

録音開始

大げさに書きましたけど、名前変更した .ps1 ファイルをダブルクリックするだけ。
設定が間違っていなければ、PowerShellウィンドウが表示され、ダウンロードが始まるはずです。
一瞬でウィンドウが消えてしまったら、何か間違っています。

うまく動かない時

そういう場合、ファイル名をマウス右クリックして、「編集」で開いてください。PowerShell開発環境の編集画面が現れます。219行目あたりにある、exit 文を消すか、コメントにしてください。これでデバッグ情報を表示するようになります。

# exit

その後で、ISE画面の右向き三角ボタンを押すと、開発環境中で RadikoClipper が実行されます。Powershell debug execute

そして、画面下にデバッグ情報が表示されますので、情報を確認してください。

RadikoClipper の自動起動

RadikoClipper は曜日指定で動作するため、日付指定する必要がありませんし、一週間以内なら起動する日を選ばず同じ番組を録音できます。
例えばショートカットを作って、スタートアップフォルダーに入れておけば、PCを毎日起動してログインする人なら、勝手に必要番組を録音してくれるようにできるかも。と、考えました。
ただし、PC起動直後は、複数プログラムが同時走ってPCが高負荷になるので、16行目に

#Start-Sleep -Seconds 180 #3分後に実行開始

という起動後スリープ時間を設定できるようにしています。コメントを外せば、ログインから約3分後に録音開始されるのではないかと思います。(まだ実験できていません。)

感想とこのあとの予定

元々、Visual Basic の書式とPowerShellの書式が似ているため、ラジコタイムフリー録音を PowerShellでもできるんじゃない?と始めた移植です。
今現在、ラジコタイムフリー録音 を RadikoPad や RadikoPad_cmd、その他のフリーツールで行っていて不自由を感じていない人は、このツールを使う必要性は全くありません。私は、RadikoPadのコマンドモードをWindows10 のタスクスケジューラで実行していて、ほとんど不都合を感じることはありません。
しかし、まれに RadikoPadの録音が失敗して固まっていることに遭遇するので、この時は、RadikoPadではやり直しが面倒だと感じます。3時間以上分割番組のタイムフリー再録音って面倒なんですよ。
番組表を見なくても番組情報が頭に入っている時は、RadikoClipper.ps1 を使うのもありかと考えています。日付でなく、曜日指定で直近番組を録音できるということは、自動処理に失敗した後処理に割といいかも と個人的には考えています。

ということで、このあと、盲腸のようにスクリプトに入っているデバッグ情報表示用行や、いいコマンドが見つからずに、冗長記述になっているコマンドをきれいに書き直す。それから、HTTPレスポンスがエラーになった場合でも、今時点は(エラー分岐していないので)次のコマンドに流れてしまうのを、もう一度処理し直すか、すぐにプログラム中断してしまうように書き加えようか、面倒なので放置しようか、バイナリーと違って、PowerShell は開発環境で実行すればデバッグ情報が全部取れるので、、、てなことを考えているところです。

スクリプトだから、ソース公開と同じで、不都合があればユーザー側ですぐに書き換えられるし。

もうちょっときれいにしようかとは思っていますが、数あるラジコタイムフリー録音ツールの中で、今さら RadikoClipper を押す理由も無いし。

まだちゃんとした状態じゃないので、不具合が見つかってコメント行で知らせていただければ、反映できるものは反映させます。

RadikoClipper のログイン文を多少書き直せば、タイムフリー30のログインレスポンスが取れると思うので、それがわかるとタイムフリー30も(別ツールで)対応させられるかもしれません。と思ったものの、RadikoClipper はあくまでも(曜日指定なので)一週間以内の番組しか扱えない(7日しか遡れない)論理になっているから、やるならRadikoPad_cmd のような日時指定でやるしかなくなってしまいます。タイムフリー30側のサーバーレスポンス仕様もよくわからないし。それでも、どんなレスポンスが返ってくるのか見てみたいものではあります。個人的には計画的に生活すればタイムフリー30は不要だし、何しろ料金が高い!と感じています。

いちラジオユーザーとしてできるのはここら辺あたりまでかな。

こういうものですが、RadikoClipper.ps1 を使ってみたい方は、上記手順で使ってみてください。

コメントを残す