smotrim.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from .common import InfoExtractor
  2. from ..utils import ExtractorError
  3. class SmotrimIE(InfoExtractor):
  4. _VALID_URL = r'https?://smotrim\.ru/(?P<type>brand|video|article|live)/(?P<id>[0-9]+)'
  5. _TESTS = [{ # video
  6. 'url': 'https://smotrim.ru/video/1539617',
  7. 'md5': 'b1923a533c8cab09679789d720d0b1c5',
  8. 'info_dict': {
  9. 'id': '1539617',
  10. 'ext': 'mp4',
  11. 'title': 'Полиглот. Китайский с нуля за 16 часов! Урок №16',
  12. 'description': '',
  13. },
  14. 'add_ie': ['RUTV'],
  15. }, { # article (geo-restricted? plays fine from the US and JP)
  16. 'url': 'https://smotrim.ru/article/2813445',
  17. 'md5': 'e0ac453952afbc6a2742e850b4dc8e77',
  18. 'info_dict': {
  19. 'id': '2431846',
  20. 'ext': 'mp4',
  21. 'title': 'Новости культуры. Съёмки первой программы "Большие и маленькие"',
  22. 'description': 'md5:94a4a22472da4252bf5587a4ee441b99',
  23. },
  24. 'add_ie': ['RUTV'],
  25. }, { # brand, redirect
  26. 'url': 'https://smotrim.ru/brand/64356',
  27. 'md5': '740472999ccff81d7f6df79cecd91c18',
  28. 'info_dict': {
  29. 'id': '2354523',
  30. 'ext': 'mp4',
  31. 'title': 'Большие и маленькие. Лучшее. 4-й выпуск',
  32. 'description': 'md5:84089e834429008371ea41ea3507b989',
  33. },
  34. 'add_ie': ['RUTV'],
  35. }, { # live
  36. 'url': 'https://smotrim.ru/live/19201',
  37. 'info_dict': {
  38. 'id': '19201',
  39. 'ext': 'mp4',
  40. # this looks like a TV channel name
  41. 'title': 'Россия Культура. Прямой эфир',
  42. 'description': '',
  43. },
  44. 'add_ie': ['RUTV'],
  45. }]
  46. def _real_extract(self, url):
  47. video_id, typ = self._match_valid_url(url).group('id', 'type')
  48. rutv_type = 'video'
  49. if typ not in ('video', 'live'):
  50. webpage = self._download_webpage(url, video_id, f'Resolving {typ} link')
  51. # there are two cases matching regex:
  52. # 1. "embedUrl" in JSON LD (/brand/)
  53. # 2. "src" attribute from iframe (/article/)
  54. video_id = self._search_regex(
  55. r'"https://player.smotrim.ru/iframe/video/id/(?P<video_id>\d+)/',
  56. webpage, 'video_id', default=None)
  57. if not video_id:
  58. raise ExtractorError('There are no video in this page.', expected=True)
  59. elif typ == 'live':
  60. rutv_type = 'live'
  61. return self.url_result(f'https://player.vgtrk.com/iframe/{rutv_type}/id/{video_id}')