]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/pandoratv.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  20 class PandoraTVIE(InfoExtractor
): 
  21     IE_NAME 
= 'pandora.tv' 
  26                                 (?:www\.)?pandora\.tv/view/(?P<user_id>[^/]+)/(?P<id>\d+)|  # new format 
  27                                 (?:.+?\.)?channel\.pandora\.tv/channel/video\.ptv\?|        # old format 
  28                                 m\.pandora\.tv/?\?                                          # mobile 
  32         'url': 'http://jp.channel.pandora.tv/channel/video.ptv?c1=&prgid=53294230&ch_userid=mikakim&ref=main&lot=cate_01_2', 
  37             'description': '頭を撫でてくれる?', 
  38             'thumbnail': r
're:^https?://.*\.jpg$', 
  40             'upload_date': '20151218', 
  41             'uploader': 'カワイイ動物まとめ', 
  42             'uploader_id': 'mikakim', 
  47         'url': 'http://channel.pandora.tv/channel/video.ptv?ch_userid=gogoucc&prgid=54721744', 
  51             'title': '[HD] JAPAN COUNTDOWN 170423', 
  52             'description': '[HD] JAPAN COUNTDOWN 170423', 
  53             'thumbnail': r
're:^https?://.*\.jpg$', 
  55             'upload_date': '20170423', 
  56             'uploader': 'GOGO_UCC', 
  57             'uploader_id': 'gogoucc', 
  63             'skip_download': True, 
  66         'url': 'http://www.pandora.tv/view/mikakim/53294230#36797454_new', 
  67         'only_matching': True, 
  69         'url': 'http://m.pandora.tv/?c=view&ch_userid=mikakim&prgid=54600346', 
  70         'only_matching': True, 
  73     def _real_extract(self
, url
): 
  74         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  75         user_id 
= mobj
.group('user_id') 
  76         video_id 
= mobj
.group('id') 
  78         if not user_id 
or not video_id
: 
  79             qs 
= compat_urlparse
.parse_qs(compat_urlparse
.urlparse(url
).query
) 
  80             video_id 
= qs
.get('prgid', [None])[0] 
  81             user_id 
= qs
.get('ch_userid', [None])[0] 
  82             if any(not f 
for f 
in (video_id
, user_id
,)): 
  83                 raise ExtractorError('Invalid URL', expected
=True) 
  85         data 
= self
._download
_json
( 
  86             'http://m.pandora.tv/?c=view&m=viewJsonApi&ch_userid=%s&prgid=%s' 
  87             % (user_id
, video_id
), video_id
) 
  89         info 
= data
['data']['rows']['vod_play_info']['result'] 
  92         for format_id
, format_url 
in info
.items(): 
  95             height 
= self
._search
_regex
( 
  96                 r
'^v(\d+)[Uu]rl$', format_id
, 'height', default
=None) 
 100             play_url 
= self
._download
_json
( 
 101                 'http://m.pandora.tv/?c=api&m=play_url', video_id
, 
 102                 data
=urlencode_postdata({ 
 104                     'runtime': info
.get('runtime'), 
 105                     'vod_url': format_url
, 
 109                     'Content-Type': 'application/x-www-form-urlencoded', 
 111             format_url 
= play_url
.get('url') 
 116                 'format_id': '%sp' % height
, 
 118                 'height': int(height
), 
 120         self
._sort
_formats
(formats
) 
 124             'title': info
['subject'], 
 125             'description': info
.get('body'), 
 126             'thumbnail': info
.get('thumbnail') or info
.get('poster'), 
 127             'duration': float_or_none(info
.get('runtime'), 1000) or parse_duration(info
.get('time')), 
 128             'upload_date': info
['fid'].split('/')[-1][:8] if isinstance(info
.get('fid'), compat_str
) else None, 
 129             'uploader': info
.get('nickname'), 
 130             'uploader_id': info
.get('upload_userid'), 
 131             'view_count': str_to_int(info
.get('hit')), 
 132             'like_count': str_to_int(info
.get('likecnt')),