1 | # coding: utf-8 |
---|
2 | from __future__ import unicode_literals |
---|
3 | |
---|
4 | import re |
---|
5 | |
---|
6 | from .common import InfoExtractor |
---|
7 | from ..compat import compat_urllib_parse_unquote |
---|
8 | from ..utils import ( |
---|
9 | determine_ext, |
---|
10 | float_or_none, |
---|
11 | get_element_by_id, |
---|
12 | int_or_none, |
---|
13 | parse_iso8601, |
---|
14 | str_to_int, |
---|
15 | ) |
---|
16 | |
---|
17 | |
---|
18 | class IzleseneIE(InfoExtractor): |
---|
19 | _VALID_URL = r'''(?x) |
---|
20 | https?://(?:(?:www|m)\.)?izlesene\.com/ |
---|
21 | (?:video|embedplayer)/(?:[^/]+/)?(?P<id>[0-9]+) |
---|
22 | ''' |
---|
23 | _TESTS = [ |
---|
24 | { |
---|
25 | 'url': 'http://www.izlesene.com/video/sevincten-cildirtan-dogum-gunu-hediyesi/7599694', |
---|
26 | 'md5': '4384f9f0ea65086734b881085ee05ac2', |
---|
27 | 'info_dict': { |
---|
28 | 'id': '7599694', |
---|
29 | 'ext': 'mp4', |
---|
30 | 'title': 'Sevinçten Çıldırtan Doğum Günü Hediyesi', |
---|
31 | 'description': 'md5:253753e2655dde93f59f74b572454f6d', |
---|
32 | 'thumbnail': r're:^https?://.*\.jpg', |
---|
33 | 'uploader_id': 'pelikzzle', |
---|
34 | 'timestamp': int, |
---|
35 | 'upload_date': '20140702', |
---|
36 | 'duration': 95.395, |
---|
37 | 'age_limit': 0, |
---|
38 | } |
---|
39 | }, |
---|
40 | { |
---|
41 | 'url': 'http://www.izlesene.com/video/tarkan-dortmund-2006-konseri/17997', |
---|
42 | 'md5': '97f09b6872bffa284cb7fa4f6910cb72', |
---|
43 | 'info_dict': { |
---|
44 | 'id': '17997', |
---|
45 | 'ext': 'mp4', |
---|
46 | 'title': 'Tarkan Dortmund 2006 Konseri', |
---|
47 | 'thumbnail': r're:^https://.*\.jpg', |
---|
48 | 'uploader_id': 'parlayankiz', |
---|
49 | 'timestamp': int, |
---|
50 | 'upload_date': '20061112', |
---|
51 | 'duration': 253.666, |
---|
52 | 'age_limit': 0, |
---|
53 | } |
---|
54 | }, |
---|
55 | ] |
---|
56 | |
---|
57 | def _real_extract(self, url): |
---|
58 | video_id = self._match_id(url) |
---|
59 | |
---|
60 | url = 'http://www.izlesene.com/video/%s' % video_id |
---|
61 | webpage = self._download_webpage(url, video_id) |
---|
62 | |
---|
63 | title = self._og_search_title(webpage) |
---|
64 | description = self._og_search_description(webpage, default=None) |
---|
65 | thumbnail = self._proto_relative_url( |
---|
66 | self._og_search_thumbnail(webpage), scheme='http:') |
---|
67 | |
---|
68 | uploader = self._html_search_regex( |
---|
69 | r"adduserUsername\s*=\s*'([^']+)';", |
---|
70 | webpage, 'uploader', fatal=False) |
---|
71 | timestamp = parse_iso8601(self._html_search_meta( |
---|
72 | 'uploadDate', webpage, 'upload date')) |
---|
73 | |
---|
74 | duration = float_or_none(self._html_search_regex( |
---|
75 | r'"videoduration"\s*:\s*"([^"]+)"', |
---|
76 | webpage, 'duration', fatal=False), scale=1000) |
---|
77 | |
---|
78 | view_count = str_to_int(get_element_by_id('videoViewCount', webpage)) |
---|
79 | comment_count = self._html_search_regex( |
---|
80 | r'comment_count\s*=\s*\'([^\']+)\';', |
---|
81 | webpage, 'comment_count', fatal=False) |
---|
82 | |
---|
83 | content_url = self._html_search_meta( |
---|
84 | 'contentURL', webpage, 'content URL', fatal=False) |
---|
85 | ext = determine_ext(content_url, 'mp4') |
---|
86 | |
---|
87 | # Might be empty for some videos. |
---|
88 | streams = self._html_search_regex( |
---|
89 | r'"qualitylevel"\s*:\s*"([^"]+)"', webpage, 'streams', default='') |
---|
90 | |
---|
91 | formats = [] |
---|
92 | if streams: |
---|
93 | for stream in streams.split('|'): |
---|
94 | quality, url = re.search(r'\[(\w+)\](.+)', stream).groups() |
---|
95 | formats.append({ |
---|
96 | 'format_id': '%sp' % quality if quality else 'sd', |
---|
97 | 'url': compat_urllib_parse_unquote(url), |
---|
98 | 'ext': ext, |
---|
99 | }) |
---|
100 | else: |
---|
101 | stream_url = self._search_regex( |
---|
102 | r'"streamurl"\s*:\s*"([^"]+)"', webpage, 'stream URL') |
---|
103 | formats.append({ |
---|
104 | 'format_id': 'sd', |
---|
105 | 'url': compat_urllib_parse_unquote(stream_url), |
---|
106 | 'ext': ext, |
---|
107 | }) |
---|
108 | |
---|
109 | return { |
---|
110 | 'id': video_id, |
---|
111 | 'title': title, |
---|
112 | 'description': description, |
---|
113 | 'thumbnail': thumbnail, |
---|
114 | 'uploader_id': uploader, |
---|
115 | 'timestamp': timestamp, |
---|
116 | 'duration': duration, |
---|
117 | 'view_count': int_or_none(view_count), |
---|
118 | 'comment_count': int_or_none(comment_count), |
---|
119 | 'age_limit': self._family_friendly_search(webpage), |
---|
120 | 'formats': formats, |
---|
121 | } |
---|