niku is gonna work on this

This commit is contained in:
2021-10-30 17:19:31 +02:00
commit 425d3a3a92
17 changed files with 1774 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import re
import struct
import sys
import urllib.request as urllib2
import aiohttp
key = "b9803d262fab977f:04c791f69496359d638fc634e60c08d0"
def hasNumbers(inputString):
return any(char.isdigit() for char in inputString)
def process_stream_title(title: str) -> list:
l = title.split(' - ', 1)
if l[0].isdigit():
return l[1].rsplit(" - ", 1)
return title.rsplit(" - ", 1)
async def fetch_metadata():
url = "https://azuracast.exobot.site/api/nowplaying"
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
data = await response.json()
source = data["playing_next"]["text"]
name, vid = process_stream_title(source["title"])
return {"name": name, "thumbnail": data["playing_next"]["art"]}
async def get_metadata():
"""Deprecated: use fetch_metadata()"""
url = 'https://icecast.exobot.site/stream' # radio stream
encoding = 'iso-8859-1' # default: iso-8859-1 for mp3 and utf-8 for ogg streams
request = urllib2.Request(url, headers={'Icy-MetaData':
1}) # request metadata
response = urllib2.urlopen(request)
# print(response.headers, file=sys.stderr)
metaint = int(response.headers['icy-metaint'])
for _ in range(10): # title may be empty initially, try several times
response.read(metaint) # skip to metadata
metadata_length = struct.unpack(
'B', response.read(1))[0] * 16 # length byte
metadata = response.read(metadata_length).rstrip(b'\0')
# print(metadata, file=sys.stderr)
# extract title from the metadata
m = re.search(br"StreamTitle='([^']*)';", metadata)
if m:
title = m.group(1)
if title:
break
else:
sys.exit('no title found')
title = title.decode(encoding, errors='replace')
#print(f"DEBUG: {title}")
if hasNumbers(str(title[:4])):
return title[7:][:-14]
else:
return title[:-14]