tass.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import json
  2. from .common import InfoExtractor
  3. from ..utils import (
  4. js_to_json,
  5. qualities,
  6. )
  7. class TassIE(InfoExtractor):
  8. _VALID_URL = r'https?://(?:tass\.ru|itar-tass\.com)/[^/]+/(?P<id>\d+)'
  9. _TESTS = [
  10. {
  11. 'url': 'http://tass.ru/obschestvo/1586870',
  12. 'md5': '3b4cdd011bc59174596b6145cda474a4',
  13. 'info_dict': {
  14. 'id': '1586870',
  15. 'ext': 'mp4',
  16. 'title': 'Посетителям московского зоопарка показали красную панду',
  17. 'description': 'Приехавшую из Дублина Зейну можно увидеть в павильоне "Кошки тропиков"',
  18. 'thumbnail': r're:^https?://.*\.jpg$',
  19. },
  20. },
  21. {
  22. 'url': 'http://itar-tass.com/obschestvo/1600009',
  23. 'only_matching': True,
  24. },
  25. ]
  26. def _real_extract(self, url):
  27. video_id = self._match_id(url)
  28. webpage = self._download_webpage(url, video_id)
  29. sources = json.loads(js_to_json(self._search_regex(
  30. r'(?s)sources\s*:\s*(\[.+?\])', webpage, 'sources')))
  31. quality = qualities(['sd', 'hd'])
  32. formats = []
  33. for source in sources:
  34. video_url = source.get('file')
  35. if not video_url or not video_url.startswith('http') or not video_url.endswith('.mp4'):
  36. continue
  37. label = source.get('label')
  38. formats.append({
  39. 'url': video_url,
  40. 'format_id': label,
  41. 'quality': quality(label),
  42. })
  43. return {
  44. 'id': video_id,
  45. 'title': self._og_search_title(webpage),
  46. 'description': self._og_search_description(webpage),
  47. 'thumbnail': self._og_search_thumbnail(webpage),
  48. 'formats': formats,
  49. }