From ac6e69cde43e4daf753734aac6edcba20a19581b Mon Sep 17 00:00:00 2001 From: arichi Date: Tue, 6 Dec 2016 21:16:06 +0800 Subject: [PATCH 1/3] added correct hash retrieval --- youtube_dl/extractor/pandoratv.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/youtube_dl/extractor/pandoratv.py b/youtube_dl/extractor/pandoratv.py index 2b07958bb..d568260d1 100644 --- a/youtube_dl/extractor/pandoratv.py +++ b/youtube_dl/extractor/pandoratv.py @@ -5,12 +5,14 @@ from .common import InfoExtractor from ..compat import ( compat_str, compat_urlparse, + compat_urllib_request, ) from ..utils import ( ExtractorError, float_or_none, parse_duration, str_to_int, + urlencode_postdata, ) @@ -56,6 +58,13 @@ class PandoraTVIE(InfoExtractor): r'^v(\d+)[Uu]rl$', format_id, 'height', default=None) if not height: continue + + post_data = ('prgid=%s&runtime=%s&vod_url=%s' % (video_id, info.get('runtime'), format_url)).encode() + ret = compat_urllib_request.urlopen("http://m.pandora.tv/?c=api&m=play_url", data=post_data).read() + encoding = self._guess_encoding_from_content('json', ret) + ret = self._parse_json(ret.decode(encoding, errors='ignore'), video_id) + format_url = ret['url'] + formats.append({ 'format_id': '%sp' % height, 'url': format_url, From 6033d40011337147f133fb38559516b7470250fb Mon Sep 17 00:00:00 2001 From: arichi Date: Tue, 6 Dec 2016 21:33:30 +0800 Subject: [PATCH 2/3] refactor a bit --- youtube_dl/extractor/pandoratv.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/youtube_dl/extractor/pandoratv.py b/youtube_dl/extractor/pandoratv.py index d568260d1..a449811e6 100644 --- a/youtube_dl/extractor/pandoratv.py +++ b/youtube_dl/extractor/pandoratv.py @@ -12,7 +12,6 @@ from ..utils import ( float_or_none, parse_duration, str_to_int, - urlencode_postdata, ) @@ -60,11 +59,13 @@ class PandoraTVIE(InfoExtractor): continue post_data = ('prgid=%s&runtime=%s&vod_url=%s' % (video_id, info.get('runtime'), format_url)).encode() - ret = compat_urllib_request.urlopen("http://m.pandora.tv/?c=api&m=play_url", data=post_data).read() - encoding = self._guess_encoding_from_content('json', ret) - ret = self._parse_json(ret.decode(encoding, errors='ignore'), video_id) - format_url = ret['url'] - + data = compat_urllib_request.urlopen("http://m.pandora.tv/?c=api&m=play_url", data=post_data).read() + encoding = self._guess_encoding_from_content('json', data) + play_url = self._parse_json(data.decode(encoding, errors='ignore'), video_id) + format_url = play_url.get('url') + if not format_url: + continue + formats.append({ 'format_id': '%sp' % height, 'url': format_url, From 50b6909db689277295b3938b7729070f54fb02d3 Mon Sep 17 00:00:00 2001 From: arichi Date: Wed, 7 Dec 2016 00:09:05 +0800 Subject: [PATCH 3/3] use _download_json to get play_url --- youtube_dl/extractor/pandoratv.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/youtube_dl/extractor/pandoratv.py b/youtube_dl/extractor/pandoratv.py index a449811e6..3e37ae01d 100644 --- a/youtube_dl/extractor/pandoratv.py +++ b/youtube_dl/extractor/pandoratv.py @@ -12,6 +12,7 @@ from ..utils import ( float_or_none, parse_duration, str_to_int, + urlencode_postdata, ) @@ -58,10 +59,13 @@ class PandoraTVIE(InfoExtractor): if not height: continue - post_data = ('prgid=%s&runtime=%s&vod_url=%s' % (video_id, info.get('runtime'), format_url)).encode() - data = compat_urllib_request.urlopen("http://m.pandora.tv/?c=api&m=play_url", data=post_data).read() - encoding = self._guess_encoding_from_content('json', data) - play_url = self._parse_json(data.decode(encoding, errors='ignore'), video_id) + post_data = {'prgid': video_id, 'runtime': info.get('runtime'), 'vod_url': format_url} + play_url = self._download_json('http://m.pandora.tv/?c=api&m=play_url', video_id, + data=urlencode_postdata(post_data), + headers={ + 'Origin': url, + 'Content-Type': 'application/x-www-form-urlencoded' + }) format_url = play_url.get('url') if not format_url: continue