]>
 
 
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/lifenews.py 
 
 
 
 
 
 
 
 
   2  from  __future__ 
import  unicode_literals
 
   6  from  . common 
import  InfoExtractor
 
  20  class  LifeNewsIE ( InfoExtractor
):  
  23      _VALID_URL 
=  r
'https?://life\.ru/t/[^/]+/(?P<id>\d+)'  
  26          # single video embedded via video/source  
  27          'url' :  'https://life.ru/t/новости/98736' ,  
  28          'md5' :  '77c95eaefaca216e32a76a343ad89d23' ,  
  32              'title' :  'Мужчина нашел дома архив оборонного завода' ,  
  33              'description' :  'md5:3b06b1b39b5e2bea548e403d99b8bf26' ,  
  34              'timestamp' :  1344154740 ,  
  35              'upload_date' :  '20120805' ,  
  39          # single video embedded via iframe  
  40          'url' :  'https://life.ru/t/новости/152125' ,  
  41          'md5' :  '77d19a6f0886cd76bdbf44b4d971a273' ,  
  45              'title' :  'В Сети появилось видео захвата «Правым сектором» колхозных полей ' ,  
  46              'description' :  'Жители двух поселков Днепропетровской области не простили радикалам угрозу лишения плодородных земель и пошли в лобовую. ' ,  
  47              'timestamp' :  1427961840 ,  
  48              'upload_date' :  '20150402' ,  
  52          # two videos embedded via iframe  
  53          'url' :  'https://life.ru/t/новости/153461' ,  
  56              'title' :  'В Москве спасли потерявшегося медвежонка, который спрятался на дереве' ,  
  57              'description' :  'Маленький хищник не смог найти дорогу домой и обрел временное убежище на тополе недалеко от жилого массива, пока его не нашла соседская собака.' ,  
  58              'timestamp' :  1430825520 ,  
  62              'md5' :  '9b6ef8bc0ffa25aebc8bdb40d89ab795' ,  
  64                  'id' :  '153461-video1' ,  
  66                  'title' :  'В Москве спасли потерявшегося медвежонка, который спрятался на дереве (Видео 1)' ,  
  67                  'description' :  'Маленький хищник не смог найти дорогу домой и обрел временное убежище на тополе недалеко от жилого массива, пока его не нашла соседская собака.' ,  
  68                  'timestamp' :  1430825520 ,  
  69                  'upload_date' :  '20150505' ,  
  72              'md5' :  'ebb3bf3b1ce40e878d0d628e93eb0322' ,  
  74                  'id' :  '153461-video2' ,  
  76                  'title' :  'В Москве спасли потерявшегося медвежонка, который спрятался на дереве (Видео 2)' ,  
  77                  'description' :  'Маленький хищник не смог найти дорогу домой и обрел временное убежище на тополе недалеко от жилого массива, пока его не нашла соседская собака.' ,  
  78                  'timestamp' :  1430825520 ,  
  79                  'upload_date' :  '20150505' ,  
  83          'url' :  'https://life.ru/t/новости/213035' ,  
  84          'only_matching' :  True ,  
  86          'url' :  'https://life.ru/t/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/153461' ,  
  87          'only_matching' :  True ,  
  89          'url' :  'https://life.ru/t/новости/411489/manuel_vals_nazval_frantsiiu_tsieliu_nomier_odin_dlia_ighil' ,  
  90          'only_matching' :  True ,  
  93      def  _real_extract ( self
,  url
):  
  94          video_id 
=  self
._ match
_ id
( url
)  
  96          webpage 
=  self
._ download
_ webpage
( url
,  video_id
)  
  98          video_urls 
