godtv.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from __future__ import unicode_literals
  2. from .common import InfoExtractor
  3. from .ooyala import OoyalaIE
  4. from ..utils import js_to_json
  5. class GodTVIE(InfoExtractor):
  6. _VALID_URL = r'https?://(?:www\.)?god\.tv(?:/[^/]+)+/(?P<id>[^/?#&]+)'
  7. _TESTS = [{
  8. 'url': 'http://god.tv/jesus-image/video/jesus-conference-2016/randy-needham',
  9. 'info_dict': {
  10. 'id': 'lpd3g2MzE6D1g8zFAKz8AGpxWcpu6o_3',
  11. 'ext': 'mp4',
  12. 'title': 'Randy Needham',
  13. 'duration': 3615.08,
  14. },
  15. 'params': {
  16. 'skip_download': True,
  17. }
  18. }, {
  19. 'url': 'http://god.tv/playlist/bible-study',
  20. 'info_dict': {
  21. 'id': 'bible-study',
  22. },
  23. 'playlist_mincount': 37,
  24. }]
  25. def _real_extract(self, url):
  26. display_id = self._match_id(url)
  27. webpage = self._download_webpage(url, display_id)
  28. settings = self._parse_json(
  29. self._search_regex(
  30. r'jQuery\.extend\(Drupal\.settings\s*,\s*({.+?})\);',
  31. webpage, 'settings', default='{}'),
  32. display_id, transform_source=js_to_json, fatal=False)
  33. ooyala_id = None
  34. if settings:
  35. playlist = settings.get('playlist')
  36. if playlist and isinstance(playlist, list):
  37. entries = [
  38. OoyalaIE._build_url_result(video['content_id'])
  39. for video in playlist if video.get('content_id')]
  40. if entries:
  41. return self.playlist_result(entries, display_id)
  42. ooyala_id = settings.get('ooyala', {}).get('content_id')
  43. if not ooyala_id:
  44. ooyala_id = self._search_regex(
  45. r'["\']content_id["\']\s*:\s*(["\'])(?P<id>[\w-]+)\1',
  46. webpage, 'ooyala id', group='id')
  47. return OoyalaIE._build_url_result(ooyala_id)