]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/tunein.py
   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': 
  81             reliability 
= stream
.get('Reliability') 
  83                 'Reliability: %d%%' % reliability
 
  84                 if reliability 
is not None else None) 
  87                     0 if reliability 
is None or reliability 
> 90 
  89                 'abr': stream
.get('Bandwidth'), 
  90                 'ext': stream
.get('MediaType').lower(), 
  91                 'acodec': stream
.get('MediaType'), 
  93                 'url': stream
.get('Url'), 
  94                 'source_preference': reliability
, 
  95                 'format_note': format_note
, 
  97         self
._sort
_formats
(formats
) 
 103             'thumbnail': thumbnail
, 
 104             'location': location
,