Files
gallery/gallery/painting/yandextv/api.py
T

35 lines
1.2 KiB
Python

import datetime
from gallery.sketch.headers import build_headers
from gallery.sketch.schedule.api import ScheduleApi
from gallery.sketch.schedule.model import Channel, Schedule
from gallery.sketch.source import ApiSource
from . import PROVIDER
from .parser import ScheduleData, YandexTVChannelParser, YandexTVScheduleParser
class YandexTVApi(ScheduleApi):
PROVIDER = PROVIDER
schedule_parser = YandexTVScheduleParser()
channel_parser = YandexTVChannelParser()
lr = 213 # magic id
def _build_source(self) -> ApiSource:
return ApiSource("https://tv.yandex.ru", headers=build_headers("tv.yandex.ru"))
async def find_channels(self, query: str) -> list[Channel]:
url = (
"https://suggest-multi.yandex.ru/suggest-tv2?"
f"v=4&uil=ru&lr={self.lr}&count_channels=4&count_programs=4&sn=50&part={query}"
)
data = await self.source.request(url)
return self.channel_parser.parse(data)
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
endpoint = f"{self.lr}/channel/{channel_id}?date={date:%Y-%m-%d}"
data = await self.source.request(endpoint)
return self.schedule_parser.parse(ScheduleData(date, channel_id, data))