basic tuba.fm support

This commit is contained in:
Laura Liberda 2021-01-08 11:19:15 +01:00
parent c758741d55
commit 6e4b1019e4
2 changed files with 106 additions and 0 deletions

View file

@ -1203,6 +1203,10 @@ from .traileraddict import TrailerAddictIE
from .trilulilu import TriluliluIE
from .trunews import TruNewsIE
from .trutv import TruTVIE
from .tubafm import (
TubaFMIE,
TubaFMPageIE,
)
from .tube8 import Tube8IE
from .tubitv import TubiTvIE
from .tumblr import TumblrIE

View file

@ -0,0 +1,102 @@
# coding: utf-8
from __future__ import unicode_literals
from .common import InfoExtractor
from ..utils import (
ExtractorError,
unescapeHTML,
)
class TubaFMIE(InfoExtractor):
IE_NAME = 'tubafm:stream'
_VALID_URL = r'https?://fm\.tuba\.pl/play/(?P<id>\d+/\d+)/'
_TESTS = [{
'url': 'https://fm.tuba.pl/play/38/2/radio-0',
'info_dict': {
'id': '38/2',
'ext': 'mp3',
'title': 'Radio Pogoda',
'description': 'md5:cdbc59138cfc21d5e8b0f66183455b2b',
},
'params': {
'skip_download': True,
},
}]
def _real_extract(self, url):
stream_id = self._match_id(url)
meta = self._download_json('https://fm.tuba.pl/getp/%s' % stream_id, stream_id)
info = meta['info']
thumbnails = []
if info.get('full_img_big'):
thumbnails.append({
'url': info.get('full_img_big'),
})
if info.get('full_img'):
thumbnails.append({
'url': info.get('full_img'),
})
info_dict = {
'id': stream_id,
'title': info['name'],
'description': unescapeHTML(info.get('description')),
'thumbnails': thumbnails,
}
if len(meta['playlist']) == 0:
raise ExtractorError('No audio playlists')
elif len(meta['playlist']) == 1:
# live radio stream (FM restreams)
stream_url = meta['playlist'][0][6]
# home.pl sells TLS certificates that AREN'T FUCKING TRUSTED
# by almost anything except the newest stable Firefox and Chromium
# this is a workaround for this shitty product
stream_url = stream_url.replace('https://radiostream.pl/', 'http://radiostream.pl/')
info_dict.update({
'url': stream_url,
'ext': 'mp3',
'is_live': True,
})
else:
# basically music playlists, but they require more additional work - MRs accepted
#
# if you need this:
# curl https://ssl.fm.tuba.pl/service3/getConfig\?password\=ea1aefc624\&device_id\=[insert an uuidv4 here]\&device_platform\=android\&device_type\=Xiaomi\&login\=android_test\&lang\=en | jq .sessionid -r
# curl https://fm.tuba.pl/service3/getSongUrl\?filename\=%2F00%2F00%2F15%2F94%2F58.aac\&id\=159458\&sessionid\=[see above] | jq .link -r
raise ExtractorError('Unsupported playlist type')
return info_dict
class TubaFMPageIE(InfoExtractor):
IE_NAME = 'tubafm:page'
_VALID_URL = r'https://fm\.tuba\.pl/radio/(?P<id>[^/?#]+)'
_TESTS = [{
'url': 'https://fm.tuba.pl/radio/Rock+Radio+Polska',
'info_dict': {
'id': '8/2',
'ext': 'mp3',
'title': 'Rock Radio Polska',
'description': 'md5:bde7dc45e0eca5ce916a4680b7db19a3',
},
'params': {
'skip_download': True,
},
'add_ie': ['TubaFM'],
}]
def _real_extract(self, url):
slug = self._match_id(url)
webpage = self._download_webpage(url, slug)
return {
'_type': 'url',
'url': self._search_regex(r'<div class=managing-panel><div class=switcher><a href="(https://fm\.tuba\.pl/play/\d+/\d+/[^"]*)"',
webpage, 'stream url'),
'ie_key': 'TubaFM',
}