35 lines
1.2 KiB
Python
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))
|