mojvideo.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from .common import InfoExtractor
  2. from ..utils import (
  3. ExtractorError,
  4. parse_duration,
  5. )
  6. class MojvideoIE(InfoExtractor):
  7. _VALID_URL = r'https?://(?:www\.)?mojvideo\.com/video-(?P<display_id>[^/]+)/(?P<id>[a-f0-9]+)'
  8. _TEST = {
  9. 'url': 'http://www.mojvideo.com/video-v-avtu-pred-mano-rdecelaska-alfi-nipic/3d1ed4497707730b2906',
  10. 'md5': 'f7fd662cc8ce2be107b0d4f2c0483ae7',
  11. 'info_dict': {
  12. 'id': '3d1ed4497707730b2906',
  13. 'display_id': 'v-avtu-pred-mano-rdecelaska-alfi-nipic',
  14. 'ext': 'mp4',
  15. 'title': 'V avtu pred mano rdečelaska - Alfi Nipič',
  16. 'thumbnail': r're:^http://.*\.jpg$',
  17. 'duration': 242,
  18. },
  19. }
  20. def _real_extract(self, url):
  21. mobj = self._match_valid_url(url)
  22. video_id = mobj.group('id')
  23. display_id = mobj.group('display_id')
  24. # XML is malformed
  25. playerapi = self._download_webpage(
  26. f'http://www.mojvideo.com/playerapi.php?v={video_id}&t=1', display_id)
  27. if '<error>true</error>' in playerapi:
  28. error_desc = self._html_search_regex(
  29. r'<errordesc>([^<]*)</errordesc>', playerapi, 'error description', fatal=False)
  30. raise ExtractorError(f'{self.IE_NAME} said: {error_desc}', expected=True)
  31. title = self._html_extract_title(playerapi)
  32. video_url = self._html_search_regex(
  33. r'<file>([^<]+)</file>', playerapi, 'video URL')
  34. thumbnail = self._html_search_regex(
  35. r'<preview>([^<]+)</preview>', playerapi, 'thumbnail', fatal=False)
  36. duration = parse_duration(self._html_search_regex(
  37. r'<duration>([^<]+)</duration>', playerapi, 'duration', fatal=False))
  38. return {
  39. 'id': video_id,
  40. 'display_id': display_id,
  41. 'url': video_url,
  42. 'title': title,
  43. 'thumbnail': thumbnail,
  44. 'duration': duration,
  45. }