ラジコ:エリアフリー対応RadikoPadコマンドラインツール

現在当サイトで公開中の RadikoPad 1.1.0beta3 が 2022/9末の radiko.jp の仕様変更で、ラジコプレミアムにログインできなくなってしまいました。(と、報告を受けています。無料エリアの場合は、影響ありません。)
Webブラウザーを使うことで回避できますが、RadikoPad をコマンドラインモードで使用する場合、元々エリアフリーには対応できていませんでした。

現在、RadikoPad開発者の珍宝堂さんが、RadikoPadの継続開発を行えない状況ですので、やむなく私がWindows版 Radikoタイムフリーアプリの作成に手を出してみることにしました。ソースコードもらってないし、何の言語を使って開発しているかも知らないし、ソースがあったとしても、RadikoPadはDelphiという環境で開発されているそうなので、結局、一から作ることになります。

元々Visual Studio を使わなくちゃいけない用事があったことと、radiko.jp の認証プロトコルに興味があって調べようと思っていたことによるもので、Visual Studio を試用してみるついでにRadiko関係のプログラムに手を出して、あわよくばRadikoPadコマンドモード未対応のラコジプレミアムを使えるようにしてみようというのが本音。

継続してRadikoアプリの開発を行うつもりはなくて、出来ることなら私はラジコ関係では一人のリスナーでありたい。珍宝堂さん、早く復帰して~。

背景は後回しにすることにし、まずは、使い方説明。

ダウンロードURL:

Windows10 32bit/64bit 共通:

http://www.lifewithunix.jp/download/RadikoPad_cmd_20230510.zip (27161648 bytes)

 

64bit Windows10 .Net3.1 用:

http://www.lifewithunix.jp/download/RadikoPad_cmd.zip  (505,729 bytes)
.Net 3.1インストーラー同梱。

32bit /64bit Windows 共用 .NET6版:

http://www.lifewithunix.jp/download/RadikoPad_cmd_x86_x64_net6.zip (70604 bytes)

.NET6 と ffmpeg が含まれておらず、プログラムのみなので、約70kB
https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=6.0.0&arch=x86&rid=win10-x86
から、.net をダウンロードしてインストールする必要があります。ffmpegもお忘れなく。

ソースコードは、共通です。.Net6版は (Windows7以上を対象とした) x86 CPU用にビルドし直しましたので、32bit Windows10でも動きます。64bit Windowsの場合は、32bitモードで動作します。Win10以外は動作未確認。

インストール:

ダウンロードしたものを解凍してください。

RadikoPad_cmd.exe と config.ini を同じフォルダーにおいてください。
使えなくなった RadikoPad_cmd.exe をご使用の場合、RadikoPad_cmd.exe を差し替えてください。

旧バージョンをビルドした時のソースを小修正して不具合を取り除き、x64/x86 共通にした影響で、動作が少し変わってしまいました。

config.ini の中に、必ず ffmpeg_path をフルパスで指定してください。

RadikoPad_cmd.exe を単一ファイルにした関係で、インストールしたパスはあくまでも仮のフォルダー。実際にはプログラムが一度、自分の \AppData\Local\Temp\.net の下にコピーされて実行されるため、ffmpeg のパス情報がダイナミック情報になってしまいました。(バグフィックスのため、現時点では同一フォルダーに置いても、ffmpeg へパスが通らず、ffmpeg が動きません。)

<例>
# サンプル config.ini
# すべて半角文字で記述のこと。
# ' や " で文字を囲まない。
# 各行の文字間にスペースは入れないこと。空白行はOK。
mailaddr=
password=
# ffmpeg.exe を必ずフルパスで指定すること。RadikoPad_cmd と同じフォルダーに入れても指定が必要です。
ffmpeg_path=C:\ffmpeg\ffmpeg.exe

新規フォルダーにインストールする場合は、

  1. ダウンロードしたファイルを解凍して適当な場所に置く
  2. config.ini に ffmpeg.exe をフルパスで指定する。
  3. エリアフリーを使う場合は、mailaddr, password を記入して保存。

