ラジコ:エリアフリーにログインするVisual Basicスクリプト

前のメモで、ラジコの認証についてのメモと、Visual Basic VB.Net で curl をコールする方法を紹介しました。

今回は、この組み合わせを使って、VB.NET でラジコプレミアムにログインするスクリプトを紹介します。(というか、自分のためのメモ。)

基本的には、VB.NET で curl コマンドをコールするメモで書いたスクリプトの修正です。

まず、必要なのが curl コマンドのひな型。
ラジコ会員ページへのログインに使うコマンドは下記の通り。

curl.exe -c cookie.txt --request POST --data-urlencode "mail=radiko@outlook.com" --data-urlencode "pass=areafree" "https://radiko.jp/v4/api/member/login"

このコマンドを解説すると、

curl.exe \                        コマンド名
-c cookie.txt \                 クッキーの指定
–request POST \               POSTメソッドを使う
–data-urlencode “mail=radiko@outlook.com” \   エンコードしたアカウント情報(例)を送る
–data-urlencode “pass=areafree” \       エンコードしたパスワード情報(例)を送る
“https://radiko.jp/v4/api/member/login”     ログインするためのURL

一行で書いてもいいのですけど、見にくいことと、部分的にプログラム他部分から再利用できるように、部分的に変数に取り込み、あとで合成しました。

ラジコアカウントは、サンプルなのでプログラム中に決め打ち。本番は、.ini ファイルから読み込みます。
console.WriteLine はデバッグのための行。

Imports System

Module Program
    Sub Main(args As String())

        Dim mail As String = "mail=radiko@outlook.com"
        Dim pass As String = "areafree"
        Dim login1_para1 As String = "curl.exe -c cookie.txt --request POST "
        Dim login1_para2 As String = "--data-urlencode ""mail=" & mail & """ "
        Dim login1_para3 As String = "--data-urlencode ""pass=" & pass & """ "
        Dim login1_para4 As String = """https://radiko.jp/v4/api/member/login"""
        Dim login1 As String = login1_para1 & login1_para2 & login1_para3 & login1_para4
        Dim login1_result As String = ""

        'Console.WriteLine(login1)
        'Console.WriteLine()

        Dim p As New System.Diagnostics.Process()

        p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
        p.StartInfo.UseShellExecute = False
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.RedirectStandardInput = False
        p.StartInfo.CreateNoWindow = True
        p.StartInfo.Arguments = "/c " & login1

        p.Start()

        Dim results As String = p.StandardOutput.ReadToEnd()

        p.WaitForExit()
        p.Close()

        Console.WriteLine(results)

        login1_result = results
    End Sub
End Module

上記スクリプトを実行すると、

  1. ラジコプレミアム会員であると認証された場合、status 200, radiko_session, areafree などが含まれたレスポンスが返ってきます。
  2. 無料ラジコ会員である場合は、status 200, radiko_session が返ってくるだけで、areafree 情報は含まれていません。
  3. アカウントが正しくない場合は、status 401 と error_message が返されます。

例)

  1. {"member_ukey":"ANDEHFA","privileges":["1"],"radiko_session":"d50abeb67def0082091c0703fb3eeac9e364fbad","areafree":"1","status":"200","twitter_name":null,"facebook_name":null,"unpaid":"0","paid_member":"1"}
  2. {"facebook_name":null,"unpaid":"0","status":"200","member_ukey":"iG4SKdU","twitter_name":null,"privileges":[],"radiko_session":"44b207b879ffa1d3f625c9c19beefb2b9d954e9e","paid_member":"0"}
  3. {"cause":"auth","error_message":"繝代せ繝ッ繝シ繝峨∪縺溘・繝。繝シ繝ォ繧「繝峨Ξ繧ケ縺碁&縺・∪縺吶€・,"button_string":"","url":"","status":"401"}

レスポンスにareafree が含まれているかどうか、含まれている場合は radiko_session の値を変数に取り込む処理を行えばいいことになります。順番は常にバラバラなので、一番最初のパラメーターをチェック、、、というような書き方はできません。
レスポンスに areafree : 1 がなければ、エリアフリー番組を聞くことはできません。

余談ですが、Visual Basic って、ダブルクォーテーション「”」のエスケープ文字も「”」なので、コマンドの中でダブルクォーテーションを使わなきゃいけない場合の記述を考えるとイライラしてきます。「”」が連続3個並んだり4個並んだりするので、あとからプログラムを見直すと、いったい何をしたいんだ!ってイラッ。

コメントを残す