[gamestar] Add new extractor
[youtube-dl] / youtube_dl / extractor / gamestar.py
1 # coding: utf-8
2 from __future__ import unicode_literals
3
4 import re
5
6 from .common import InfoExtractor
7
8 class GameStarIE(InfoExtractor):
9     _VALID_URL = r'http://www\.gamestar\.de/videos/.*,(?P<id>[0-9]+)\.html'
10     _TEST = {
11         'url': 'http://www.gamestar.de/videos/trailer,3/hobbit-3-die-schlacht-der-fuenf-heere,76110.html',
12         'md5': '96974ecbb7fd8d0d20fca5a00810cea7',
13         'info_dict': {
14             'id': '76110',
15             'ext': 'mp4',
16             'title': 'Hobbit 3: Die Schlacht der Fünf Heere - Teaser-Trailer zum dritten Teil',
17             'description': 'Der Teaser-Trailer zu Hobbit 3: Die Schlacht der Fünf Heere zeigt einige Szenen aus dem dritten Teil der Saga und kündigt den vollständigen Trailer an.',
18             'thumbnail': 'http://images.gamestar.de/images/idgwpgsgp/bdb/2494525/600x.jpg',
19             'upload_date': '20140728',
20             'duration': 17
21         }
22     }
23
24     def _real_extract(self, url):
25         mobj = re.match(self._VALID_URL, url)
26         video_id = mobj.group('id')
27
28         webpage = self._download_webpage(url, video_id)
29
30         og_title = self._og_search_title(webpage)
31         title = og_title.replace(' - Video bei GameStar.de', '').strip()
32
33         url = 'http://gamestar.de/_misc/videos/portal/getVideoUrl.cfm?premium=0&videoId=' + video_id
34
35         description = self._og_search_description(webpage).strip()
36
37         og_thumbnail = self._og_search_thumbnail(webpage)
38         thumbnail = 'http:' + og_thumbnail
39
40         upload_date_raw = self._html_search_regex(
41             r'<span style="float:left;font-size:11px;">Datum: ([0-9]+\.[0-9]+\.[0-9]+)&nbsp;&nbsp;',
42             webpage, 'upload_date').split('.')
43         upload_date = upload_date_raw[2] + upload_date_raw[1] + upload_date_raw[0]
44
45         duration_raw = self._html_search_regex(
46             r'&nbsp;&nbsp;Länge: ([0-9]+:[0-9]+)</span>', webpage, 'duration').split(':')
47         duration = int(duration_raw[0])*60 + int(duration_raw[1])
48
49         view_count_raw = self._html_search_regex(
50             r'&nbsp;&nbsp;Zuschauer: ([0-9\.]+)&nbsp;&nbsp;', webpage, 'view_count')
51         view_count = int(view_count_raw.replace('.', ''))
52
53         comment_count_raw = self._html_search_regex(
54             r'>Kommentieren \(([0-9]+)\)</a>', webpage, 'comment_count')
55         comment_count = int(comment_count_raw)
56
57         return {
58             'id': video_id,
59             'title': title,
60             'url': url,
61             'ext': 'mp4',
62             'thumbnail': thumbnail,
63             'description': description,
64             'upload_date': upload_date,
65             'duration': duration,
66             'view_count': view_count,
67             'comment_count': comment_count
68         }