2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   7 from ..compat 
import compat_urlparse
 
  17 class LifeNewsIE(InfoExtractor
): 
  19     IE_DESC 
= 'LIFE | NEWS' 
  20     _VALID_URL 
= r
'http://lifenews\.ru/(?:mobile/)?(?P<section>news|video)/(?P<id>\d+)' 
  23         'url': 'http://lifenews.ru/news/126342', 
  24         'md5': 'e1b50a5c5fb98a6a544250f2e0db570a', 
  28             'title': 'МВД разыскивает мужчин, оставивших в IKEA сумку с автоматом', 
  29             'description': 'Камеры наблюдения гипермаркета зафиксировали троих мужчин, спрятавших оружейный арсенал в камере хранения.', 
  30             'thumbnail': 're:http://.*\.jpg', 
  31             'upload_date': '20140130', 
  35         'url': 'http://lifenews.ru/news/152125', 
  36         'md5': '77d19a6f0886cd76bdbf44b4d971a273', 
  40             'title': 'В Сети появилось видео захвата «Правым сектором» колхозных полей ', 
  41             'description': 'Жители двух поселков Днепропетровской области не простили радикалам угрозу лишения плодородных земель и пошли в лобовую. ', 
  42             'upload_date': '20150402', 
  45         'url': 'http://lifenews.ru/news/153461', 
  46         'md5': '9b6ef8bc0ffa25aebc8bdb40d89ab795', 
  50             'title': 'В Москве спасли потерявшегося медвежонка, который спрятался на дереве', 
  51             'description': 'Маленький хищник не смог найти дорогу домой и обрел временное убежище на тополе недалеко от жилого массива, пока его не нашла соседская собака.', 
  52             'upload_date': '20150505', 
  55         'url': 'http://lifenews.ru/video/13035', 
  56         'only_matching': True, 
  59     def _real_extract(self
, url
): 
  60         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  61         video_id 
= mobj
.group('id') 
  62         section 
= mobj
.group('section') 
  64         webpage 
= self
._download
_webpage
( 
  65             'http://lifenews.ru/%s/%s' % (section
, video_id
), 
  66             video_id
, 'Downloading page') 
  68         videos 
= re
.findall(r
'<video.*?poster="(?P<poster>[^"]+)".*?src="(?P<video>[^"]+)".*?></video>', webpage
) 
  69         iframe_link 
= self
._html
_search
_regex
( 
  70             '<iframe[^>]+src=["\']([^"\']+)["\']', webpage
, 'iframe link', default
=None) 
  71         if not videos 
and not iframe_link
: 
  72             raise ExtractorError('No media links available for %s' % video_id
) 
  75             self
._og
_search
_title
(webpage
), 
  76             ' - Первый по срочным новостям — LIFE | NEWS') 
  78         description 
= self
._og
_search
_description
(webpage
) 
  80         view_count 
= self
._html
_search
_regex
( 
  81             r
'<div class=\'views
\'>\s
*(\d
+)\s
*</div
>', webpage, 'view count
', fatal=False) 
  82         comment_count = self._html_search_regex( 
  83             r'=\'commentCount
\'[^
>]*>\s
*(\d
+)\s
*<', 
  84             webpage, 'comment count
', fatal=False) 
  86         upload_date = self._html_search_regex( 
  87             r'<time
[^
>]*datetime
=\'([^
\']+)\'', webpage, 'upload date
', fatal=False) 
  88         if upload_date is not None: 
  89             upload_date = unified_strdate(upload_date) 
  92             'description
': description, 
  93             'view_count
': int_or_none(view_count), 
  94             'comment_count
': int_or_none(comment_count), 
  95             'upload_date
': upload_date, 
  98         def make_entry(video_id, media, video_number=None): 
  99             cur_info = dict(common_info) 
 103                 'thumbnail
': media[0], 
 104                 'title
': title if video_number is None else '%s-video
%s' % (title, video_number), 
 109             iframe_link = self._proto_relative_url(iframe_link, 'http
:') 
 110             cur_info = dict(common_info) 
 112                 '_type
': 'url_transparent
', 
 120             return make_entry(video_id, videos[0]) 
 122             return [make_entry(video_id, media, video_number + 1) for video_number, media in enumerate(videos)] 
 125 class LifeEmbedIE(InfoExtractor): 
 126     IE_NAME = 'life
:embed
' 
 127     _VALID_URL = r'http
://embed\
.life\
.ru
/embed
/(?P
<id>[\da
-f
]{32}
)' 
 130         'url
': 'http
://embed
.life
.ru
/embed
/e50c2dec2867350528e2574c899b8291
', 
 131         'md5
': 'b889715c9e49cb1981281d0e5458fbbe
', 
 133             'id': 'e50c2dec2867350528e2574c899b8291
', 
 135             'title
': 'e50c2dec2867350528e2574c899b8291
', 
 136             'thumbnail
': 're
:http
://.*\
.jpg
', 
 140     def _real_extract(self, url): 
 141         video_id = self._match_id(url) 
 143         webpage = self._download_webpage(url, video_id) 
 146         for video_url in re.findall(r'"file"\s
*:\s
*"([^"]+)', webpage): 
 147             video_url = compat_urlparse.urljoin(url, video_url) 
 148             ext = determine_ext(video_url) 
 150                 formats.extend(self._extract_m3u8_formats( 
 151                     video_url, video_id, 'mp4
', m3u8_id='m3u8
')) 
 158         self._sort_formats(formats) 
 160         thumbnail = self._search_regex( 
 161             r'"image"\s
*:\s
*"([^"]+)', webpage, 'thumbnail
', default=None) 
 166             'thumbnail
': thumbnail,