megaphone.py (1770B)
- # coding: utf-8
- from __future__ import unicode_literals
- import re
- from .common import InfoExtractor
- from ..utils import js_to_json
- class MegaphoneIE(InfoExtractor):
- IE_NAME = 'megaphone.fm'
- IE_DESC = 'megaphone.fm embedded players'
- _VALID_URL = r'https://player\.megaphone\.fm/(?P<id>[A-Z0-9]+)'
- _TEST = {
- 'url': 'https://player.megaphone.fm/GLT9749789991?"',
- 'md5': '4816a0de523eb3e972dc0dda2c191f96',
- 'info_dict': {
- 'id': 'GLT9749789991',
- 'ext': 'mp3',
- 'title': '#97 What Kind Of Idiot Gets Phished?',
- 'thumbnail': r're:^https://.*\.png.*$',
- 'duration': 1776.26375,
- 'author': 'Reply All',
- },
- }
- def _real_extract(self, url):
- video_id = self._match_id(url)
- webpage = self._download_webpage(url, video_id)
- title = self._og_search_property('audio:title', webpage)
- author = self._og_search_property('audio:artist', webpage)
- thumbnail = self._og_search_thumbnail(webpage)
- episode_json = self._search_regex(r'(?s)var\s+episode\s*=\s*(\{.+?\});', webpage, 'episode JSON')
- episode_data = self._parse_json(episode_json, video_id, js_to_json)
- video_url = self._proto_relative_url(episode_data['mediaUrl'], 'https:')
- formats = [{
- 'url': video_url,
- }]
- return {
- 'id': video_id,
- 'thumbnail': thumbnail,
- 'title': title,
- 'author': author,
- 'duration': episode_data['duration'],
- 'formats': formats,
- }
- @classmethod
- def _extract_urls(cls, webpage):
- return [m[0] for m in re.findall(
- r'<iframe[^>]*?\ssrc=["\'](%s)' % cls._VALID_URL, webpage)]