]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/beatport.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   7 from ..compat 
import compat_str
 
   8 from ..utils 
import int_or_none
 
  11 class BeatportIE(InfoExtractor
): 
  12     _VALID_URL 
= r
'https?://(?:www\.|pro\.)?beatport\.com/track/(?P<display_id>[^/]+)/(?P<id>[0-9]+)' 
  14         'url': 'https://beatport.com/track/synesthesia-original-mix/5379371', 
  15         'md5': 'b3c34d8639a2f6a7f734382358478887', 
  18             'display_id': 'synesthesia-original-mix', 
  20             'title': 'Froxic - Synesthesia (Original Mix)', 
  23         'url': 'https://beatport.com/track/love-and-war-original-mix/3756896', 
  24         'md5': 'e44c3025dfa38c6577fbaeb43da43514', 
  27             'display_id': 'love-and-war-original-mix', 
  29             'title': 'Wolfgang Gartner - Love & War (Original Mix)', 
  32         'url': 'https://beatport.com/track/birds-original-mix/4991738', 
  33         'md5': 'a1fd8e8046de3950fd039304c186c05f', 
  36             'display_id': 'birds-original-mix', 
  38             'title': "Tos, Middle Milk, Mumblin' Johnsson - Birds (Original Mix)", 
  42     def _real_extract(self
, url
): 
  43         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  44         track_id 
= mobj
.group('id') 
  45         display_id 
= mobj
.group('display_id') 
  47         webpage 
= self
._download
_webpage
(url
, display_id
) 
  49         playables 
= self
._parse
_json
( 
  51                 r
'window\.Playables\s*=\s*({.+?});', webpage
, 
  52                 'playables info', flags
=re
.DOTALL
), 
  55         track 
= next(t 
for t 
in playables
['tracks'] if t
['id'] == int(track_id
)) 
  57         title 
= ', '.join((a
['name'] for a 
in track
['artists'])) + ' - ' + track
['name'] 
  59             title 
+= ' (' + track
['mix'] + ')' 
  62         for ext
, info 
in track
['preview'].items(): 
  82         self
._sort
_formats
(formats
) 
  85         for name
, info 
in track
['images'].items(): 
  86             image_url 
= info
.get('url') 
  87             if name 
== 'dynamic' or not image_url
: 
  92                 'height': int_or_none(info
.get('height')), 
  93                 'width': int_or_none(info
.get('width')), 
  98             'id': compat_str(track
.get('id')) or track_id
, 
  99             'display_id': track
.get('slug') or display_id
, 
 102             'thumbnails': images
,