|
@@ -1,6 +1,8 @@
|
|
|
# coding: utf-8
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
+import re
|
|
|
+
|
|
|
from .common import InfoExtractor
|
|
|
from ..compat import (
|
|
|
compat_str,
|
|
@@ -18,7 +20,13 @@ from ..utils import (
|
|
|
class PandoraTVIE(InfoExtractor):
|
|
|
IE_NAME = 'pandora.tv'
|
|
|
IE_DESC = '판도라TV'
|
|
|
- _VALID_URL = r'https?://(?:.+?\.)?channel\.pandora\.tv/channel/video\.ptv\?'
|
|
|
+ _VALID_URL = r'''(?x)
|
|
|
+ https?://
|
|
|
+ (?:
|
|
|
+ (?:www\.)?pandora\.tv/view/(?P<user_id>[^/]+)/(?P<id>\d+)| # new format
|
|
|
+ (?:.+?\.)?channel\.pandora\.tv/channel/video\.ptv\? # old format
|
|
|
+ )
|
|
|
+ '''
|
|
|
_TESTS = [{
|
|
|
'url': 'http://jp.channel.pandora.tv/channel/video.ptv?c1=&prgid=53294230&ch_userid=mikakim&ref=main&lot=cate_01_2',
|
|
|
'info_dict': {
|
|
@@ -53,14 +61,22 @@ class PandoraTVIE(InfoExtractor):
|
|
|
# Test metadata only
|
|
|
'skip_download': True,
|
|
|
},
|
|
|
+ }, {
|
|
|
+ 'url': 'http://www.pandora.tv/view/mikakim/53294230#36797454_new',
|
|
|
+ 'only_matching': True,
|
|
|
}]
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
- qs = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)
|
|
|
- video_id = qs.get('prgid', [None])[0]
|
|
|
- user_id = qs.get('ch_userid', [None])[0]
|
|
|
- if any(not f for f in (video_id, user_id,)):
|
|
|
- raise ExtractorError('Invalid URL', expected=True)
|
|
|
+ mobj = re.match(self._VALID_URL, url)
|
|
|
+ user_id = mobj.group('user_id')
|
|
|
+ video_id = mobj.group('id')
|
|
|
+
|
|
|
+ if not user_id or not video_id:
|
|
|
+ qs = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)
|
|
|
+ video_id = qs.get('prgid', [None])[0]
|
|
|
+ user_id = qs.get('ch_userid', [None])[0]
|
|
|
+ if any(not f for f in (video_id, user_id,)):
|
|
|
+ raise ExtractorError('Invalid URL', expected=True)
|
|
|
|
|
|
data = self._download_json(
|
|
|
'http://m.pandora.tv/?c=view&m=viewJsonApi&ch_userid=%s&prgid=%s'
|