あとは、従来通りです。

RadikoPad_cmd.exe がプログラム本体ですが、コマンドラインアプリであることと、ランタイムライブラリーが通常はインストールされていないため、RadikoPad_cmd.exe を使おうととするも、エラーが発生すると思います。

RadikoPad_cmd.zip の中身

 

Visual Studio インストール済みの人は、解凍だけで使用できるはず。

何も準備しないでコマンドラインから実行すると、以下のようにエラーとなります。

a fatal error occurred. The required library hotfixr.dll could not be found.

A fatal error occurred. The required library hostfxr.dll could not be found. If this is a self-contained application, that library should exist in [C:\Users\thonda\Downloads\RadikoPad_cmd\]. If this is a framework-dependent application, install the runtime in the global location [C:\Program Files\dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location or register the runtime location in [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\InstallLocation]. The .NET Core runtime can be found at: – https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=win10-x64

Fatal Error が出る人は、まずは、setup.exe を実行して、動作に必要なライブラリをインストールする必要があります。このライブラリは、一部ネットワークからインストールされます。

インストールされたものは、「C:\Program Files\dotnet」に入ります。

なぜか、設定→アプリケーションでチェックすると、「RadikoPad_cmd」が表示されます。消しちゃって構いません。

RadikoPad_cmd.exe 自体はダウンロード→解凍したフォルダーにあり、必要に応じてどこにでも移動してください。

このライブラリの関係で、恐らく、64bit Windows10 しか動かない気がします。32bit Win10や、Win11 は未確認。

RadikoPad_cmd.exe のコマンド書式:

基本的に、RadikoPadの書式をまねていますが、残念ながら、このRadikoPad_cmd は RadikoPad のように便利じゃありません。

RadikoPad_cmd.exe <ラジオ局ID> <録音開始時刻 yyyyMMdd+HH:mm> <録音終了時刻 yyyyMMdd+HH:mm>

RadikoPad と異なり、終了時刻を入力する必要があります。(.exe は付けなくても動くはず。)
ラジオ局指定と日時指定フォーマットは同じにしておきました。

サンプル:

.\RadikoPad_cmd.exe TBS 20221111+13:00 20221111+13:15

この例は、2022/11/11 13:00 ~ 同日 13:15 のTBS局を録音します。

RadikoPad_cmdの使い方:

使い方は、

  1. RadikoPad_cmd.exe が存在する位置でコマンドプロンプトやPowerShellターミナルを開く、または、その場所にCDする。
  2. config.ini に ffmpeg.exe のパスを絶対パスで指定する。
  3. この時点で、ラジコプレミアムにログインせずに使えるようになります。つまりアクセスポイントの場所から無料で受信できるエリアのみのタイムフリーを録音できます。
  4. エリアフリーとして使いたい場合、同フォルダーにある config.ini を編集してください。同様に、ffmpeg.exe の場所を変更したい人も、config.ini を編集してください。
  5. # サンプル config.ini
    # すべて半角文字で記述のこと。
    # ' や " で文字を囲まない。
    # 各行の文字間にスペースは入れないこと。空白行はOK。
    mailaddr=myname@example.co.jp
    password=mypassword
    # ffmpeg.exe を同一フォルダーに置く場合は、ffmpeg_path をコメント行にすること
    ffmpeg_path=C:\ffmpeg\ffmpeg.exe
  6. メールアドレスとパスワードが config.ini に設定されていれば、radiko.jp へログインを試みます。ログインに成功すれば、自分の聴取エリア外の番組を録音することが出来ます。
  7. 録音ファイルは、<局ID><録音開始日時> の形式で、RadikoPad_cmd.exe と同じ場所に保存されます。この録音場所やファイル名は変更できません。ファイルは m4a 形式で保存されます。その他の音声フォーマットは扱えません。
  8. コマンドを発行した画面に大量に、デバッグ情報が出ます。非表示にしようかとも考えましたが、利用者が動いていることを確認するためにも利用できるので、デバッグ情報垂れ流しで放置しています。中には、ラジコプレミアムログイン情報も平文で記録されますので、情報の扱いには注意してください。意味が分かる人が見ればアカウントを乗っ取られます。

開発環境:

windows10 / Visual Studio 2022(.net3.1)  / Visual Basic

動作環境:

多分、Windows10 のみ。対応する.Net をインストールできれば、Win7でも動くかも。

RadikoPad_cmd開発の背景:

上にもチラッと書きましたけど、Visual Studio を使ってみる必要があったことと、ラジコの認証について調べてみたところ、とっても親切な解説ページに巡り合えたことで、「私でもできるんじゃねぇ?」って感じたことが大きい。そして、Web検索で、Radiko関係ツールを、Visual Basicで開発した例がないので、それならばって感じで Visual Basic を選択しました。Visual C++ や C# の方が開発しやすいかとも思いましたが、いざとなった時に、「ソースコードを公開して放置すれば、誰かメンテナンスするんじゃねぇ?」という考えもあります。

まず、参考にさせていただいたページを紹介。

  1. https://blog.bluedeer.net/archives/216
    このサイトに、Radiko.jp の認証の仕方が全て書いてあり、ここに掛かれていることをVBに落としてゆけばラジコタイムフリーの録音ができます。
  2. https://github.com/uru2/radishhttps://github.com/uru2/rec_radiko_ts
    uruさん開発の、Windows WSL2 や Unix系OSのShellで動かせるラジコタイムフリー録音スクリプト。このサイトにある rec_radiko_ts を使えば、そもそも RadikoPad_cmd自体開発不要。コマンドオプションも豊富で、Windows10オプション機能のWSL2を有効にするだけで使えるし、スクリプトが完ぺきだったため、2022年9月末のラジコ仕様変更の影響を受けていません。RadikoPad_cmdを使うくらいなら、こっちを使うべき。
  3. https://ststarfield.blog.fc2.com/blog-entry-150.html
    録音スクリプト開発には役に立ちませんが、Radiko関係のスクリプトを書く場合に必要な情報が紹介されています。

RadikoPad開発者の珍宝堂さんから、今後も長期間RadikoPadを更新できそうにない状況であると連絡を受けました。私に限定すれば、2022年9月末のRadiko仕様変更も、Radiko聴取環境には全く影響なくて、全然困ってないのですが、RadikoPadページへのアクセス状況をモニターしている限り、RadikoPadのアップデートを心待ちにしている人が多そうです。面倒なGUI開発、ファイル名指定などのユーティリティー機能は後回しにして、エリアフリー録音のためにRadikoPadの他、Webブラウザーが必要になる点だけは解消しておこうと開発を始めました。

上記 1 URLにある情報をたよりに、そのままVBコードに書いて行って、一つずつ確認して行けば、最終的に ffmpeg でラジオ録音が出来るようになりました。その、動作確認コードをきれいに成型することなく、そのまま上から下に流れるプログラムとして利用したのがこの RadikoPad_cmd です。ソースコードは絶対他人に見せたくない!

プログラム中でエラー処理をほとんどしていないので、正しくコマンドを発行できれば録音できるけど、ちょっとでも間違っていると、エラーも出さずに終わってしまうという、普通に考えれば最悪のプロラム。

でもまあ、ラジコプレミアムログインできるWindowsコマンドラインツールが存在しないよりも、不自由でも存在していて選択肢がある方がよいだろうという判断で、公開することにしました。コマンドラインユーザーなら、きっとスクリプトから利用しているはずだし、録音さえできればあとは自分で何とかするでしょうってこと。

2022年10月半ばに初めてVisual Basicのコードを書き始め、プログラミングの方は少し明るさが見えてきたところですが、Visual Studio 環境の使い方が、まだ全然わかんない!さらに、作ったプログラムバイナリーの配布方法もよくわからない状態で、RadikoPad_cmd.zip を公開しているので、これが正しい方法なのか?と頭に疑問符????がいっぱいの状況です。

RadikoPad_cmd のサポート:

ありません。上記の背景で開発、公開しているものなので、RadikoPadのようなサポートはありません。
コメントを書き込んでいただくのは構いませんが、各コメントに一つずつ対応する気はありません。こういう状況のものなので、安心して使えないものが嫌な人は使わないでください。というか、uru さんの rec_radiko_ts を使ってよ。

今のRadikoPad_cmdは ver.0.1.0 と設定しており、まずは、力ずくで動かしているプログラムをちゃんとサブルーチン化してまともに動くようにする必要があります。個人権限でradiko.jp 限定の通信ですので、OSに悪影響を与えたり、これが元で侵入されるようなことは無いはずと思っています。ただ、全部、RadikoPad_cmd.exe と同じ階層に録音されるというのも問題かと受け止めてます。

このあと、GUIを付けて、現RadikoPad風にする方向に行くか、コマンドモードで番組表情報から録音時間を取ってくるような高機能化を図るかは、未定です。

私がスキルアップした段階で、情報なり更新したプログラムなり 公開してゆきたいと考えています。
投げ出すことにする場合は、ソースを公開する予定です。(ソース公開済み)

Comments

  1. Radikopad+修正パッチですが、今朝はエリアフリーログインしないとDLできませんね。
    この10日間はなんだったんでしょう。

  2. RadikoPad_cmd ありがたくつかわせていただいています。
    正月早々の障害(?)レポートで恐縮ですが、”403 Forbidden (access denied)”で弾かれてダウンロード不能の事象が発生しています。情報共有のためレポートいたします。

    手元にあるダウンロードファイルから見て2025/1/1までは機能していたようですが、2025/1/5に、過去数日分をまとめてダウンロードしようとしたところ、ダウンロード不能となっていました。
    その他切り分けとして、
    (1)ブラウザ(Edge)でエラーになったのと同じ番組は視聴できています。
    (2)ラジコプレミアムの有無ですが、下記ログはプレアム不要のエリア内番組ですが、エリア外の番組についても同様の結果です。
    (3)RadikoPad.exeでのダウンロードは問題ない。

    【環境】
    OS:Windows 10 Prodessional 22H2
    Radiko_cmd:0.1.0.0
    ffmpeg::N-114254-g030f4925b8-20240318

    【ログ】
    ※RadikoPad_cmd.exeをバッチスクリプト内から呼び出す際に標準出力/標準エラー出力をテキストファイルに出力させたものをトラブルシューティングのために取得しているものです。ラジコ・プレミアムのID・パスワードなどは”削除”で伏せてあります。

    Command:D:\Profiles\Administrator\RADIO\tools\RadikoPad_cmd\RadikoPad_cmd.exe FMJ 20240104+00:00 20240104+00:30
    RadikoPad_cmd 2023/05/10 build
    1=FMJ
    2=20240104+00:00
    3=20240104+00:30
    FMJ
    20240104000000
    20240104003000
    Comment Line
    Comment Line
    Comment Line
    Comment Line
    ”削除”
    ”削除”
    Comment Line
    D:\Profiles\Administrator\Radio\tools\RadikoPad_cmd\ffmpeg.exe
    curl.exe -c cookie.txt –request POST –data-urlencode “mail=”削除” –data-urlencode “pass=”削除”” “https://radiko.jp/v4/api/member/login”
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
    100 248 0 206 100 42 755 154 –:–:– –:–:– –:–:– 1198
    {“unpaid”:”0″,”radiko_session”:”df778a0cc38cfaf3fa4c8867d05bdcd8a1b4abec”,”areafree”:”1″,”twitter_name”:null,”privileges”:[“1″],”member_ukey”:”LdcV_nB”,”status”:”200″,”paid_member”:”1″,”facebook_name”:null}
    df778a0cc38cfaf3fa4c8867d05bdcd8a1b4abec
    areafree:1
    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

    HTTP/1.1 200 OK
    Server: nginx
    Date: Sun, 05 Jan 2025 12:04:45 GMT
    Content-Type: text/plain
    Content-Length: 25
    Connection: keep-alive
    vary: Origin
    x-radiko-apptype: pc
    x-radiko-apptype2: pc
    x-radiko-authtoken: cxMRYo2FYy132Keupww2vw
    x-radiko-authwait: 0
    x-radiko-delay: 15
    x-radiko-keylength: 16
    x-radiko-keyoffset: 20
    x-request-id: JrciKGhIsWrcWjvUXqxCKYzZsVBJcBjl
    x-cloud-trace-context: 118db908abcab4a270718f2e676461f1
    via: 1.1 google
    Alt-Svc: h3=”:443″; ma=2592000,h3-29=”:443″; ma=2592000
    x-frame-options: SAMEORIGIN

    cxMRYo2FYy132Keupww2vw
    16
    20
    MmZkNjZjMzIyMDlkYTljYQ==
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
    100 34 100 34 0 0 101 0 –:–:– –:–:– –:–:– 124
    curl.exe -c cookie.txt -H “X-Radiko-AuthToken: cxMRYo2FYy132Keupww2vw” -H “X-Radiko-PartialKey: MmZkNjZjMzIyMDlkYTljYQ==” -H “X-Radiko-User: dummy_user” -H “X-Radiko-Device: pc” -L https://radiko.jp/v2/api/auth2?radiko_session=df778a0cc38cfaf3fa4c8867d05bdcd8a1b4abec
    JP14,逾槫・亥キ晉恁,kanagawa Japan

    D:\Profiles\Administrator\Radio\tools\RadikoPad_cmd\ffmpeg.exe -loglevel error -fflags +discardcorrupt -headers “X-Radiko-AuthToken: cxMRYo2FYy132Keupww2vw” -i “https://radiko.jp/v2/api/ts/playlist.m3u8?station_id=FMJ&l=15&ft=20240104000000&to=20240104003000” -acodec copy -vn -bsf:a aac_adtstoasc -y FMJ202401040000.m4a
    [in#0 @ 000001f5e5575dc0] Error opening input: Server returned 403 Forbidden (access denied)

    1. RadikoPad_cmd ということなので、これは私の担当になります。
      403 なので、ラジコ用アカウント認証系のエラーっぽいですね。
      出力を見る限り、最終行以外は、正常に動作しているような感じです。
      サーバー側の負荷上昇かな?RadikoPad.exe は正常ということなので、仮に負荷が原因としても RadikoPad_cmd の問題でしょうね。
      (すぐにはテストできないので、)一時的なものか、サーバー側かユーザー側かどうかを確認するため、1時間程度時間を空けて再度実行していただけますか?
      普通、サーバー側の問題だと、この程度で復旧するはずです。(書き込んでいただいた内容から、すでに時間は経過しているような気がしますが。)
      のちほど切り分けを行いたいと思います。

      1. 早速ご返信ありがとうございます。
        この後試してみようと思います。

      2. 別時間帯(2025/01/05 0:00~)の番組をダウンロードしてみましたが、正常にダウンロードできました。ご指摘のようにサーバー側の一時的な問題のようです。

        お騒がせしました。ご放念ください。

        1. 解決してよかったです。
          久しぶりに自分が作ったRadikoPad_cmd を起動しようとしたのですけど、どうやって使うんだったっけ?と、ドキュメントを読む羽目になってしまいました。(涙)
          ラジコサーバー側が返してくる、特に、リターンコードを覚えていないので、調査が大変になりそうと思っていたところです。

          気になっているのが、昨今、日本の大手サイトに対するサービス妨害アタック。
          ラジコサイトには掲示されていないのですが、ひょっとして、一時的にサービス妨害を受けていたのかもしれません。
          ラジコもNTT系のサーバーを使っているので。

          いずれにせよ、ラジコ側の仕様変更によるものじゃなくてよかったです。
          仕様変更されると、Webページのスクリプトを読める人が必要になるのでお手上げになるところでした。

          一時的なものということで、一旦、調査終了にします。なんにせよ、詳しい情報インプットは歓迎です。ではでは。

コメントを残す