<s> from __future__ import unicode_literals <EOL> import re <EOL> from . common import InfoExtractor <EOL> class ExfmIE ( InfoExtractor ) : <EOL> IE_NAME = '<STR_LIT>' <EOL> IE_DESC = '<STR_LIT>' <EOL> _VALID_URL = r'<STR_LIT>' <EOL> _SOUNDCLOUD_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>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : '<STR_LIT>' , <EOL> } , <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>' : '<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> song_id = mobj . group ( '<STR_LIT:id>' ) <EOL> info_url = "<STR_LIT>" % song_id <EOL> info = self . _download_json ( info_url , song_id ) [ '<STR_LIT>' ] <EOL> song_url = info [ '<STR_LIT:url>' ] <EOL> if re . match ( self . _SOUNDCLOUD_URL , song_url ) is not None : <EOL> self . to_screen ( '<STR_LIT>' ) <EOL> return self . url_result ( song_url . replace ( '<STR_LIT>' , '<STR_LIT>' ) , '<STR_LIT>' ) <EOL> return { <EOL> '<STR_LIT:id>' : song_id , <EOL> '<STR_LIT:url>' : song_url , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : info [ '<STR_LIT:title>' ] , <EOL> '<STR_LIT>' : info [ '<STR_LIT:image>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : info [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : info [ '<STR_LIT>' ] , <EOL> } </s>
