]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/tunein.py
4ce5aeeba242b94b78d71e3c9d033aa318b588fb
2 from __future__
import unicode_literals
7 from .common
import InfoExtractor
8 from ..utils
import ExtractorError
11 class TuneInIE(InfoExtractor
):
12 _VALID_URL
= r
'''(?x)https?://(?:www\.)?
17 station/.*?StationId\=
19 |tun\.in/(?P<redirect_id>[A-Za-z0-9]+)
22 _API_URL_TEMPLATE
= 'http://tunein.com/tuner/tune/?stationId={0:}&tuneType=Station'
26 'title': 'Jazz 24 on 88.5 Jazz24 - KPLU-HD2',
28 'thumbnail': 're:^https?://.*\.png$',
29 'location': 'Tacoma, WA',
33 'url': 'http://tunein.com/radio/Jazz24-885-s34682/',
34 'info_dict': _INFO_DICT
,
36 'skip_download': True, # live stream
40 'url': 'http://tun.in/ser7s',
41 'info_dict': _INFO_DICT
,
43 'skip_download': True, # live stream
48 def _real_extract(self
, url
):
49 mobj
= re
.match(self
._VALID
_URL
, url
)
50 redirect_id
= mobj
.group('redirect_id')
52 # The server doesn't support HEAD requests
53 urlh
= self
._request
_webpage
(
54 url
, redirect_id
, note
='Downloading redirect page')
56 self
.to_screen('Following redirect: %s' % url
)
57 mobj
= re
.match(self
._VALID
_URL
, url
)
58 station_id
= mobj
.group('id')
60 station_info
= self
._download
_json
(
61 self
._API
_URL
_TEMPLATE
.format(station_id
),
62 station_id
, note
='Downloading station JSON')
64 title
= station_info
['Title']
65 thumbnail
= station_info
.get('Logo')
66 location
= station_info
.get('Location')
67 streams_url
= station_info
.get('StreamUrl')
69 raise ExtractorError('No downloadable streams found',
71 stream_data
= self
._download
_webpage
(
72 streams_url
, station_id
, note
='Downloading stream data')
73 streams
= json
.loads(self
._search
_regex
(
74 r
'\((.*)\);', stream_data
, 'stream info'))['Streams']
78 for stream
in streams
:
79 if stream
.get('Type') == 'Live':
82 'abr': stream
.get('Bandwidth'),
83 'ext': stream
.get('MediaType'),
84 'acodec': stream
.get('MediaType'),
86 'url': stream
.get('Url'),
87 # Sometimes streams with the highest quality do not exist
88 'preference': stream
.get('Reliability'),
90 self
._sort
_formats
(formats
)
96 'thumbnail': thumbnail
,