]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/tapely.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  16 class TapelyIE(InfoExtractor
): 
  17     _VALID_URL 
= r
'https?://(?:www\.)?(?:tape\.ly|tapely\.com)/(?P<id>[A-Za-z0-9\-_]+)(?:/(?P<songnr>\d+))?' 
  18     _API_URL 
= 'http://tape.ly/showtape?id={0:}' 
  19     _S3_SONG_URL 
= 'http://mytape.s3.amazonaws.com/{0:}' 
  20     _SOUNDCLOUD_SONG_URL 
= 'http://api.soundcloud.com{0:}' 
  23             'url': 'http://tape.ly/my-grief-as-told-by-water', 
  26                 'title': 'my grief as told by water', 
  27                 'thumbnail': 're:^https?://.*\.png$', 
  29                 'timestamp': 1411848286, 
  30                 'description': 'For Robin and Ponkers, whom the tides of life have taken out to sea.', 
  35             'url': 'http://tape.ly/my-grief-as-told-by-water/1', 
  36             'md5': '79031f459fdec6530663b854cbc5715c', 
  39                 'title': 'Dreaming Awake  (My Brightest Diamond)', 
  44             'url': 'https://tapely.com/my-grief-as-told-by-water', 
  45             'only_matching': True, 
  49     def _real_extract(self
, url
): 
  50         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  51         display_id 
= mobj
.group('id') 
  53         playlist_url 
= self
._API
_URL
.format(display_id
) 
  54         request 
= sanitized_Request(playlist_url
) 
  55         request
.add_header('X-Requested-With', 'XMLHttpRequest') 
  56         request
.add_header('Accept', 'application/json') 
  57         request
.add_header('Referer', url
) 
  59         playlist 
= self
._download
_json
(request
, display_id
) 
  61         tape 
= playlist
['tape'] 
  64         for s 
in tape
['songs']: 
  68                 'duration': float_or_none(song
.get('songduration'), 1000), 
  69                 'title': song
['title'], 
  71             if song
['source'] == 'S3': 
  73                     'url': self
._S
3_SONG
_URL
.format(song
['filename']), 
  76             elif song
['source'] == 'YT': 
  77                 self
.to_screen('YouTube video detected') 
  78                 yt_id 
= song
['filename'].replace('/youtube/', '') 
  79                 entry
.update(self
.url_result(yt_id
, 'Youtube', video_id
=yt_id
)) 
  81             elif song
['source'] == 'SC': 
  82                 self
.to_screen('SoundCloud song detected') 
  83                 sc_url 
= self
._SOUNDCLOUD
_SONG
_URL
.format(song
['filename']) 
  84                 entry
.update(self
.url_result(sc_url
, 'Soundcloud')) 
  87                 self
.report_warning('Unknown song source: %s' % song
['source']) 
  89         if mobj
.group('songnr'): 
  90             songnr 
= int(mobj
.group('songnr')) - 1 
  92                 return entries
[songnr
] 
  95                     'No song with index: %s' % mobj
.group('songnr'), 
 101             'display_id': display_id
, 
 102             'title': tape
['name'], 
 104             'thumbnail': tape
.get('image_url'), 
 105             'description': clean_html(tape
.get('subtext')), 
 106             'like_count': tape
.get('likescount'), 
 107             'uploader_id': tape
.get('user_id'), 
 108             'timestamp': parse_iso8601(tape
.get('published_at')),