[nuevo] Generalize nuevo extractor and add support for trollvids
[youtube-dl] / youtube_dl / extractor / trollvids.py
1 # encoding: utf-8
2 from __future__ import unicode_literals
3
4 from .nuevo import NuevoBaseIE
5
6 from ..compat import (
7     compat_urllib_parse_unquote
8 )
9
10 import re
11
12
13 class TrollvidsIE(NuevoBaseIE):
14     _VALID_URL = r'http://(?:www\.)?trollvids\.com/+video/+(?P<id>[0-9]+)/+(?P<title>[^?&]+)'
15     IE_NAME = 'trollvids'
16
17     def _real_extract(self, url):
18         match = re.match(self._VALID_URL, url)
19
20         video_id = match.group('id')
21         raw_video_title = match.group('title')
22         url = 'http://trollvids.com/video/%s/%s' % (video_id, raw_video_title)
23         config_url = 'http://trollvids.com/nuevo/player/config.php?v=%s' % video_id
24
25         info = self._extract_nuevo(config_url, video_id)
26
27         info.update({
28             'webpage_url': url,
29             'age_limit': 18
30         })
31
32         if 'title' not in info:
33             info['title'] = compat_urllib_parse_unquote(raw_video_title)
34
35         return info
36
37     _TESTS = [
38         {
39             'url': 'http://trollvids.com/video/2349002/%E3%80%90MMD-R-18%E3%80%91%E3%82%AC%E3%83%BC%E3%83%AB%E3%83%95%E3%83%AC%E3%83%B3%E3%83%89-carrymeoff',
40             'md5': '1d53866b2c514b23ed69e4352fdc9839',
41             'info_dict': {
42                 'id': '2349002',
43                 'ext': 'mp4',
44                 'title': "【MMD R-18】ガールフレンド carry_me_off",
45                 'age_limit': 18,
46                 'duration': 216.78,
47             },
48         },
49     ]