はじめに
補助的な作業が要らないので完成すれば簡単にできます。
手順
意味不明なドットは省略です。
とりあえず必要なところにアクセスしておく
host_vcms = "vcms...................." port_vcms = 443 https_vcms = Net::HTTP.new(host_vcms, port_vcms) https_vcms.use_ssl = true https_vcms.verify_mode = OpenSSL::SSL::VERIFY_PEER host_vms = "vms...................." port_vms = 443 https_vms = Net::HTTP.new(host_vms, port_vms) https_vms.use_ssl = true https_vms.verify_mode = OpenSSL::SSL::VERIFY_PEER
最新回の情報を取り出す
GETリクエストを送るときにヘッダーにX-Reuested-With
を加えないと拒否されます。
path_program = "/api/.........../#{program_title}" request_program = Net::HTTP::Get.new(path_program) request_program['X-Requested-With'] = "XMLHttpRequest" response_program = https_vcms.start { |https| https.request(request_program) } # ハッシュを表す文字列が渡される # 中でnullが使われているので、とりあえずnull = nilとしておく null = nil hash_response_program = eval(response_program.body.force_encoding("utf-8")) # title, video_idを取得 title = hash_response_program[:episode][:program_name] + "-" + hash_response_program[:episode][:name] video_id = hash_response_program[:episode][:video][:id].to_s
video_id
がわかった後
# play_checkにアクセスしてトークンを取得 # ヘッダーに`X-Reuested-With`を加えておく必要がある path_play_check = "/............./play_check" query_play_check = "video_id=#{video_id}" request_play_check = Net::HTTP::Get.new("#{path_play_check}?#{query_play_check}") request_play_check['X-Requested-With'] = "XMLHttpRequest" response_play_check = https_vcms.start { |https| https.request(request_play_check) } # ハッシュを表す文字列が渡される # null = nil hash_response_play_check = eval(response_play_check.body) # キー情報にアクセスするためのCookieを取得する url_playlist = hash_response_play_check[:playlist_url] uri_playlist = URI.split(url_playlist) path_playlist = uri_playlist[5] query_playlist = uri_playlist[7] request_playlist = Net::HTTP::Get.new("#{path_playlist}?#{query_playlist}") response_playlist = https_vms.start { |https| https.request(request_playlist) } # Domain, Pathはffmpegで必須 cookie_m3u8 = response_playlist['Set-Cookie'].match(/(_logica.*); path=\/; secure; HttpOnly/)[1] + ";Domain=vms....................;Path=/" url_m3u8 = response_playlist.body.match(/http.*$/)[0] system "ffmpeg -cookies #{cookie_m3u8} -i #{url_m3u8} -bsf:a aac_adtstoasc -movflags faststart -acodec copy C:/.../#{title}.m4a"
最後に
video_id
は4桁の数字です。重労働ですが、色々調べたいならffmpegで先頭に-t 00:00:03
などとすればよいのではないでしょうか(ラジオ)。オープニングは毎回同じなので、やり方は考えていませんがなにかしらを基準に判定させるのもアリですね。