mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[orf] Move all ORF extractors in one place
This commit is contained in:
		| @@ -96,7 +96,6 @@ from .fktv import ( | |||||||
|     FKTVPosteckeIE, |     FKTVPosteckeIE, | ||||||
| ) | ) | ||||||
| from .flickr import FlickrIE | from .flickr import FlickrIE | ||||||
| from .fm4 import FM4IE |  | ||||||
| from .fourtube import FourTubeIE | from .fourtube import FourTubeIE | ||||||
| from .franceculture import FranceCultureIE | from .franceculture import FranceCultureIE | ||||||
| from .franceinter import FranceInterIE | from .franceinter import FranceInterIE | ||||||
| @@ -226,9 +225,12 @@ from .nrk import ( | |||||||
| from .ntv import NTVIE | from .ntv import NTVIE | ||||||
| from .nytimes import NYTimesIE | from .nytimes import NYTimesIE | ||||||
| from .nuvid import NuvidIE | from .nuvid import NuvidIE | ||||||
| from .oe1 import OE1IE |  | ||||||
| from .ooyala import OoyalaIE | from .ooyala import OoyalaIE | ||||||
| from .orf import ORFIE | from .orf import ( | ||||||
|  |     ORFTVthekIE, | ||||||
|  |     ORFOE1IE, | ||||||
|  |     ORFFM4IE, | ||||||
|  | ) | ||||||
| from .parliamentliveuk import ParliamentLiveUKIE | from .parliamentliveuk import ParliamentLiveUKIE | ||||||
| from .pbs import PBSIE | from .pbs import PBSIE | ||||||
| from .photobucket import PhotobucketIE | from .photobucket import PhotobucketIE | ||||||
|   | |||||||
| @@ -1,45 +0,0 @@ | |||||||
| # coding: utf-8 |  | ||||||
| from __future__ import unicode_literals |  | ||||||
|  |  | ||||||
| import re |  | ||||||
|  |  | ||||||
| from .common import InfoExtractor |  | ||||||
|  |  | ||||||
| # audios on fm4.orf.at are only available for 7 days, so we can't |  | ||||||
| # add tests. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class FM4IE(InfoExtractor): |  | ||||||
|     IE_DESC = 'fm4.orf.at' |  | ||||||
|     _VALID_URL = r'http://fm4\.orf\.at/7tage/?#(?P<date>[0-9]+)/(?P<show>\w+)' |  | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |  | ||||||
|         mobj = re.match(self._VALID_URL, url) |  | ||||||
|         show_date = mobj.group('date') |  | ||||||
|         show_id = mobj.group('show') |  | ||||||
|  |  | ||||||
|         data = self._download_json( |  | ||||||
|             'http://audioapi.orf.at/fm4/json/2.0/broadcasts/%s/4%s' % (show_date, show_id), |  | ||||||
|             show_id |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         def extract_entry_dict(info, title, subtitle): |  | ||||||
|             return { |  | ||||||
|                 'id': info['loopStreamId'].replace('.mp3', ''), |  | ||||||
|                 'url': 'http://loopstream01.apa.at/?channel=fm4&id=%s' % info['loopStreamId'], |  | ||||||
|                 'title': title, |  | ||||||
|                 'description': subtitle, |  | ||||||
|                 'duration': (info['end'] - info['start']) / 1000, |  | ||||||
|                 'timestamp': info['start'] / 1000, |  | ||||||
|                 'ext': 'mp3' |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|         entries = [extract_entry_dict(t, data['title'], data['subtitle']) for t in data['streams']] |  | ||||||
|  |  | ||||||
|         return { |  | ||||||
|             '_type': 'playlist', |  | ||||||
|             'id': show_id, |  | ||||||
|             'title': data['title'], |  | ||||||
|             'description': data['subtitle'], |  | ||||||
|             'entries': entries |  | ||||||
|         } |  | ||||||
| @@ -1,40 +0,0 @@ | |||||||
| # coding: utf-8 |  | ||||||
| from __future__ import unicode_literals |  | ||||||
|  |  | ||||||
| import calendar |  | ||||||
| import datetime |  | ||||||
| import re |  | ||||||
|  |  | ||||||
| from .common import InfoExtractor |  | ||||||
|  |  | ||||||
| # audios on oe1.orf.at are only available for 7 days, so we can't |  | ||||||
| # add tests. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class OE1IE(InfoExtractor): |  | ||||||
|     IE_DESC = 'oe1.orf.at' |  | ||||||
|     _VALID_URL = r'http://oe1\.orf\.at/programm/(?P<id>[0-9]+)' |  | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |  | ||||||
|         mobj = re.match(self._VALID_URL, url) |  | ||||||
|         show_id = mobj.group('id') |  | ||||||
|  |  | ||||||
|         data = self._download_json( |  | ||||||
|             'http://oe1.orf.at/programm/%s/konsole' % show_id, |  | ||||||
|             show_id |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         timestamp = datetime.datetime.strptime('%s %s' % ( |  | ||||||
|             data['item']['day_label'], |  | ||||||
|             data['item']['time'] |  | ||||||
|         ), '%d.%m.%Y %H:%M') |  | ||||||
|         unix_timestamp = calendar.timegm(timestamp.utctimetuple()) |  | ||||||
|  |  | ||||||
|         return { |  | ||||||
|             'id': show_id, |  | ||||||
|             'title': data['item']['title'], |  | ||||||
|             'url': data['item']['url_stream'], |  | ||||||
|             'ext': 'mp3', |  | ||||||
|             'description': data['item'].get('info'), |  | ||||||
|             'timestamp': unix_timestamp |  | ||||||
|         } |  | ||||||
| @@ -3,6 +3,8 @@ from __future__ import unicode_literals | |||||||
|  |  | ||||||
| import json | import json | ||||||
| import re | import re | ||||||
|  | import calendar | ||||||
|  | import datetime | ||||||
|  |  | ||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
| @@ -12,7 +14,9 @@ from ..utils import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ORFIE(InfoExtractor): | class ORFTVthekIE(InfoExtractor): | ||||||
|  |     IE_NAME = 'orf:tvthek' | ||||||
|  |     IE_DESC = 'ORF TVthek' | ||||||
|     _VALID_URL = r'https?://tvthek\.orf\.at/(?:programs/.+?/episodes|topics/.+?|program/[^/]+)/(?P<id>\d+)' |     _VALID_URL = r'https?://tvthek\.orf\.at/(?:programs/.+?/episodes|topics/.+?|program/[^/]+)/(?P<id>\d+)' | ||||||
|  |  | ||||||
|     _TEST = { |     _TEST = { | ||||||
| @@ -105,3 +109,73 @@ class ORFIE(InfoExtractor): | |||||||
|             'entries': entries, |             'entries': entries, | ||||||
|             'id': playlist_id, |             'id': playlist_id, | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Audios on ORF radio are only available for 7 days, so we can't add tests. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ORFOE1IE(InfoExtractor): | ||||||
|  |     IE_NAME = 'orf:oe1' | ||||||
|  |     IE_DESC = 'Radio Österreich 1' | ||||||
|  |     _VALID_URL = r'http://oe1\.orf\.at/programm/(?P<id>[0-9]+)' | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         mobj = re.match(self._VALID_URL, url) | ||||||
|  |         show_id = mobj.group('id') | ||||||
|  |  | ||||||
|  |         data = self._download_json( | ||||||
|  |             'http://oe1.orf.at/programm/%s/konsole' % show_id, | ||||||
|  |             show_id | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         timestamp = datetime.datetime.strptime('%s %s' % ( | ||||||
|  |             data['item']['day_label'], | ||||||
|  |             data['item']['time'] | ||||||
|  |         ), '%d.%m.%Y %H:%M') | ||||||
|  |         unix_timestamp = calendar.timegm(timestamp.utctimetuple()) | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': show_id, | ||||||
|  |             'title': data['item']['title'], | ||||||
|  |             'url': data['item']['url_stream'], | ||||||
|  |             'ext': 'mp3', | ||||||
|  |             'description': data['item'].get('info'), | ||||||
|  |             'timestamp': unix_timestamp | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ORFFM4IE(InfoExtractor): | ||||||
|  |     IE_DESC = 'orf:fm4' | ||||||
|  |     IE_DESC = 'radio FM4' | ||||||
|  |     _VALID_URL = r'http://fm4\.orf\.at/7tage/?#(?P<date>[0-9]+)/(?P<show>\w+)' | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         mobj = re.match(self._VALID_URL, url) | ||||||
|  |         show_date = mobj.group('date') | ||||||
|  |         show_id = mobj.group('show') | ||||||
|  |  | ||||||
|  |         data = self._download_json( | ||||||
|  |             'http://audioapi.orf.at/fm4/json/2.0/broadcasts/%s/4%s' % (show_date, show_id), | ||||||
|  |             show_id | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         def extract_entry_dict(info, title, subtitle): | ||||||
|  |             return { | ||||||
|  |                 'id': info['loopStreamId'].replace('.mp3', ''), | ||||||
|  |                 'url': 'http://loopstream01.apa.at/?channel=fm4&id=%s' % info['loopStreamId'], | ||||||
|  |                 'title': title, | ||||||
|  |                 'description': subtitle, | ||||||
|  |                 'duration': (info['end'] - info['start']) / 1000, | ||||||
|  |                 'timestamp': info['start'] / 1000, | ||||||
|  |                 'ext': 'mp3' | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         entries = [extract_entry_dict(t, data['title'], data['subtitle']) for t in data['streams']] | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             '_type': 'playlist', | ||||||
|  |             'id': show_id, | ||||||
|  |             'title': data['title'], | ||||||
|  |             'description': data['subtitle'], | ||||||
|  |             'entries': entries | ||||||
|  |         } | ||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․