1
0
mirror of https://codeberg.org/polarisfm/youtube-dl synced 2024-11-23 00:54:31 +01:00

[podlovepublisher] Add new extractor

This commit is contained in:
Jan Gampe 2019-01-18 14:26:27 +01:00
parent a017c0c469
commit b122f609c7
2 changed files with 62 additions and 30 deletions

View File

@ -3128,7 +3128,7 @@ class GenericIE(InfoExtractor):
podlove_url = PodlovePublisherIE._extract_url(webpage) podlove_url = PodlovePublisherIE._extract_url(webpage)
if podlove_url: if podlove_url:
return self.url_result(podlove_url) return self.url_result(podlove_url)
foxnews_urls = FoxNewsIE._extract_urls(webpage) foxnews_urls = FoxNewsIE._extract_urls(webpage)
if foxnews_urls: if foxnews_urls:
return self.playlist_from_matches( return self.playlist_from_matches(

View File

@ -6,54 +6,86 @@ import datetime
import time import time
import re import re
class PodlovePublisherIE(InfoExtractor): class PodlovePublisherIE(InfoExtractor):
_VALID_URL = r'''(?:https?:)?//.+?/?podlove_action=pwp4_config''' _VALID_URL = r'''(?:https?:)?//.+?/?podlove_action=pwp4_config'''
_TEST = { _TESTS = [{
'url': 'https://not-safe-for-work.de/nsfw099-kanzlerkind-sebastian/?podlove_action=pwp4_config', 'url': 'https://not-safe-for-work.de/nsfw099-kanzlerkind-sebastian/?podlove_action=pwp4_config',
'md5': '73ab53f3898e752f6db89b50c3b4658c', 'md5': 'b123c265e73b3cd814f052de5bbd21c3',
'info_dict': { 'info_dict': {
'id': 'NSFW099 Kanzlerkind Sebastian', 'id': 'NSFW099 Kanzlerkind Sebastian',
'ext': 'm4a', 'ext': 'mp3',
'title': 'NSFW099 Kanzlerkind Sebastian', 'title': 'NSFW099 Kanzlerkind Sebastian',
'description': 'Uuuuund da sind wir wieder, keine 10 Monate nachdem wir das letzte Mal gesendet haben. Und bedenkt, dass solche Sendezyklen im Kern gut für Euch sind. So oder so haben wir uns einiges zu erzählen, auch wenn wir zunehmend aus der alten Brachialität rauszuwachsen scheinen. Dafür mehr Blick in die Zeit und dann und wann auch ins Internet.', 'description': 'Uuuuund da sind wir wieder, keine 10 Monate nachdem wir das letzte Mal gesendet haben. Und bedenkt, dass solche Sendezyklen im Kern gut für Euch sind. So oder so haben wir uns einiges zu erzählen, auch wenn wir zunehmend aus der alten Brachialität rauszuwachsen scheinen. Dafür mehr Blick in die Zeit und dann und wann auch ins Internet.',
'duration': 11723 'duration': 11723,
# TODO more properties, either as: 'series': 'Not Safe For Work'
# * A value
# * MD5 checksum; start the string with md5:
# * A regular expression; start the string with re:
# * Any Python type (for example int or float)
} }
} }, {
'url': 'https://cre.fm/cre218-diamanten?podlove_action=pwp4_config',
'md5': 'a6251c173c01ee0447ce55ee7c63e8c8',
'info_dict': {
'id': 'CRE218 Diamanten',
'ext': 'mp3',
'title': 'CRE218 Diamanten',
'description': 'Diamanten faszinieren die Menschen und seit einem Jahrhundert symbolisieren sie Luxus und Perfektion wie kein anderes Material. Nachdem Diamanten zunächst nur aus der Erde gegraben wurden können Diamanten mit technischen Verfahren in sogar besserer Form hergestellt werden und spielen in Forschung und Industrie eine wichtige Rolle. Ich spreche mit Physiker und und Podcaster Reinhard Remfort über seinen persönlichen Weg zum Thema und über die Physik, Struktur, Eigenschaften und Anwendungen, die Diamanten heute ermöglichen und in Zukunft noch ermöglichen könnten.',
'duration': 10905,
'series': 'CRE: Technik, Kultur, Gesellschaft'
}
}, {
'url': 'http://einschlafen-podcast.de/podcast/ep-433-st-pauli-und-kant/?podlove_action=pwp4_config',
'md5': '5d4b0d463a647d564abe8ff8bcecc272',
'info_dict': {
'id': 'EP 433 ~ St. Pauli und Kant',
'ext': 'mp3',
'title': 'EP 433 ~ St. Pauli und Kant',
'description': 'Vor 200 (in Worten: zweihundert!) Episoden habe ich von einem Fussballspiel berichtet, bei dem zwei unserer langjährigen Spieler den FC St. Pauli verlassen haben. In Episode 233 ging es nämlich um das letzte Heimspiel von Marius Ebbers und Florian Bruns. Mein Hörer Berthold hatte mich auf diese Episode aufmerksam gemacht, und interessanterweise hat uns beim letzten Heimspiel wieder ein langjähriger Spieler verlassen: Bernd Nehrig. Und genau wie Bruns und Ebbers hat er in seinem letzten Spiel ein Tor gemacht! Was für eine Geschichte :)',
'duration': 3195,
'series': 'Einschlafen Podcast'
}
}]
@staticmethod @staticmethod
def _extract_url(webpage): def _extract_url(webpage):
mobj = re.search(r'(?:https?:)?//.+?/?podlove_action=pwp4_config',webpage) mobj = re.search(r'(?:https?:)?//.+?/?podlove_action=pwp4_config', webpage)
if mobj: if mobj:
return mobj.group(0) return mobj.group(0)
else: else:
return None return None
def _real_extract(self, url): def _real_extract(self, url):
player_data = self._download_json(url, None) player_data = self._download_json(url, None)
dur_ptime = time.strptime(player_data['duration'].split('.')[0],'%H:%M:%S')
duration_secs = datetime.timedelta(hours=dur_ptime.tm_hour,minutes=dur_ptime.tm_min,seconds=dur_ptime.tm_sec).total_seconds()
print(duration_secs) duration_secs = None
if 'duration' in player_data:
dur_ptime = time.strptime(player_data.get('duration').split('.')[0], '%H:%M:%S')
duration_secs = datetime.timedelta(hours=dur_ptime.tm_hour, minutes=dur_ptime.tm_min, seconds=dur_ptime.tm_sec).total_seconds()
formats = []
for audioformat in player_data.get('audio'):
result_format = {}
if 'url' not in audioformat:
# url is mandatory
continue
else:
result_format['url'] = audioformat.get('url')
if 'size' in audioformat:
result_format['filesize'] = int(audioformat['size'])
result_format['format_id'] = audioformat.get('mimeType')
result_format['format'] = audioformat.get('title')
formats.append(result_format)
self._sort_formats(formats)
return { return {
'id': player_data['title'], 'id': player_data.get('title'),
'title': player_data['title'], 'title': player_data.get('title'),
'description': player_data['summary'], 'episode': player_data.get('title'),
'filesize': int(player_data['audio'][0]['size']), 'description': player_data.get('summary'),
'url': player_data['audio'][0]['url'], 'formats': formats,
'duration': duration_secs 'duration': duration_secs,
# TODO more properties (see youtube_dl/extractor/common.py) 'series': player_data.get('show', {}).get('title')
} }