mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 22:47:06 -05:00 
			
		
		
		
	[shahid] add default fallbacks for extracting api vars
This commit is contained in:
		@@ -33,20 +33,30 @@ class ShahidIE(InfoExtractor):
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    _api_vars = {
 | 
			
		||||
        'type': 'player',
 | 
			
		||||
        'url': 'http://api.shahid.net/api/v1_1',
 | 
			
		||||
        'playerType': 'episode',
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
        video_id = self._match_id(url)
 | 
			
		||||
        webpage = self._download_webpage(url, video_id)
 | 
			
		||||
 | 
			
		||||
        player_info = ''
 | 
			
		||||
        for line in self._search_regex('var flashvars = ({[^}]+})', webpage, 'flashvars').splitlines():
 | 
			
		||||
            if '+' not in line and '(' not in line and ')' not in line:
 | 
			
		||||
                player_info += line
 | 
			
		||||
        player_info = self._parse_json(js_to_json(player_info), video_id)
 | 
			
		||||
        video_id = player_info['id']
 | 
			
		||||
        player_type = player_info['playerType']
 | 
			
		||||
        flash_vars = self._search_regex('var flashvars = ({[^}]+})', webpage, 'flashvars', None)
 | 
			
		||||
        if flash_vars is not None:
 | 
			
		||||
            for line in flash_vars.splitlines():
 | 
			
		||||
                if '+' not in line and '(' not in line and ')' not in line:
 | 
			
		||||
                    player_info += line
 | 
			
		||||
            player_info = self._parse_json(player_info, video_id, js_to_json, False)
 | 
			
		||||
            if player_info is not None:
 | 
			
		||||
                for key in self._api_vars:
 | 
			
		||||
                    if key in player_info:
 | 
			
		||||
                        self._api_vars[key] = player_info[key]
 | 
			
		||||
 | 
			
		||||
        player_json_data = self._download_json(
 | 
			
		||||
            'https://shahid.mbc.net/arContent/getPlayerContent-param-.id-' + video_id + '.type-' + player_info['type'] + '.html',
 | 
			
		||||
            'https://shahid.mbc.net/arContent/getPlayerContent-param-.id-' + video_id + '.type-' + self._api_vars['type'] + '.html',
 | 
			
		||||
            video_id
 | 
			
		||||
        )['data']
 | 
			
		||||
        if 'url' in player_json_data:
 | 
			
		||||
@@ -57,13 +67,13 @@ class ShahidIE(InfoExtractor):
 | 
			
		||||
        formats = self._extract_m3u8_formats(m3u8_url, video_id)
 | 
			
		||||
 | 
			
		||||
        video_info = self._download_json(
 | 
			
		||||
            player_info['url'] + '/' + player_type + '/' + video_id + '?apiKey=sh%40hid0nlin3&hash=b2wMCTHpSmyxGqQjJFOycRmLSex%2BBpTK%2Fooxy6vHaqs%3D',
 | 
			
		||||
            self._api_vars['url'] + '/' + self._api_vars['playerType'] + '/' + video_id + '?apiKey=sh%40hid0nlin3&hash=b2wMCTHpSmyxGqQjJFOycRmLSex%2BBpTK%2Fooxy6vHaqs%3D',
 | 
			
		||||
            video_id
 | 
			
		||||
        )['data']
 | 
			
		||||
        if video_info.get('error'):
 | 
			
		||||
            for error in video_info['error']:
 | 
			
		||||
                raise ExtractorError(error)
 | 
			
		||||
        video_info = video_info[player_type]
 | 
			
		||||
        video_info = video_info[self._api_vars['playerType']]
 | 
			
		||||
        title = video_info['title']
 | 
			
		||||
        thumbnail = video_info.get('thumbnailUrl')
 | 
			
		||||
        categories = [category['name'] for category in video_info.get('genres')]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user