日本全国のラジオを聴けるradikoですが、ffmpegなどでダウンロードする場合、X-Radiko-AuthTokenが必要になります。
ここではそのトークンをphpで取得する方法を解説します。
m3u8エンドポイント:[https://tf-f-rpaa-radiko.smartstream.ne.jp/tf/playlist.m3u8?end_at={endtime}&endless=0&ft={starttime}&l=60&lsid=&start_at={starttime}&station_id={sid}&to={endtime}&type=b]
sid:放送局ID
starttime:開始日時:yyyyMMddHHmmss:例 20230401000000
endtime:終了日時:yyyyMMddHHmmss:例 20230401010000
- $header = array(
- 'X-Radiko-App: pc_html5',
- 'X-Radiko-App-Version: 0.0.1',
- 'X-Radiko-User: dummy_user',
- 'X-Radiko-Device: pc',
- 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
- );
- $apiurl = 'https://radiko.jp/v2/api/auth1';
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $apiurl);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_HEADER, true);
- $fulldata = curl_exec($ch);
- $curlInfo = curl_getinfo($ch);
- $resheader = substr($fulldata,0,$curlInfo["header_size"]);
- $filedata = substr($fulldata,$curlInfo["header_size"]);
- $tmpHeader = explode("\r\n", trim($resheader));
- curl_close($ch);
- $responseHeaders = [];
- array_shift($tmpHeader);
- foreach ($tmpHeader as $header) {
- $pos = strpos($header, ":");
- if ($pos !== false) {
- $key = substr($header, 0, $pos);
- $value = trim(substr($header, $pos + 1));
- $responseHeaders[$key] = $value;
- }
- }
- $length = $responseHeaders["x-radiko-keylength"];
- $baye = $responseHeaders["x-radiko-keyoffset"];
- $pkey1 = substr('bcd151073c03b352e1ef2fd66c32209da9ca0afa',$baye);
- $pkey2 = substr($pkey1,0,$length);
- $pkey = $pkey2 ;
- $pakey = base64_encode($pkey);
- $auth = $responseHeaders["x-radiko-authtoken"];
auth2
- $header = array(
- 'X-Radiko-App: pc_html5',
- 'X-Radiko-App-Version: 0.0.1',
- 'X-Radiko-User: dummy_user',
- 'X-Radiko-AuthToken: '.$auth,
- 'X-Radiko-PartialKey: '.$pakey,
- 'X-Radiko-User: dummy_user',
- 'X-Radiko-Device: pc',
- 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
- );
- $apiurl = 'https://radiko.jp/v2/api/auth2';
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $apiurl);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- $res = curl_exec($ch);
- $curlInfo = curl_getinfo($ch);
- curl_close($ch);
auth2の$resに”JP13,東京都,tokyo Japan”のように都道府県が返ってきたら成功です。
$authがAuthTokenになるので、X-Radiko-AuthTokenに指定しましょう。
※この方法はipアドレスに基づく都道府県のみ取得できます。
緯度経度を指定して全国の都道府県を取得する方法もありますが、かなりグレーなので説明しません。
コメント