myvi.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # coding: utf-8
  2. from __future__ import unicode_literals
  3. import re
  4. from .vimple import SprutoBaseIE
  5. class MyviEmbedIE(SprutoBaseIE):
  6. _VALID_URL = r'''(?x)
  7. https?://
  8. myvi\.(?:ru/player|tv)/
  9. (?:
  10. (?:
  11. embed/html|
  12. api/Video/Get
  13. )/|
  14. content/preloader\.swf\?.*\bid=
  15. )
  16. (?P<id>[\da-zA-Z_]+)
  17. '''
  18. _TESTS = [{
  19. 'url': 'http://myvi.ru/player/embed/html/oOy4euHA6LVwNNAjhD9_Jq5Ha2Qf0rtVMVFMAZav8wObeRTZaCATzucDQIDph8hQU0',
  20. 'md5': '571bbdfba9f9ed229dc6d34cc0f335bf',
  21. 'info_dict': {
  22. 'id': 'f16b2bbd-cde8-481c-a981-7cd48605df43',
  23. 'ext': 'mp4',
  24. 'title': 'хозяин жизни',
  25. 'thumbnail': 're:^https?://.*\.jpg$',
  26. 'duration': 25,
  27. },
  28. }, {
  29. 'url': 'http://myvi.ru/player/content/preloader.swf?id=oOy4euHA6LVwNNAjhD9_Jq5Ha2Qf0rtVMVFMAZav8wOYf1WFpPfc_bWTKGVf_Zafr0',
  30. 'only_matching': True,
  31. }, {
  32. 'url': 'http://myvi.ru/player/api/Video/Get/oOy4euHA6LVwNNAjhD9_Jq5Ha2Qf0rtVMVFMAZav8wObeRTZaCATzucDQIDph8hQU0',
  33. 'only_matching': True,
  34. }, {
  35. 'url': 'http://myvi.tv/embed/html/oTGTNWdyz4Zwy_u1nraolwZ1odenTd9WkTnRfIL9y8VOgHYqOHApE575x4_xxS9Vn0?ap=0',
  36. 'only_matching': True,
  37. }]
  38. @classmethod
  39. def _extract_url(cls, webpage):
  40. mobj = re.search(
  41. r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//myvi\.(?:ru/player|tv)/embed/html/[^"]+)\1', webpage)
  42. if mobj:
  43. return mobj.group('url')
  44. def _real_extract(self, url):
  45. video_id = self._match_id(url)
  46. spruto = self._download_json(
  47. 'http://myvi.ru/player/api/Video/Get/%s?sig' % video_id, video_id)['sprutoData']
  48. return self._extract_spruto(spruto, video_id)