<s> from __future__ import unicode_literals <EOL> import re <EOL> import json <EOL> from . common import InfoExtractor <EOL> from . . compat import ( <EOL> compat_str , <EOL> ) <EOL> from . . utils import ( <EOL> ExtractorError , <EOL> find_xpath_attr , <EOL> ) <EOL> class NBCIE ( InfoExtractor ) : <EOL> _VALID_URL = r'<STR_LIT>' <EOL> _TESTS = [ <EOL> { <EOL> '<STR_LIT:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : '<STR_LIT>' , <EOL> } , <EOL> } , <EOL> { <EOL> '<STR_LIT:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : '<STR_LIT>' , <EOL> } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } , <EOL> ] <EOL> def _real_extract ( self , url ) : <EOL> video_id = self . _match_id ( url ) <EOL> webpage = self . _download_webpage ( url , video_id ) <EOL> theplatform_url = self . _search_regex ( <EOL> '<STR_LIT>' , <EOL> webpage , '<STR_LIT>' ) . replace ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> if theplatform_url . startswith ( '<STR_LIT>' ) : <EOL> theplatform_url = '<STR_LIT>' + theplatform_url <EOL> return self . url_result ( theplatform_url ) <EOL> class NBCNewsIE ( InfoExtractor ) : <EOL> _VALID_URL = r'''<STR_LIT>''' <EOL> _TESTS = [ <EOL> { <EOL> '<STR_LIT:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : '<STR_LIT>' , <EOL> } , <EOL> } , <EOL> { <EOL> '<STR_LIT:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : '<STR_LIT>' , <EOL> } , <EOL> '<STR_LIT>' : [ '<STR_LIT>' ] , <EOL> } , <EOL> ] <EOL> def _real_extract ( self , url ) : <EOL> mobj = re . match ( self . _VALID_URL , url ) <EOL> video_id = mobj . group ( '<STR_LIT:id>' ) <EOL> if video_id is not None : <EOL> all_info = self . _download_xml ( '<STR_LIT>' % video_id , video_id ) <EOL> info = all_info . find ( '<STR_LIT>' ) <EOL> return { <EOL> '<STR_LIT:id>' : video_id , <EOL> '<STR_LIT:title>' : info . find ( '<STR_LIT>' ) . text , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:url>' : find_xpath_attr ( info , '<STR_LIT>' , '<STR_LIT:type>' , '<STR_LIT>' ) . text , <EOL> '<STR_LIT:description>' : compat_str ( info . find ( '<STR_LIT>' ) . text ) , <EOL> '<STR_LIT>' : find_xpath_attr ( info , '<STR_LIT>' , '<STR_LIT:type>' , '<STR_LIT>' ) . text , <EOL> } <EOL> else : <EOL> title = mobj . group ( '<STR_LIT:title>' ) <EOL> webpage = self . _download_webpage ( url , title ) <EOL> bootstrap_json = self . _search_regex ( <EOL> r'<STR_LIT>' , webpage , '<STR_LIT>' , <EOL> flags = re . MULTILINE ) <EOL> bootstrap = json . loads ( bootstrap_json ) <EOL> info = bootstrap [ '<STR_LIT>' ] [ <NUM_LIT:0> ] [ '<STR_LIT>' ] <EOL> mpxid = info [ '<STR_LIT>' ] <EOL> base_urls = [ <EOL> info [ '<STR_LIT>' ] , <EOL> info [ '<STR_LIT>' ] , <EOL> ] <EOL> for base_url in base_urls : <EOL> if not base_url : <EOL> continue <EOL> playlist_url = base_url + '<STR_LIT>' <EOL> all_videos = self . _download_json ( playlist_url , title ) [ '<STR_LIT>' ] <EOL> try : <EOL> info = next ( v for v in all_videos if v [ '<STR_LIT>' ] == mpxid ) <EOL> break <EOL> except StopIteration : <EOL> continue <EOL> if info is None : <EOL> raise ExtractorError ( '<STR_LIT>' ) <EOL> return { <EOL> '<STR_LIT>' : '<STR_LIT:url>' , <EOL> '<STR_LIT:url>' : info [ '<STR_LIT>' ] [ - <NUM_LIT:1> ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } </s>
