<s> from __future__ import unicode_literals <EOL> from . common import InfoExtractor <EOL> from . . utils import unified_strdate <EOL> class ArchiveOrgIE ( InfoExtractor ) : <EOL> IE_NAME = '<STR_LIT>' <EOL> IE_DESC = '<STR_LIT>' <EOL> _VALID_URL = r'<STR_LIT>' <EOL> _TESTS = [ { <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>' : '<STR_LIT>' <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> } ] <EOL> def _real_extract ( self , url ) : <EOL> video_id = self . _match_id ( url ) <EOL> json_url = url + ( '<STR_LIT:?>' if '<STR_LIT:?>' in url else '<STR_LIT:&>' ) + '<STR_LIT>' <EOL> data = self . _download_json ( json_url , video_id ) <EOL> def get_optional ( data_dict , field ) : <EOL> return data_dict [ '<STR_LIT>' ] . get ( field , [ None ] ) [ <NUM_LIT:0> ] <EOL> title = get_optional ( data , '<STR_LIT:title>' ) <EOL> description = get_optional ( data , '<STR_LIT:description>' ) <EOL> uploader = get_optional ( data , '<STR_LIT>' ) <EOL> upload_date = unified_strdate ( get_optional ( data , '<STR_LIT:date>' ) ) <EOL> formats = [ <EOL> { <EOL> '<STR_LIT>' : fdata [ '<STR_LIT>' ] , <EOL> '<STR_LIT:url>' : '<STR_LIT>' + data [ '<STR_LIT>' ] + data [ '<STR_LIT>' ] + fn , <EOL> '<STR_LIT>' : int ( fdata [ '<STR_LIT:size>' ] ) , <EOL> } <EOL> for fn , fdata in data [ '<STR_LIT>' ] . items ( ) <EOL> if '<STR_LIT>' in fdata [ '<STR_LIT>' ] ] <EOL> self . _sort_formats ( formats ) <EOL> return { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:id>' : video_id , <EOL> '<STR_LIT:title>' : title , <EOL> '<STR_LIT>' : formats , <EOL> '<STR_LIT:description>' : description , <EOL> '<STR_LIT>' : uploader , <EOL> '<STR_LIT>' : upload_date , <EOL> '<STR_LIT>' : data . get ( '<STR_LIT>' , { } ) . get ( '<STR_LIT:image>' ) , <EOL> } </s>
