mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[pandatv] Extract m3u8, document reverse source and PEP 8
This commit is contained in:
		@@ -2,16 +2,16 @@
 | 
				
			|||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .common import InfoExtractor
 | 
					from .common import InfoExtractor
 | 
				
			||||||
from ..compat import compat_str
 | 
					 | 
				
			||||||
from ..utils import (
 | 
					from ..utils import (
 | 
				
			||||||
    ExtractorError,
 | 
					    ExtractorError,
 | 
				
			||||||
    qualities
 | 
					    qualities,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PandaTVIE(InfoExtractor):
 | 
					class PandaTVIE(InfoExtractor):
 | 
				
			||||||
    IE_DESC = '熊猫TV'
 | 
					    IE_DESC = '熊猫TV'
 | 
				
			||||||
    _VALID_URL = r'http://(?:www\.)?panda\.tv/(?P<id>[0-9]+)'
 | 
					    _VALID_URL = r'http://(?:www\.)?panda\.tv/(?P<id>[0-9]+)'
 | 
				
			||||||
    _TESTS = [{
 | 
					    _TEST = {
 | 
				
			||||||
        'url': 'http://www.panda.tv/10091',
 | 
					        'url': 'http://www.panda.tv/10091',
 | 
				
			||||||
        'info_dict': {
 | 
					        'info_dict': {
 | 
				
			||||||
            'id': '10091',
 | 
					            'id': '10091',
 | 
				
			||||||
@@ -23,25 +23,23 @@ class PandaTVIE(InfoExtractor):
 | 
				
			|||||||
        'params': {
 | 
					        'params': {
 | 
				
			||||||
            'skip_download': True,
 | 
					            'skip_download': True,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    }]
 | 
					        'skip': 'Live stream is offline',
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _real_extract(self, url):
 | 
					    def _real_extract(self, url):
 | 
				
			||||||
        video_id = self._match_id(url)
 | 
					        video_id = self._match_id(url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = self._download_json(
 | 
					        config = self._download_json(
 | 
				
			||||||
            'http://www.panda.tv/api_room?roomid=%s' % video_id,
 | 
					            'http://www.panda.tv/api_room?roomid=%s' % video_id, video_id)
 | 
				
			||||||
            video_id
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        data = config['data']
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        error_code = config.get('errno', 0)
 | 
					        error_code = config.get('errno', 0)
 | 
				
			||||||
        if error_code is not 0:
 | 
					        if error_code is not 0:
 | 
				
			||||||
            error_desc = 'Server reported error %i' % error_code
 | 
					            raise ExtractorError(
 | 
				
			||||||
            if isinstance(data, compat_str):
 | 
					                '%s returned error %s: %s'
 | 
				
			||||||
                error_desc += ': ' + data
 | 
					                % (self.IE_NAME, error_code, config['errmsg']),
 | 
				
			||||||
            raise ExtractorError(error_desc, expected=True)
 | 
					                expected=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data = config['data']
 | 
				
			||||||
        video_info = data['videoinfo']
 | 
					        video_info = data['videoinfo']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # 2 = live, 3 = offline
 | 
					        # 2 = live, 3 = offline
 | 
				
			||||||
@@ -52,8 +50,12 @@ class PandaTVIE(InfoExtractor):
 | 
				
			|||||||
        title = data['roominfo']['name']
 | 
					        title = data['roominfo']['name']
 | 
				
			||||||
        uploader = data.get('hostinfo', {}).get('name')
 | 
					        uploader = data.get('hostinfo', {}).get('name')
 | 
				
			||||||
        room_key = video_info['room_key']
 | 
					        room_key = video_info['room_key']
 | 
				
			||||||
        stream_addr = video_info.get('stream_addr', {'OD': '1', 'HD': '1', 'SD': '1'})
 | 
					        stream_addr = video_info.get(
 | 
				
			||||||
 | 
					            'stream_addr', {'OD': '1', 'HD': '1', 'SD': '1'})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Reverse engineered from web player swf
 | 
				
			||||||
 | 
					        # (http://s6.pdim.gs/static/07153e425f581151.swf at the moment of
 | 
				
			||||||
 | 
					        # writing).
 | 
				
			||||||
        plflag0, plflag1 = video_info['plflag'].split('_')
 | 
					        plflag0, plflag1 = video_info['plflag'].split('_')
 | 
				
			||||||
        plflag0 = int(plflag0) - 1
 | 
					        plflag0 = int(plflag0) - 1
 | 
				
			||||||
        if plflag1 == '21':
 | 
					        if plflag1 == '21':
 | 
				
			||||||
@@ -65,14 +67,19 @@ class PandaTVIE(InfoExtractor):
 | 
				
			|||||||
        suffix = ['_small', '_mid', '']
 | 
					        suffix = ['_small', '_mid', '']
 | 
				
			||||||
        formats = []
 | 
					        formats = []
 | 
				
			||||||
        for k, v in stream_addr.items():
 | 
					        for k, v in stream_addr.items():
 | 
				
			||||||
            if v == '1':
 | 
					            if v != '1':
 | 
				
			||||||
                quality = quality_key(k)
 | 
					                continue
 | 
				
			||||||
                if quality >= 0:
 | 
					            quality = quality_key(k)
 | 
				
			||||||
                    formats.append({
 | 
					            if quality <= 0:
 | 
				
			||||||
                        'url': 'http://pl%s.live.panda.tv/live_panda/%s%s%s.flv' % (plflag1, room_key, live_panda, suffix[quality]),
 | 
					                continue
 | 
				
			||||||
                        'format_id': k,
 | 
					            for pref, (ext, pl) in enumerate((('m3u8', '-hls'), ('flv', ''))):
 | 
				
			||||||
                        'quality': quality,
 | 
					                formats.append({
 | 
				
			||||||
                    })
 | 
					                    'url': 'http://pl%s%s.live.panda.tv/live_panda/%s%s%s.%s'
 | 
				
			||||||
 | 
					                    % (pl, plflag1, room_key, live_panda, suffix[quality], ext),
 | 
				
			||||||
 | 
					                    'format_id': '%s-%s' % (k, ext),
 | 
				
			||||||
 | 
					                    'quality': quality,
 | 
				
			||||||
 | 
					                    'source_preference': pref,
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
        self._sort_formats(formats)
 | 
					        self._sort_formats(formats)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user