=  re
. findall (  
  99              r
'<video[^>]+><source[^>]+src=["\' ](.+ ?
)[ " \' ]', webpage)  
 101          iframe_links = re.findall(  
 102              r'<iframe[^>]+src=[" \' ](( ?
: https?
:) ?
// embed\
. life\
. ru
/( ?
: embed|video
)/.+ ?
)[ " \' ]',  
 105          if not video_urls and not iframe_links:  
 106              raise ExtractorError('No media links available for  %s ' % video_id)  
 109              self._og_search_title(webpage),  
 112          description = self._og_search_description(webpage)  
 114          view_count = self._html_search_regex(  
 115              r'<div[^>]+class=([" \' ]).* ?
\b hits
- count
\b .* ?\
1 [ ^
>]*> \s
*( ?P
< value
> \d
+) \s
*</ div
> ',  
 116              webpage, ' view count
', fatal=False, group=' value
')  
 118          timestamp = parse_iso8601(self._search_regex(  
 119              r' < time
[ ^
>]+ datetime
=([ " \' ])(?P<value>.+?)\1',  
 120              webpage, 'upload date', fatal=False, group='value'))  
 123              'description': description,  
 124              'view_count': int_or_none(view_count),  
 125              'timestamp': timestamp,  
 128          def make_entry(video_id, video_url, index=None):  
 129              cur_info = dict(common_info)  
 131                  'id': video_id if not index else ' %s- video %s ' % (video_id, index),  
 133                  'title': title if not index else ' %s  (Видео  %s )' % (title, index),  
 137          def make_video_entry(video_id, video_url, index=None):  
 138              video_url = compat_urlparse.urljoin(url, video_url)  
 139              return make_entry(video_id, video_url, index)  
 141          def make_iframe_entry(video_id, video_url, index=None):  
 142              video_url = self._proto_relative_url(video_url, 'http:')  
 143              cur_info = make_entry(video_id, video_url, index)  
 144              cur_info['_type'] = 'url_transparent'  
 147          if len(video_urls) == 1 and not iframe_links:  
 148              return make_video_entry(video_id, video_urls[0])  
 150          if len(iframe_links) == 1 and not video_urls:  
 151              return make_iframe_entry(video_id, iframe_links[0])  
 156              for num, video_url in enumerate(video_urls, 1):  
 157                  entries.append(make_video_entry(video_id, video_url, num))  
 160              for num, iframe_link in enumerate(iframe_links, len(video_urls) + 1):  
 161                  entries.append(make_iframe_entry(video_id, iframe_link, num))  
 163          playlist = common_info.copy()  
 164          playlist.update(self.playlist_result(entries, video_id, title, description))  
 168  class LifeEmbedIE(InfoExtractor):  
 169      IE_NAME = 'life:embed'  
 170      _VALID_URL = r'https?://embed\.life\.ru/(?:embed|video)/(?P<id>[\da-f] {32} )'  
 173          'url': 'http://embed.life.ru/embed/e50c2dec2867350528e2574c899b8291',  
 174          'md5': 'b889715c9e49cb1981281d0e5458fbbe',  
 176              'id': 'e50c2dec2867350528e2574c899b8291',  
 178              'title': 'e50c2dec2867350528e2574c899b8291',  
 179              'thumbnail': 're:http://.*\.jpg',  
 183          'url': 'https://embed.life.ru/video/e50c2dec2867350528e2574c899b8291',  
 184          'only_matching': True,  
 187      def _real_extract(self, url):  
 188          video_id = self._match_id(url)  
 190          webpage = self._download_webpage(url, video_id)  
 195          def extract_m3u8(manifest_url):  
 196              formats.extend(self._extract_m3u8_formats(  
 197                  manifest_url, video_id, 'mp4',  
 198                  entry_protocol='m3u8_native', m3u8_id='m3u8'))  
 200          def extract_original(original_url):  
 203                  'format_id': determine_ext(original_url, None),  
 207          playlist = self._parse_json(  
 209                  r'options\s*=\s*({.+?});', webpage, 'options', default='{}'),  
 210              video_id).get('playlist', {})  
 212              master = playlist.get('master')  
 213              if isinstance(master, compat_str) and determine_ext(master) == 'm3u8':  
 214                  extract_m3u8(compat_urlparse.urljoin(url, master))  
 215              original = playlist.get('original')  
 216              if isinstance(original, compat_str):  
 217                  extract_original(original)  
 218              thumbnail = playlist.get('image')  
 220          # Old rendition fallback  
 222              for video_url in re.findall(r'" file "\s*:\s*" ([ ^
"]+)', webpage):  
 223                  video_url = compat_urlparse.urljoin(url, video_url)  
 224                  if determine_ext(video_url) == 'm3u8':  
 225                      extract_m3u8(video_url)  
 227                      extract_original(video_url)  
 229          self._sort_formats(formats)  
 231          thumbnail = thumbnail or self._search_regex(  
 232              r'" image
"\s*:\s*" ([ ^
"]+)', webpage, 'thumbnail', default=None)  
 237              'thumbnail': thumbnail,