[clyp] Add extractor
[youtube-dl] / youtube_dl / extractor / clyp.py
1 # coding: utf-8
2
3 from __future__ import unicode_literals
4
5 import re
6
7 from .common import InfoExtractor
8
9
10 class ClypIE(InfoExtractor):
11     _VALID_URL = r'https?://(?:www\.)?clyp\.it/(?P<id>[a-z0-9]+)'
12
13     _TESTS = [{
14         'url': 'https://clyp.it/ojz2wfah',
15         'md5': '1d4961036c41247ecfdcc439c0cddcbb',
16         'info_dict': {
17             'id': 'ojz2wfah',
18             'ext': 'mp3',
19             'title': 'Krisson80 - bits wip wip',
20             'description': '#Krisson80BitsWipWip #chiptune\n#wip',
21         },
22     }, {
23         'url': 'https://clyp.it/ojz2wfah',
24         'only_matching': True,
25     }]
26
27     def _real_extract(self, url):
28         audio_id = self._match_id(url)
29         api_url = 'https://api.clyp.it/' + audio_id
30         metadata = self._download_json(api_url, audio_id)
31
32         title = metadata['Title']
33
34         description = None
35         if metadata['Description']: description = metadata['Description']
36
37         duration = None
38         if metadata['Duration']: duration = int(metadata['Duration'])
39         
40         formats = [
41             {
42             'url': metadata['OggUrl'],
43             'format_id': 'ogg',
44             'preference': -2
45             },{
46             'url': metadata['Mp3Url'],
47             'format_id': 'mp3',
48             'preference': -1
49             }]
50
51         return {
52             'id': audio_id,
53             'title': title,
54             'formats': formats,
55             'description': description,
56             'duration': duration
57         }