<s> from __future__ import unicode_literals <EOL> import re <EOL> import json <EOL> from . common import InfoExtractor <EOL> from . . compat import ( <EOL> compat_urllib_request , <EOL> ) <EOL> from . . utils import ( <EOL> int_or_none , <EOL> ExtractorError , <EOL> ) <EOL> class VeohIE ( 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>' : '<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> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> } , <EOL> } , <EOL> { <EOL> '<STR_LIT:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<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> '<STR_LIT>' : '<STR_LIT>' , <EOL> } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } , <EOL> ] <EOL> def _extract_formats ( self , source ) : <EOL> formats = [ ] <EOL> link = source . get ( '<STR_LIT>' ) <EOL> if link : <EOL> formats . append ( { <EOL> '<STR_LIT:url>' : link , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } ) <EOL> link = source . get ( '<STR_LIT>' ) <EOL> if link : <EOL> formats . append ( { <EOL> '<STR_LIT:url>' : link , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } ) <EOL> link = source . get ( '<STR_LIT>' ) <EOL> if link : <EOL> formats . append ( { <EOL> '<STR_LIT:url>' : link , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } ) <EOL> return formats <EOL> def _extract_video ( self , source ) : <EOL> return { <EOL> '<STR_LIT:id>' : source . get ( '<STR_LIT>' ) , <EOL> '<STR_LIT:title>' : source . get ( '<STR_LIT:title>' ) , <EOL> '<STR_LIT:description>' : source . get ( '<STR_LIT:description>' ) , <EOL> '<STR_LIT>' : source . get ( '<STR_LIT>' ) or source . get ( '<STR_LIT>' ) , <EOL> '<STR_LIT>' : source . get ( '<STR_LIT:username>' ) , <EOL> '<STR_LIT>' : int_or_none ( source . get ( '<STR_LIT>' ) ) , <EOL> '<STR_LIT>' : int_or_none ( source . get ( '<STR_LIT>' ) ) , <EOL> '<STR_LIT>' : <NUM_LIT> if source . get ( '<STR_LIT>' ) == '<STR_LIT:true>' or source . get ( '<STR_LIT>' ) == '<STR_LIT:true>' else <NUM_LIT:0> , <EOL> '<STR_LIT>' : self . _extract_formats ( source ) , <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 . startswith ( '<STR_LIT:v>' ) : <EOL> rsp = self . _download_xml ( <EOL> r'<STR_LIT>' % video_id , video_id , '<STR_LIT>' ) <EOL> stat = rsp . get ( '<STR_LIT>' ) <EOL> if stat == '<STR_LIT>' : <EOL> return self . _extract_video ( rsp . find ( '<STR_LIT>' ) ) <EOL> elif stat == '<STR_LIT>' : <EOL> raise ExtractorError ( <EOL> '<STR_LIT>' % ( self . IE_NAME , rsp . find ( '<STR_LIT>' ) . get ( '<STR_LIT>' ) ) , expected = True ) <EOL> webpage = self . _download_webpage ( url , video_id ) <EOL> age_limit = <NUM_LIT:0> <EOL> if '<STR_LIT>' in webpage : <EOL> self . report_age_confirmation ( ) <EOL> age_limit = <NUM_LIT> <EOL> request = compat_urllib_request . Request ( url ) <EOL> request . add_header ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> webpage = self . _download_webpage ( request , video_id ) <EOL> m_youtube = re . search ( r'<STR_LIT>' , webpage ) <EOL> if m_youtube is not None : <EOL> youtube_id = m_youtube . group ( <NUM_LIT:1> ) <EOL> self . to_screen ( '<STR_LIT>' % video_id ) <EOL> return self . url_result ( youtube_id , '<STR_LIT>' ) <EOL> info = json . loads ( <EOL> self . _search_regex ( r'<STR_LIT>' , webpage , '<STR_LIT:info>' ) . replace ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> video = self . _extract_video ( info ) <EOL> video [ '<STR_LIT>' ] = age_limit <EOL> return video </s>
