Class: Radiko
Direct Known Subclasses
Instance Attribute Summary collapse
-
#authtoken ⇒ Object
readonly
Returns the value of attribute authtoken.
Attributes inherited from Radio
#area_en, #area_id, #area_ja, #ext, #outdir
Instance Method Summary collapse
- #authenticate1(url) ⇒ Object
-
#authenticate2(url, authtoken, partialkey) ⇒ Object
return: area info.
- #channel_to_uri ⇒ Object
- #create_player(uri) ⇒ Object
-
#open ⇒ Object
get_auth2 の返り値により @area_id, @area_ja, @area_en が設定される.
- #parse_stations(body) ⇒ Object
- #read_partialkey(offset, length) ⇒ Object
- #stations_uri ⇒ Object
Methods inherited from Radio
#agent, bands, channels, #close, #convert, #convert_ffmpeg, #datetime, db, #fetch_stations, find, inherited, #initialize, #login, #make_recfile, #make_tmpfile, match, #out_ext, #play, #record, search, stations, #tune
Constructor Details
This class inherits a constructor from Radio
Instance Attribute Details
#authtoken ⇒ Object (readonly)
Returns the value of attribute authtoken.
8 9 10 |
# File 'lib/rbtune/radiko.rb', line 8 def authtoken @authtoken end |
Instance Method Details
#authenticate1(url) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rbtune/radiko.rb', line 35 def authenticate1(url) agent.request_headers = { 'X-Radiko-App' => 'pc_html5', 'X-Radiko-App-Version' => '0.0.1', 'X-Radiko-Device' => 'pc', 'X-Radiko-User' => 'dummy_user', } res = agent.get url auth1 = res.response authtoken = auth1['x-radiko-authtoken'] offset = auth1['x-radiko-keyoffset'].to_i length = auth1['x-radiko-keylength'].to_i partialkey = read_partialkey offset, length [authtoken, partialkey] end |
#authenticate2(url, authtoken, partialkey) ⇒ Object
return: area info
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/rbtune/radiko.rb', line 59 def authenticate2(url, authtoken, partialkey) # pp [url, authtoken, partialkey] agent.verify_mode = OpenSSL::SSL::VERIFY_NONE agent.request_headers = { 'X-Radiko-Device' => 'pc', 'X-Radiko-User' => 'dummy_user', 'X-Radiko-Authtoken' => authtoken, 'X-Radiko-Partialkey' => partialkey, } res = agent.get url body = res.body body.force_encoding 'utf-8' body.split(',').map(&:strip) end |
#channel_to_uri ⇒ Object
19 20 21 22 23 |
# File 'lib/rbtune/radiko.rb', line 19 def channel_to_uri uri = "http://radiko.jp/v2/station/stream_smh_multi/#{@channel}.xml" xml = agent.get uri xml.at('//url/playlist_create_url').text end |
#create_player(uri) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/rbtune/radiko.rb', line 26 def create_player(uri) FFMpeg.new( { headers: %Q("X-Radiko-Authtoken: #{authtoken}"), i: %Q("#{uri}"), # acodec: 'copy', # acodecオプションはiオプションのあとに置かないとエラー } ) end |
#open ⇒ Object
get_auth2 の返り値により @area_id, @area_ja, @area_en が設定される
12 13 14 15 16 |
# File 'lib/rbtune/radiko.rb', line 12 def open @authtoken, partialkey = authenticate1 'https://radiko.jp/v2/api/auth1' @area_id, @area_ja, @area_en = authenticate2 'https://radiko.jp/v2/api/auth2', authtoken, partialkey puts "area: #{area_id} (#{area_ja}: #{area_en})" end |
#parse_stations(body) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rbtune/radiko.rb', line 80 def parse_stations(body) stations = body.search '//station' stations.map do |station| id = station.at('id').text name = station.at('name').text uri = id ascii_name = station.at('ascii_name').text Station.new(id, uri, name: name, ascii_name: ascii_name) end end |
#read_partialkey(offset, length) ⇒ Object
52 53 54 55 |
# File 'lib/rbtune/radiko.rb', line 52 def read_partialkey(offset, length) key = "bcd151073c03b352e1ef2fd66c32209da9ca0afa" Base64.encode64(key[offset,length]).chomp end |
#stations_uri ⇒ Object
75 76 77 |
# File 'lib/rbtune/radiko.rb', line 75 def stations_uri "http://radiko.jp/v3/station/list/#{area_id}.xml" end |