2014-01-30 21:48:00 +01:00
# encoding: utf-8
from __future__ import unicode_literals
import re
from . common import InfoExtractor
2014-02-10 15:07:41 +01:00
from . . utils import (
int_or_none ,
2014-02-28 16:52:06 +01:00
unified_strdate ,
ExtractorError ,
2014-02-10 15:07:41 +01:00
)
2014-01-30 21:48:00 +01:00
class LifeNewsIE ( InfoExtractor ) :
IE_NAME = ' lifenews '
IE_DESC = ' LIFE | NEWS '
_VALID_URL = r ' http://lifenews \ .ru/(?:mobile/)?news/(?P<id> \ d+) '
2014-02-10 15:07:41 +01:00
2015-05-03 19:24:19 +02:00
_TESTS = [ {
2014-01-30 21:48:00 +01:00
' url ' : ' http://lifenews.ru/news/126342 ' ,
' md5 ' : ' e1b50a5c5fb98a6a544250f2e0db570a ' ,
' info_dict ' : {
2014-02-10 15:07:41 +01:00
' id ' : ' 126342 ' ,
' ext ' : ' mp4 ' ,
2014-01-31 19:10:15 +01:00
' title ' : ' МВД разыскивает мужчин, оставивших в IKEA сумку с автоматом ' ,
2014-01-30 21:48:00 +01:00
' description ' : ' Камеры наблюдения гипермаркета зафиксировали троих мужчин, спрятавших оружейный арсенал в камере хранения. ' ,
2014-06-19 16:34:48 +02:00
' thumbnail ' : ' re:http://.* \ .jpg ' ,
2014-01-30 21:48:00 +01:00
' upload_date ' : ' 20140130 ' ,
}
2015-05-03 19:24:19 +02:00
} , {
# video in <iframe>
' url ' : ' http://lifenews.ru/news/152125 ' ,
' md5 ' : ' 77d19a6f0886cd76bdbf44b4d971a273 ' ,
' info_dict ' : {
' id ' : ' 152125 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' В Сети появилось видео захвата «Правым сектором» колхозных полей ' ,
' description ' : ' Жители двух поселков Днепропетровской области не простили радикалам угрозу лишения плодородных земель и пошли в лобовую. ' ,
' upload_date ' : ' 20150402 ' ,
' uploader ' : ' embed.life.ru ' ,
}
2015-05-05 17:39:54 +02:00
} , {
' url ' : ' http://lifenews.ru/news/153461 ' ,
' md5 ' : ' 9b6ef8bc0ffa25aebc8bdb40d89ab795 ' ,
' info_dict ' : {
' id ' : ' 153461 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' В Москве спасли потерявшегося медвежонка, который спрятался на дереве' ,
' description ' : ' Маленький хищник не смог найти дорогу домой и обрел временное убежище на тополе недалеко от жилого массива, пока е г о не нашла соседская собака. ' ,
' upload_date ' : ' 20150505 ' ,
' uploader ' : ' embed.life.ru ' ,
}
2015-05-03 19:24:19 +02:00
} ]
2014-01-30 21:48:00 +01:00
def _real_extract ( self , url ) :
mobj = re . match ( self . _VALID_URL , url )
video_id = mobj . group ( ' id ' )
2014-02-27 15:45:34 +01:00
webpage = self . _download_webpage ( ' http://lifenews.ru/news/ %s ' % video_id , video_id , ' Downloading page ' )
2014-01-30 21:48:00 +01:00
2014-02-28 16:52:06 +01:00
videos = re . findall ( r ' <video.*?poster= " (?P<poster>[^ " ]+) " .*?src= " (?P<video>[^ " ]+) " .*?></video> ' , webpage )
2015-05-03 19:24:19 +02:00
iframe_link = self . _html_search_regex (
' <iframe[^>]+src= " ([^ " ]+) ' , webpage , ' iframe link ' , default = None )
if not videos and not iframe_link :
2014-02-28 16:52:06 +01:00
raise ExtractorError ( ' No media links available for %s ' % video_id )
2014-01-30 21:48:00 +01:00
title = self . _og_search_title ( webpage )
TITLE_SUFFIX = ' - Первый по срочным новостям — LIFE | NEWS '
if title . endswith ( TITLE_SUFFIX ) :
title = title [ : - len ( TITLE_SUFFIX ) ]
description = self . _og_search_description ( webpage )
view_count = self . _html_search_regex (
2015-05-03 19:11:23 +02:00
r ' <div class= \' views \' > \ s*( \ d+) \ s*</div> ' , webpage , ' view count ' , fatal = False )
2014-01-30 21:48:00 +01:00
comment_count = self . _html_search_regex (
2015-05-03 19:11:23 +02:00
r ' <div class= \' comments \' > \ s*<span class= \' counter \' > \ s*( \ d+) \ s*</span> ' , webpage , ' comment count ' , fatal = False )
2014-01-30 21:48:00 +01:00
upload_date = self . _html_search_regex (
2014-11-23 20:41:03 +01:00
r ' <time datetime= \' ([^ \' ]+) \' > ' , webpage , ' upload date ' , fatal = False )
2014-02-10 15:07:41 +01:00
if upload_date is not None :
upload_date = unified_strdate ( upload_date )
2014-01-30 21:48:00 +01:00
2015-05-03 19:24:19 +02:00
common_info = {
' description ' : description ,
' view_count ' : int_or_none ( view_count ) ,
' comment_count ' : int_or_none ( comment_count ) ,
' upload_date ' : upload_date ,
}
2014-02-28 16:52:06 +01:00
def make_entry ( video_id , media , video_number = None ) :
2015-05-03 19:24:19 +02:00
cur_info = dict ( common_info )
cur_info . update ( {
2014-02-28 16:52:06 +01:00
' id ' : video_id ,
' url ' : media [ 1 ] ,
' thumbnail ' : media [ 0 ] ,
' title ' : title if video_number is None else ' %s -video %s ' % ( title , video_number ) ,
2015-05-03 19:24:19 +02:00
} )
return cur_info
if iframe_link :
2015-05-05 17:49:36 +02:00
iframe_link = self . _proto_relative_url ( iframe_link , ' http: ' )
2015-05-03 19:24:19 +02:00
cur_info = dict ( common_info )
cur_info . update ( {
' _type ' : ' url_transparent ' ,
' id ' : video_id ,
' title ' : title ,
' url ' : iframe_link ,
} )
return cur_info
2014-02-28 16:52:06 +01:00
if len ( videos ) == 1 :
return make_entry ( video_id , videos [ 0 ] )
else :
2014-11-23 21:23:05 +01:00
return [ make_entry ( video_id , media , video_number + 1 ) for video_number , media in enumerate ( videos ) ]