feat(schedule): implement multiple schedule providers
This commit is contained in:
9
gallery/easel/depends/api.py
Normal file
9
gallery/easel/depends/api.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from gallery.easel.core import AppRequest
|
||||||
|
from gallery.sketch.api import API
|
||||||
|
|
||||||
|
|
||||||
|
def api_resolver(api_type: type[API]):
|
||||||
|
def get_api(request: AppRequest, provider: str | None = None) -> API:
|
||||||
|
return request.app.state.api.get_api(api_type, provider)
|
||||||
|
|
||||||
|
return get_api
|
||||||
9
gallery/easel/depends/schedule.py
Normal file
9
gallery/easel/depends/schedule.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from typing import Annotated
|
||||||
|
|
||||||
|
from fastapi import Depends
|
||||||
|
|
||||||
|
from gallery.sketch.schedule.api import ScheduleApi
|
||||||
|
|
||||||
|
from .api import api_resolver
|
||||||
|
|
||||||
|
ScheduleApiDepends = Annotated[ScheduleApi, Depends(api_resolver(ScheduleApi))]
|
||||||
@@ -2,12 +2,8 @@ from typing import Annotated
|
|||||||
|
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
|
||||||
from gallery.sketch.weather.api import WeatherApi
|
from gallery.sketch.weather.api import WeatherApi
|
||||||
|
|
||||||
|
from .api import api_resolver
|
||||||
|
|
||||||
async def get_weather_api(request: AppRequest, provider: str | None = None) -> WeatherApi:
|
WeatherApiDepends = Annotated[WeatherApi, Depends(api_resolver(WeatherApi))]
|
||||||
return request.app.state.api.get_weather(provider)
|
|
||||||
|
|
||||||
|
|
||||||
WeatherApiDepends = Annotated[WeatherApi, Depends(get_weather_api)]
|
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ import datetime
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
from gallery.easel.core import AppRequest
|
||||||
from gallery.sketch.schedule.model import ChannelId, Schedule
|
from gallery.sketch.schedule.model import Channel, Schedule
|
||||||
|
|
||||||
router = APIRouter(prefix="/schedule")
|
router = APIRouter(prefix="/schedule")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/channels")
|
@router.get("/channels")
|
||||||
async def get_api_schedule_channels(request: AppRequest) -> list[ChannelId]:
|
async def get_api_schedule_channels(request: AppRequest) -> list[Channel]:
|
||||||
schedule_api = request.app.state.api.schedule
|
schedule_api = request.app.state.api.schedule
|
||||||
return await schedule_api.get_channels()
|
return await schedule_api.get_channels()
|
||||||
|
|
||||||
|
|||||||
@@ -1,26 +1,18 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Annotated
|
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter
|
||||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
from gallery.easel.core import AppRequest
|
||||||
|
from gallery.easel.depends.schedule import ScheduleApiDepends
|
||||||
from gallery.sketch.schedule.api import ScheduleApi
|
from gallery.sketch.schedule.api import ScheduleApi
|
||||||
from gallery.sketch.schedule.catalog import BUNDLE
|
|
||||||
|
|
||||||
from ..common.utils.tag import TagType, TagUtil
|
from ..common.utils.tag import TagType, TagUtil
|
||||||
from ..common.utils.template import build_templates
|
from ..common.utils.template import build_templates
|
||||||
from .filters import timedelta_format
|
from .filters import timedelta_format
|
||||||
|
|
||||||
|
|
||||||
async def get_schedule_api(request: AppRequest, provider: str | None = None) -> ScheduleApi:
|
|
||||||
return request.app.state.api.get_schedule(provider)
|
|
||||||
|
|
||||||
|
|
||||||
ScheduleApiDepends = Annotated[ScheduleApi, Depends(get_schedule_api)]
|
|
||||||
|
|
||||||
|
|
||||||
def context_procesor(request: AppRequest) -> dict:
|
def context_procesor(request: AppRequest) -> dict:
|
||||||
return {
|
return {
|
||||||
"providers": request.app.state.api.get_api_providers(ScheduleApi.TYPE),
|
"providers": request.app.state.api.get_api_providers(ScheduleApi.TYPE),
|
||||||
@@ -32,51 +24,34 @@ templates = build_templates(
|
|||||||
{
|
{
|
||||||
"timedelta_format": timedelta_format,
|
"timedelta_format": timedelta_format,
|
||||||
},
|
},
|
||||||
|
context_procesor,
|
||||||
)
|
)
|
||||||
|
|
||||||
router = APIRouter(prefix="/schedule")
|
router = APIRouter(prefix="/schedule")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/", response_class=HTMLResponse)
|
@router.get("/", response_class=HTMLResponse)
|
||||||
async def get_schedule_list(request: AppRequest, schedule_api: ScheduleApiDepends):
|
async def get_schedule_index(request: AppRequest, schedule_api: ScheduleApiDepends, query: str | None = None):
|
||||||
channels = await schedule_api.get_channels()
|
channels = (await schedule_api.find_channels(query)) if query else []
|
||||||
channels_data = BUNDLE.select_items(channels)
|
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request=request,
|
request=request,
|
||||||
name="index.html",
|
name="index.html",
|
||||||
context={
|
context={
|
||||||
"channels": channels_data,
|
"channels": channels,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/tag/{tag}", response_class=HTMLResponse)
|
@router.get("/{provider}/{channel}", response_class=RedirectResponse)
|
||||||
async def get_schedule_tag(request: AppRequest, schedule_api: ScheduleApiDepends, tag: str, live: bool = False):
|
|
||||||
tag_value = TagUtil.parse_tag(tag)
|
|
||||||
results = await schedule_api.get_all_schedules(tag_value.date)
|
|
||||||
return templates.TemplateResponse(
|
|
||||||
request=request,
|
|
||||||
name="schedule.html",
|
|
||||||
context={
|
|
||||||
"tag_util": TagUtil,
|
|
||||||
"datetime": datetime,
|
|
||||||
"response": results[0],
|
|
||||||
"responses": results,
|
|
||||||
"live": live,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{channel}", response_class=RedirectResponse)
|
|
||||||
async def get_channel_default(channel: str):
|
async def get_channel_default(channel: str):
|
||||||
return RedirectResponse(f"{channel}/tag/today")
|
return RedirectResponse(f"{channel}/tag/today")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{channel}/tag/{tag}", response_class=HTMLResponse)
|
@router.get("/{provider}/{channel}/tag/{tag}", response_class=HTMLResponse)
|
||||||
async def get_channel_tag(request: AppRequest, schedule_api: ScheduleApiDepends, channel: str, tag: str):
|
async def get_channel_tag(request: AppRequest, schedule_api: ScheduleApiDepends, channel: str, tag: str):
|
||||||
tag_value = TagUtil.parse_tag(tag)
|
tag_value = TagUtil.parse_tag(tag)
|
||||||
if tag_value.type == TagType.DAY:
|
if tag_value.type == TagType.DAY:
|
||||||
response = await schedule_api.get_channel_schedule(channel, tag_value.date)
|
response = await schedule_api.get_schedule(channel, tag_value.date)
|
||||||
else:
|
else:
|
||||||
raise ValueError(tag)
|
raise ValueError(tag)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ locale=request.state.language)}}
|
|||||||
<i class="bi bi-arrow-left-square"></i>
|
<i class="bi bi-arrow-left-square"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="icon-link"
|
<a class="icon-link"
|
||||||
href="../..">
|
href="../../..">
|
||||||
<i class="bi bi-arrow-up-square"></i>
|
<i class="bi bi-arrow-up-square"></i>
|
||||||
</a>
|
</a>
|
||||||
<span>{{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span>
|
<span>{{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}}</span>
|
||||||
@@ -30,14 +30,15 @@ locale=request.state.language)}}
|
|||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for value in response.values %}
|
{% for value in response.values %}
|
||||||
<tr class="{{'table-success' if value.live else ''}}">
|
<tr class="{{'table-success' if value.live else ''}}">
|
||||||
<td>{{value.start.strftime('%H:%M')}}</td>
|
<td>
|
||||||
<td>{{(value.end - value.start) | timedelta_format}}</td>
|
<span>{{value.start.strftime('%H:%M')}}</span>
|
||||||
|
<span class="small ms-1">({{(value.end - value.start) | timedelta_format}})</span>
|
||||||
|
</td>
|
||||||
<td>{{value.label}}</td>
|
<td>{{value.label}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -3,16 +3,60 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{{_("TV program")}}</h1>
|
<h1>{{_("TV program")}}</h1>
|
||||||
<div class="list-group mb-5">
|
<form action=""
|
||||||
<a href="tag/today"
|
method="get"
|
||||||
class="list-group-item list-group-item-action px-4">
|
class="mb-4">
|
||||||
<span class="fw-bold">Все</span>
|
<div class="input-group mb-3">
|
||||||
</a>
|
<input type="text"
|
||||||
|
class="form-control"
|
||||||
|
id="query"
|
||||||
|
name="query"
|
||||||
|
placeholder="{{_('Enter the channel name')}}">
|
||||||
|
<input type="hidden"
|
||||||
|
class="form-control"
|
||||||
|
id="provider"
|
||||||
|
name="provider"
|
||||||
|
value="{{provider or providers[0]}}">
|
||||||
|
<button id="providerBtn"
|
||||||
|
class="btn btn-secondary dropdown-toggle"
|
||||||
|
type="text"
|
||||||
|
data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">{{provider or providers[0]}}</button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
|
{% for provider in providers %}
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item"
|
||||||
|
onclick="provider.value='{{provider}}'; providerBtn.innerText='{{provider}}'">{{provider}}</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<button class="btn btn-primary"
|
||||||
|
type="submit">{{_("Search")}}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% if channels %}
|
||||||
|
<ul id="channels"
|
||||||
|
class="list-group mb-5">
|
||||||
{% for channel in channels %}
|
{% for channel in channels %}
|
||||||
<a href="{{channel.id}}"
|
<schedule-channel channel="{{channel.model_dump() | tojson | forceescape}}"></schedule-channel>
|
||||||
class="list-group-item list-group-item-action px-4">
|
|
||||||
<span class="text-primary">{{channel.name}}</span>
|
|
||||||
</a>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</ul>
|
||||||
|
<hr>
|
||||||
|
{% endif %}
|
||||||
|
<ul id="storedChannels"
|
||||||
|
class="list-group mb-5">
|
||||||
|
</ul>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
const searchQuery = params.get('query');
|
||||||
|
if (searchQuery) {
|
||||||
|
document.querySelector('#query').value = searchQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", (event) => {
|
||||||
|
scheduleChannelManager.loadChannels('#storedChannels');
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
{% extends "base.html" %}
|
|
||||||
{% block title %}
|
|
||||||
{{_("Live broadcasts") if live else _("TV program")}} | {{format_date(response.date, DATE_FORMAT,
|
|
||||||
locale=request.state.language)}}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block header %}
|
|
||||||
<app-link href="/schedule"
|
|
||||||
icon="tv">{{_("TV program")}}</app-link>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h4>
|
|
||||||
<a class="icon-link {{'disabled' if response.date == datetime.date.today() else ''}}"
|
|
||||||
href="../tag/{{tag_util.create_tag('day', response.date, -1)}}">
|
|
||||||
<i class="bi bi-arrow-left-square"></i>
|
|
||||||
</a>
|
|
||||||
<a class="icon-link"
|
|
||||||
href="..">
|
|
||||||
<i class="bi bi-arrow-up-square"></i>
|
|
||||||
</a>
|
|
||||||
<span>{{_("Live broadcasts") if live else _("TV program")}} | {{format_date(response.date, DATE_FORMAT,
|
|
||||||
locale=request.state.language)}}</span>
|
|
||||||
<a class="icon-link"
|
|
||||||
href="../tag/{{tag_util.create_tag('day', response.date, 1)}}">
|
|
||||||
<i class="bi bi-arrow-right-square"></i>
|
|
||||||
</a>
|
|
||||||
</h4>
|
|
||||||
<div>
|
|
||||||
<table class="table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for response in responses %}
|
|
||||||
{% set values = (response.values|selectattr('live') if live else response.values)|list %}
|
|
||||||
{% if values|length > 0 %}
|
|
||||||
<tr class="table-primary fs-4">
|
|
||||||
<td colspan="3">
|
|
||||||
<div>{{response.channel.name}}</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% for value in values %}
|
|
||||||
<tr class="{{'table-success' if not live and value.live else ''}}">
|
|
||||||
<td>{{value.start.strftime('%H:%M')}}</td>
|
|
||||||
<td>{{(value.end - value.start) | timedelta_format}}</td>
|
|
||||||
<td>{{value.label}}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from gallery.sketch.schedule.api import ScheduleApi
|
from gallery.sketch.schedule.api import ScheduleApi
|
||||||
from gallery.sketch.schedule.model import Channel, ChannelId, Schedule, ScheduleValue
|
from gallery.sketch.schedule.model import Channel, Schedule, ScheduleValue
|
||||||
from gallery.sketch.source import ApiSource
|
from gallery.sketch.source import ApiSource
|
||||||
|
|
||||||
logger = logging.getLogger("matchtv")
|
logger = logging.getLogger("matchtv")
|
||||||
@@ -14,18 +15,48 @@ class MatchTvApi(ScheduleApi):
|
|||||||
PROVIDER = "matchtv"
|
PROVIDER = "matchtv"
|
||||||
SOURCE = ApiSource("https://matchtv.ru")
|
SOURCE = ApiSource("https://matchtv.ru")
|
||||||
|
|
||||||
async def get_channels(self) -> list[ChannelId]:
|
async def find_channels(self, query: str) -> list[Channel]:
|
||||||
return [
|
endpoint = "api/v1/channels"
|
||||||
ChannelId.MATCH_TV,
|
data = json.loads(await self.SOURCE.request(endpoint))
|
||||||
ChannelId.MATCH_IGRA,
|
result = []
|
||||||
ChannelId.MATCH_ARENA,
|
query = query.lower()
|
||||||
ChannelId.MATCH_FUTBOL_1,
|
for item in data["result"]:
|
||||||
ChannelId.MATCH_FUTBOL_2,
|
if query in item["name"].lower() or query in item["alias"]:
|
||||||
ChannelId.MATCH_FUTBOL_3,
|
channel_id = item["alias"]
|
||||||
ChannelId.MATCH_STRANA,
|
name = item["name"].split("|")[0].strip()
|
||||||
]
|
result.append(Channel(id=channel_id, name=name, provider=self.provider))
|
||||||
|
return result
|
||||||
|
|
||||||
async def get_channel_schedule(self, channel_id: ChannelId, date: datetime.date) -> Schedule:
|
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
|
||||||
|
endpoint = f"api/v1/channels/{channel_id}/tv-schedule?date={date:%Y%m%d}"
|
||||||
|
data = json.loads(await self.SOURCE.request(endpoint))
|
||||||
|
channel_data = data["result"]["channels"][0]
|
||||||
|
channel = Channel(id=channel_data["alias"], name=channel_data["name"], provider=self.provider)
|
||||||
|
values = []
|
||||||
|
current_day = datetime.datetime.combine(date.today(), datetime.datetime.min.time())
|
||||||
|
end = current_day + datetime.timedelta(days=1, hours=6)
|
||||||
|
prev_value: ScheduleValue | None = None
|
||||||
|
for item in channel_data["schedule"]:
|
||||||
|
title = item["title"]
|
||||||
|
time_str = item["time"]
|
||||||
|
hours, minutes = map(int, time_str.split(":"))
|
||||||
|
item_date = current_day.replace(hour=hours, minute=minutes)
|
||||||
|
if prev_value is not None and item_date.hour < prev_value.start.hour:
|
||||||
|
current_day += datetime.timedelta(days=1)
|
||||||
|
item_date += datetime.timedelta(days=1)
|
||||||
|
live = "Прямая трансляция" in title
|
||||||
|
value = ScheduleValue(start=item_date, end=end, label=title, live=live)
|
||||||
|
values.append(value)
|
||||||
|
if prev_value is not None:
|
||||||
|
prev_value.end = item_date
|
||||||
|
prev_value = value
|
||||||
|
return Schedule(
|
||||||
|
channel=channel,
|
||||||
|
date=date,
|
||||||
|
values=values,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def get_schedule_legacy(self, channel_id: str, date: datetime.date) -> Schedule:
|
||||||
endpoint = f"tvguide/{channel_id}?date={date:%Y%m%d}"
|
endpoint = f"tvguide/{channel_id}?date={date:%Y%m%d}"
|
||||||
data = await self.SOURCE.request(endpoint)
|
data = await self.SOURCE.request(endpoint)
|
||||||
soup = BeautifulSoup(data, features="html.parser")
|
soup = BeautifulSoup(data, features="html.parser")
|
||||||
@@ -50,4 +81,8 @@ class MatchTvApi(ScheduleApi):
|
|||||||
if prev_value is not None:
|
if prev_value is not None:
|
||||||
prev_value.end = item_date
|
prev_value.end = item_date
|
||||||
prev_value = value
|
prev_value = value
|
||||||
return Schedule(channel=Channel(id=channel_id, name=channel_name), date=date, values=values)
|
return Schedule(
|
||||||
|
channel=Channel(id=channel_id, name=channel_name, provider=self.provider),
|
||||||
|
date=date,
|
||||||
|
values=values,
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,27 +1,15 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from gallery.sketch.schedule.api import ScheduleApi
|
from gallery.sketch.schedule.api import ScheduleApi
|
||||||
from gallery.sketch.schedule.model import Channel, ChannelId, Schedule, ScheduleValue
|
from gallery.sketch.schedule.model import Channel, Schedule, ScheduleValue
|
||||||
from gallery.sketch.source import ApiSource
|
from gallery.sketch.source import ApiSource
|
||||||
|
|
||||||
logger = logging.getLogger("matchtv")
|
logger = logging.getLogger("matchtv")
|
||||||
|
|
||||||
CHANNELS_MAP: dict[ChannelId, str] = {
|
|
||||||
ChannelId.MATCH_TV: "match-tv-49",
|
|
||||||
ChannelId.MATCH_IGRA: "match-igra-1174",
|
|
||||||
ChannelId.MATCH_ARENA: "match-arena-1173",
|
|
||||||
ChannelId.MATCH_FUTBOL_1: "match-futbol-1-646",
|
|
||||||
ChannelId.MATCH_FUTBOL_2: "match-futbol-2-593",
|
|
||||||
ChannelId.MATCH_FUTBOL_3: "match-futbol-3-797",
|
|
||||||
ChannelId.MATCH_STRANA: "match-strana-1356",
|
|
||||||
ChannelId.MATCH_PLANETA: "match-planeta-1177",
|
|
||||||
# ChannelId.EUROSPORT: "eurosport-677",
|
|
||||||
# ChannelId.EUROSPORT_2: "eurosport-2-720",
|
|
||||||
ChannelId.START: "start-103",
|
|
||||||
}
|
|
||||||
|
|
||||||
HEADERS: dict[str, str] = {
|
HEADERS: dict[str, str] = {
|
||||||
"Accept": (
|
"Accept": (
|
||||||
@@ -57,11 +45,18 @@ class YandexTvApi(ScheduleApi):
|
|||||||
PROVIDER = "yandextv"
|
PROVIDER = "yandextv"
|
||||||
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
|
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
|
||||||
|
|
||||||
async def get_channels(self) -> list[ChannelId]:
|
async def find_channels(self, query: str) -> list[Channel]:
|
||||||
return list(CHANNELS_MAP.keys())
|
url = f"https://suggest-multi.yandex.ru/suggest-tv2?v=4&uil=ru&lr=10&count_channels=4&count_programs=4&sn=50&part={query}"
|
||||||
|
_, values = json.loads(await self.SOURCE.request(url))
|
||||||
|
result = []
|
||||||
|
for _, name, content in values:
|
||||||
|
if content["label"] == "Каналы":
|
||||||
|
channel_id = content["url"].split("/")[-1]
|
||||||
|
result.append(Channel(id=channel_id, name=name, provider=self.provider))
|
||||||
|
return result
|
||||||
|
|
||||||
async def get_channel_schedule(self, channel_id: ChannelId, date: datetime.date) -> Schedule:
|
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
|
||||||
endpoint = f"channel/{CHANNELS_MAP[channel_id]}?date={date:%Y-%m-%d}"
|
endpoint = f"channels/{channel_id}?date={date:%Y-%m-%d}"
|
||||||
data = await self.SOURCE.request(endpoint)
|
data = await self.SOURCE.request(endpoint)
|
||||||
soup = BeautifulSoup(data, features="html.parser")
|
soup = BeautifulSoup(data, features="html.parser")
|
||||||
if soup.select_one(".CheckboxCaptcha") is not None:
|
if soup.select_one(".CheckboxCaptcha") is not None:
|
||||||
@@ -85,4 +80,8 @@ class YandexTvApi(ScheduleApi):
|
|||||||
if prev_value is not None:
|
if prev_value is not None:
|
||||||
prev_value.end = item_date
|
prev_value.end = item_date
|
||||||
prev_value = value
|
prev_value = value
|
||||||
return Schedule(channel=Channel(id=channel_id, name=channel_name), date=date, values=values)
|
return Schedule(
|
||||||
|
channel=Channel(id=channel_id, name=channel_name, provider=self.provider),
|
||||||
|
date=date,
|
||||||
|
values=values,
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
from .api import API, Api
|
from .api import API, Api
|
||||||
from .schedule.api import ScheduleApi
|
|
||||||
from .weather.api import WeatherApi
|
|
||||||
|
|
||||||
|
|
||||||
class ApiBundle:
|
class ApiBundle:
|
||||||
@@ -21,9 +19,3 @@ class ApiBundle:
|
|||||||
if provider is None or provider == value.provider:
|
if provider is None or provider == value.provider:
|
||||||
return value
|
return value
|
||||||
raise ValueError(api_type, provider)
|
raise ValueError(api_type, provider)
|
||||||
|
|
||||||
def get_weather(self, provider: str | None = None) -> WeatherApi:
|
|
||||||
return self.get_api(WeatherApi, provider)
|
|
||||||
|
|
||||||
def get_schedule(self, provider: str | None = None) -> ScheduleApi:
|
|
||||||
return self.get_api(ScheduleApi, provider)
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
from typing import Generic, TypeVar
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
|
|
||||||
|
|
||||||
class CatalogBundle(Generic[T]):
|
|
||||||
def __init__(self, items: list[T]) -> None:
|
|
||||||
self._items_by_id = {item.id: item for item in items}
|
|
||||||
|
|
||||||
def get_item(self, item_id: str) -> T:
|
|
||||||
return self._items_by_id[item_id]
|
|
||||||
|
|
||||||
def select_items(self, ids: list[str]) -> list[T]:
|
|
||||||
return [self._items_by_id[id_] for id_ in ids]
|
|
||||||
@@ -1,25 +1,14 @@
|
|||||||
import asyncio
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from ..api import Api
|
from ..api import Api
|
||||||
from .model import ChannelId, Schedule
|
from .model import Channel, Schedule
|
||||||
|
|
||||||
|
|
||||||
class ScheduleApi(Api):
|
class ScheduleApi(Api):
|
||||||
TYPE = "schedule"
|
TYPE = "schedule"
|
||||||
INTERVAL: float = 0.5
|
|
||||||
|
|
||||||
async def get_channels(self) -> list[ChannelId]:
|
async def find_channels(self, query: str) -> list[Channel]:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
async def get_channel_schedule(self, channel_id: ChannelId, date: datetime.date) -> Schedule:
|
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
async def get_all_schedules(self, date: datetime.date) -> list[Schedule]:
|
|
||||||
channels = await self.get_channels()
|
|
||||||
results = []
|
|
||||||
for channel in channels:
|
|
||||||
results.append(await self.get_channel_schedule(channel_id=channel, date=date))
|
|
||||||
if self.INTERVAL > 0:
|
|
||||||
await asyncio.sleep(self.INTERVAL)
|
|
||||||
return results
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from gallery.sketch.cached import CachedApi, CachePreset
|
|||||||
from gallery.util import TimeUnit
|
from gallery.util import TimeUnit
|
||||||
|
|
||||||
from .api import ScheduleApi
|
from .api import ScheduleApi
|
||||||
from .model import ChannelId, Schedule
|
from .model import Channel, Schedule
|
||||||
|
|
||||||
CACHE_PRESET = CachePreset(ttl=TimeUnit.HOUR * 6)
|
CACHE_PRESET = CachePreset(ttl=TimeUnit.HOUR * 6)
|
||||||
|
|
||||||
@@ -15,11 +15,11 @@ class CachedScheduleApi(ScheduleApi, CachedApi[ScheduleApi]):
|
|||||||
CACHE_KEY = ScheduleApi.TYPE
|
CACHE_KEY = ScheduleApi.TYPE
|
||||||
|
|
||||||
@cached(
|
@cached(
|
||||||
key_builder=lambda fun, self: f"api.{self.CACHE_KEY}.{self.provider}.channels",
|
key_builder=lambda fun, self, query: f"api.{self.CACHE_KEY}.{self.provider}.find.{query}",
|
||||||
**CACHE_PRESET._asdict(),
|
**CACHE_PRESET._asdict(),
|
||||||
)
|
)
|
||||||
async def get_channels(self) -> list[ChannelId]:
|
async def find_channels(self, query: str) -> list[Channel]:
|
||||||
return await self._api.get_channels()
|
return await self._api.find_channels(query)
|
||||||
|
|
||||||
@cached(
|
@cached(
|
||||||
key_builder=lambda fun, self, channel_id, date: (
|
key_builder=lambda fun, self, channel_id, date: (
|
||||||
@@ -27,12 +27,5 @@ class CachedScheduleApi(ScheduleApi, CachedApi[ScheduleApi]):
|
|||||||
),
|
),
|
||||||
**CACHE_PRESET._asdict(),
|
**CACHE_PRESET._asdict(),
|
||||||
)
|
)
|
||||||
async def get_channel_schedule(self, channel_id: ChannelId, date: datetime.date) -> Schedule:
|
async def get_schedule(self, channel_id: str, date: datetime.date) -> Schedule:
|
||||||
return await self._api.get_channel_schedule(channel_id, date)
|
return await self._api.get_schedule(channel_id, date)
|
||||||
|
|
||||||
@cached(
|
|
||||||
key_builder=lambda fun, self, date: (f"api.{self.CACHE_KEY}.{self.provider}.all.{date}"),
|
|
||||||
**CACHE_PRESET._asdict(),
|
|
||||||
)
|
|
||||||
async def get_all_schedules(self, date: datetime.date) -> list[Schedule]:
|
|
||||||
return await self._api.get_all_schedules(date)
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
from gallery.sketch.catalog import CatalogBundle
|
|
||||||
|
|
||||||
from .model import Channel, ChannelId
|
|
||||||
|
|
||||||
BUNDLE = CatalogBundle(
|
|
||||||
[
|
|
||||||
Channel(id=ChannelId.MATCH_TV, name="Матч ТВ"),
|
|
||||||
Channel(id=ChannelId.MATCH_IGRA, name="Матч! Игра"),
|
|
||||||
Channel(id=ChannelId.MATCH_ARENA, name="Матч! Арена"),
|
|
||||||
Channel(id=ChannelId.MATCH_FUTBOL_1, name="Футбол 1"),
|
|
||||||
Channel(id=ChannelId.MATCH_FUTBOL_2, name="Футбол 2"),
|
|
||||||
Channel(id=ChannelId.MATCH_FUTBOL_3, name="Футбол 3"),
|
|
||||||
Channel(id=ChannelId.MATCH_STRANA, name="Матч! Страна"),
|
|
||||||
Channel(id=ChannelId.MATCH_PLANETA, name="Матч! Планета"),
|
|
||||||
Channel(id=ChannelId.MATCH_PLANETA, name="Матч! Планета"),
|
|
||||||
Channel(id=ChannelId.EUROSPORT, name="Europsort"),
|
|
||||||
Channel(id=ChannelId.EUROSPORT_2, name="Europsort 2"),
|
|
||||||
Channel(id=ChannelId.START, name="Старт!"),
|
|
||||||
Channel(id=ChannelId.TEST, name="Тест"),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from enum import StrEnum
|
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@@ -9,27 +8,10 @@ class Model(BaseModel):
|
|||||||
use_enum_values = True
|
use_enum_values = True
|
||||||
|
|
||||||
|
|
||||||
class ChannelId(StrEnum):
|
|
||||||
MATCH_TV = "matchtv"
|
|
||||||
MATCH_IGRA = "igra"
|
|
||||||
MATCH_ARENA = "arena"
|
|
||||||
MATCH_FUTBOL_1 = "futbol-1"
|
|
||||||
MATCH_FUTBOL_2 = "futbol-2"
|
|
||||||
MATCH_FUTBOL_3 = "futbol-3"
|
|
||||||
MATCH_STRANA = "strana"
|
|
||||||
MATCH_PLANETA = "planeta"
|
|
||||||
EUROSPORT = "eurosport"
|
|
||||||
EUROSPORT_2 = "eurosport-2"
|
|
||||||
START = "start"
|
|
||||||
TEST = "test"
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return self.value
|
|
||||||
|
|
||||||
|
|
||||||
class Channel(Model):
|
class Channel(Model):
|
||||||
id: ChannelId
|
id: str
|
||||||
name: str
|
name: str
|
||||||
|
provider: str
|
||||||
|
|
||||||
|
|
||||||
class ScheduleValue(Model):
|
class ScheduleValue(Model):
|
||||||
|
|||||||
@@ -26,7 +26,10 @@ class ApiSource:
|
|||||||
self._headers = headers
|
self._headers = headers
|
||||||
|
|
||||||
async def request(self, endpoint: str) -> str:
|
async def request(self, endpoint: str) -> str:
|
||||||
url = f"{self._base_url}/{endpoint}"
|
if endpoint.startswith("https:"):
|
||||||
|
url = endpoint
|
||||||
|
else:
|
||||||
|
url = f"{self._base_url}/{endpoint}"
|
||||||
logger.info(url)
|
logger.info(url)
|
||||||
headers = {"User-Agent": self._user_agent, **(self._headers or {})}
|
headers = {"User-Agent": self._user_agent, **(self._headers or {})}
|
||||||
async with aiohttp.ClientSession(
|
async with aiohttp.ClientSession(
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import "./language";
|
|||||||
import "./main.scss";
|
import "./main.scss";
|
||||||
import "./theme";
|
import "./theme";
|
||||||
import "./weather/weather";
|
import "./weather/weather";
|
||||||
|
import "./schedule/schedule";
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", (event) => {
|
document.addEventListener("DOMContentLoaded", (event) => {
|
||||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
|
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
|
||||||
|
|||||||
110
static/src/schedule/schedule.ts
Normal file
110
static/src/schedule/schedule.ts
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
export interface Channel {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
provider: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ScheduleChannelStorage {
|
||||||
|
private storageKey: string = "schedule:channels";
|
||||||
|
|
||||||
|
getAll(): Channel[] {
|
||||||
|
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
|
||||||
|
return Object.values(objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
add(object: Channel) {
|
||||||
|
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
|
||||||
|
objects[object.id] = object;
|
||||||
|
window.localStorage.setItem(this.storageKey, JSON.stringify(objects));
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(id: string) {
|
||||||
|
const objects = JSON.parse(window.localStorage.getItem(this.storageKey) || "{}");
|
||||||
|
delete objects[id];
|
||||||
|
window.localStorage.setItem(this.storageKey, JSON.stringify(objects));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ScheduleChannelManager {
|
||||||
|
loadChannels(selector: string) {
|
||||||
|
const channels = window.scheduleChannelStorage.getAll();
|
||||||
|
const container = document.querySelector(selector);
|
||||||
|
if (container) {
|
||||||
|
container.innerHTML = "";
|
||||||
|
for (const channel of channels) {
|
||||||
|
const element = new ScheduleChannelElement();
|
||||||
|
element.setAttribute("channel", JSON.stringify(channel));
|
||||||
|
element.setAttribute("removable", "");
|
||||||
|
container.appendChild(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ScheduleChannelElement extends HTMLElement {
|
||||||
|
static observedAttributes = ["channel", "removable"];
|
||||||
|
|
||||||
|
channel: Channel | null = null;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.handleClick = this.handleClick.bind(this);
|
||||||
|
this.handleRemoveClick = this.handleRemoveClick.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
connectedCallback() {
|
||||||
|
this.channel = JSON.parse(this.getAttribute("channel") || "{}");
|
||||||
|
this.innerHTML = `
|
||||||
|
<a href="${this.channel?.provider}/${this.channel?.id}"
|
||||||
|
class="list-group-item list-group-item-action px-4 d-flex justify-content-between align-items-start">
|
||||||
|
<span>
|
||||||
|
<span class="text-primary">${this.channel?.name}</span>
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<span class="badge text-bg-secondary">${this.channel?.provider}</span>
|
||||||
|
<span class="text-danger ms-2" data-remove>
|
||||||
|
✕
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</a>`;
|
||||||
|
this.addEventListener("click", this.handleClick);
|
||||||
|
if (this.hasAttribute("removable")) {
|
||||||
|
this.querySelector<HTMLElement>("[data-remove]")?.addEventListener("click", this.handleRemoveClick);
|
||||||
|
} else {
|
||||||
|
this.querySelector("[data-remove]")?.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnectedCallback() {
|
||||||
|
this.removeEventListener("click", this.handleClick);
|
||||||
|
this.querySelector<HTMLElement>("[data-remove]")?.removeEventListener("click", this.handleRemoveClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleClick(event: MouseEvent) {
|
||||||
|
if (this.channel) {
|
||||||
|
window.scheduleChannelStorage.add(this.channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleRemoveClick(event: MouseEvent) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
if (this.channel) {
|
||||||
|
window.scheduleChannelStorage.remove(this.channel.id);
|
||||||
|
}
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("schedule-channel", ScheduleChannelElement);
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
scheduleChannelStorage: ScheduleChannelStorage;
|
||||||
|
scheduleChannelManager: ScheduleChannelManager;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.scheduleChannelStorage = new ScheduleChannelStorage();
|
||||||
|
window.scheduleChannelManager = new ScheduleChannelManager();
|
||||||
|
console.log("ok");
|
||||||
@@ -6,5 +6,6 @@ MATCHTV_MOCK_SOURCE = MockSource(
|
|||||||
Path(__file__).parent,
|
Path(__file__).parent,
|
||||||
{
|
{
|
||||||
"test": "test.html",
|
"test": "test.html",
|
||||||
|
"channels": "channels.json",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
588
tests/data/matchtv/channels.json
Normal file
588
tests/data/matchtv/channels.json
Normal file
@@ -0,0 +1,588 @@
|
|||||||
|
{
|
||||||
|
"result": [
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"weight": 1,
|
||||||
|
"alias": "matchtv",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u0422\u0412",
|
||||||
|
"description": "\u003Cp\u003E\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb\u003C\/span\u003E\u0026nbsp;\u2014 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e\u0026nbsp;\u0441\u043f\u043e\u0440\u0442\u0435 \u0438\u0026nbsp;\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0436\u0438\u0437\u043d\u0438.\u003C\/p\u003E\u003Cp\u003E\u041c\u0430\u0442\u0447 \u0422\u0412\u0026nbsp;\u2014 \u044d\u0442\u043e\u0026nbsp;\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430\u003C\/span\u003E\u0026nbsp;\u0432\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430!\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u0412\u0026nbsp;\u043d\u0430\u0448\u0435\u043c \u044d\u0444\u0438\u0440\u0435\u003C\/span\u003E\u0026nbsp;\u2014 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0438\u0026nbsp;\u0440\u0430\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0438\u0026nbsp;\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438, \u0440\u0435\u0430\u043b\u0438\u0442\u0438- \u0438\u0026nbsp;\u0442\u043e\u043a-\u0448\u043e\u0443, \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u0438\u0026nbsp;\u0441\u0435\u0440\u0438\u0430\u043b\u044b:\u0026nbsp;\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u0432\u0441\u0451 \u043e\u0026nbsp;\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u043c \u0438\u0026nbsp;\u043c\u0438\u0440\u043e\u0432\u043e\u043c \u0441\u043f\u043e\u0440\u0442\u0435!\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u041a\u0430\u043d\u0430\u043b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u0445 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445\u0026nbsp;\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0026nbsp;\u0432\u0435\u0434\u0443\u0449\u0438\u0445\u003C\/span\u003E. \u042d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043e\u043f\u044b\u0442\u043d\u0430\u044f \u0438\u0026nbsp;\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u0026nbsp;\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u043c \u0422\u0412\u0026nbsp;\u2014\u0026nbsp;\u003Cspan style=\u0022font-weight: 700;\u0022\u003E\u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u0026nbsp;\u043d\u0430\u0448\u0438\u043c\u0438 \u0437\u0440\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0438\u0026nbsp;\u0431\u043e\u043b\u0435\u043b\u044c\u0449\u0438\u043a\u0430\u043c\u0438\u003C\/span\u003E\u0026nbsp;\u043c\u044b\u0026nbsp;\u043f\u0440\u043e\u0448\u043b\u0438 \u0432\u0441\u0435 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b \u0438\u0026nbsp;\u043f\u0435\u0440\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043b\u0435\u0442.\u003C\/p\u003E\u003Cp\u003E\u041c\u044b\u0026nbsp;\u0437\u043e\u0432\u0435\u043c \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u0026nbsp;\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043b\u044e\u0431\u044f\u0442 \u0441\u043f\u043e\u0440\u0442 \u0438\u0026nbsp;\u0436\u0438\u0432\u0443\u0442\u0026nbsp;\u0438\u043c: \u0443\u0026nbsp;\u044d\u043a\u0440\u0430\u043d\u043e\u0432\u0026nbsp;\u0422\u0412, \u043d\u0430\u0026nbsp;\u0441\u0442\u0430\u0434\u0438\u043e\u043d\u0430\u0445 \u0438\u043b\u0438 \u0432\u0026nbsp;\u0441\u043f\u043e\u0440\u0442\u0437\u0430\u043b\u0430\u0445.\u003C\/p\u003E\u003Cp\u003E#\u0432\u0441\u0435\u043d\u0430\u043c\u0430\u0442\u0447!\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb \u2014 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e \u0441\u043f\u043e\u0440\u0442\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0436\u0438\u0437\u043d\u0438. \u041c\u0430\u0442\u0447 \u0422\u0412 \u2014 \u044d\u0442\u043e \u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430!\r\n\u0412 \u043d\u0430\u0448\u0435\u043c \u044d\u0444\u0438\u0440\u0435 \u2014 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0438 \u0440\u0430\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438, \u0440\u0435\u0430\u043b\u0438\u0442\u0438- \u0438 \u0442\u043e\u043a-\u0448\u043e\u0443, \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u044b: \u0432\u0441\u0451 \u043e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u043c \u0438 \u043c\u0438\u0440\u043e\u0432\u043e\u043c \u0441\u043f\u043e\u0440\u0442\u0435!",
|
||||||
|
"videoPlayerCode": "https:\/\/video.matchtv.ru\/iframe\/channel\/106",
|
||||||
|
"platformVideoId": null,
|
||||||
|
"package": null,
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606457,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447 \u0422\u0412",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447 \u0422\u0412. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043e\u0431\u0437\u043e\u0440\u044b, \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441\u043f\u043e\u0440\u0442\u0441\u043c\u0435\u043d\u043e\u0432",
|
||||||
|
"seoDescription": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447 \u0422\u0412. \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e \u0441\u043f\u043e\u0440\u0442\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0436\u0438\u0437\u043d\u0438.",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447 \u0422\u0412",
|
||||||
|
"seoMeta": "\u041c\u0430\u0442\u0447 \u0422\u0412 \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440",
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/70c6\/1bb4\/70c61bb4b7a0ccb739834fa99a5dd9a8.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/0de1\/49ba\/0de149babcacd733028970463f32a00d.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/4fbd\/42cc\/4fbd42ccdde063ff630a7970dbce1034.png",
|
||||||
|
"tvChannel": { "id": 130, "name": "\u041c\u0430\u0442\u0447 \u0422\u0412", "serviceTvId": 2883, "priority": 20 },
|
||||||
|
"terms": [
|
||||||
|
{ "id": 167824, "title": "\u041c\u0430\u0442\u0447 \u0422\u0412" },
|
||||||
|
{ "id": 174766, "title": "\u0412\u0442\u043e\u0440\u043e\u0435 \u0434\u044b\u0445\u0430\u043d\u0438\u0435" },
|
||||||
|
{
|
||||||
|
"id": 174768,
|
||||||
|
"title": "\u041a\u043e\u043d\u0442\u0438\u043d\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u0447\u0435\u0440"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 174769,
|
||||||
|
"title": "\u041b\u0443\u0447\u0448\u0430\u044f \u0438\u0433\u0440\u0430 \u0441 \u043c\u044f\u0447\u043e\u043c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 174770,
|
||||||
|
"title": "\u0411\u0438\u0430\u0442\u043b\u043e\u043d \u0441 \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u043c \u0413\u0443\u0431\u0435\u0440\u043d\u0438\u0435\u0432\u044b\u043c"
|
||||||
|
},
|
||||||
|
{ "id": 174771, "title": "\u041e\u0441\u043e\u0431\u044b\u0439 \u0434\u0435\u043d\u044c" },
|
||||||
|
{ "id": 174772, "title": "\u041c\u0430\u043c\u0430 \u0432 \u0438\u0433\u0440\u0435" },
|
||||||
|
{
|
||||||
|
"id": 174773,
|
||||||
|
"title": "\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u0441\u043f\u043e\u0440\u0442\u0430"
|
||||||
|
},
|
||||||
|
{ "id": 174774, "title": "\u0414\u0443\u0431\u043b\u0435\u0440" },
|
||||||
|
{
|
||||||
|
"id": 174775,
|
||||||
|
"title": "\u0421\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441"
|
||||||
|
},
|
||||||
|
{ "id": 174776, "title": "1+1" },
|
||||||
|
{ "id": 174778, "title": "\u0411\u0435\u0437\u0443\u043c\u043d\u044b\u0439 \u0441\u043f\u043e\u0440\u0442" },
|
||||||
|
{ "id": 176117, "title": "\u0414\u0435\u0442\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441" },
|
||||||
|
{ "id": 176120, "title": "\u0422\u043e\u0447\u043a\u0430" },
|
||||||
|
{ "id": 176121, "title": "\u0421\u043f\u043e\u0440\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u044c\u044e" },
|
||||||
|
{
|
||||||
|
"id": 183813,
|
||||||
|
"title": "\u0412\u0441\u0435 \u043d\u0430 \u0444\u0443\u0442\u0431\u043e\u043b: \u0410\u0444\u0438\u0448\u0430"
|
||||||
|
},
|
||||||
|
{ "id": 183814, "title": "\u0417\u0430\u043a\u0443\u043b\u0438\u0441\u044c\u0435 \u041a\u0425\u041b" },
|
||||||
|
{
|
||||||
|
"id": 183815,
|
||||||
|
"title": "\u0417\u0430\u043a\u0443\u043b\u0438\u0441\u044c\u0435 \u0427\u041c \u0441 \u0410\u043b\u0438\u0441\u043e\u0439 \u0417\u043d\u0430\u0440\u043e\u043a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 183816,
|
||||||
|
"title": "\u0411\u043e\u0439 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435"
|
||||||
|
},
|
||||||
|
{ "id": 183818, "title": "\u0418\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440 \u0417\u041e\u0416" },
|
||||||
|
{
|
||||||
|
"id": 183819,
|
||||||
|
"title": "\u0414\u0435\u043d\u044c\u0433\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u043e\u0440\u0442\u0430"
|
||||||
|
},
|
||||||
|
{ "id": 183820, "title": "\u041e\u043b\u0438\u043c\u043f\u0438\u0439\u0446\u044b.Live" },
|
||||||
|
{
|
||||||
|
"id": 183821,
|
||||||
|
"title": "\u041f\u043e\u0441\u043b\u0435 \u0444\u0443\u0442\u0431\u043e\u043b\u0430 \u0441 \u0413\u0435\u043e\u0440\u0433\u0438\u0435\u043c \u0427\u0435\u0440\u0434\u0430\u043d\u0446\u0435\u0432\u044b\u043c"
|
||||||
|
},
|
||||||
|
{ "id": 183822, "title": "\u0414\u0435\u0441\u044f\u0442\u043a\u0430" },
|
||||||
|
{ "id": 183824, "title": "\u0412\u0441\u0435 \u043d\u0430 \u0444\u0443\u0442\u0431\u043e\u043b" },
|
||||||
|
{ "id": 183825, "title": "\u0412\u0441\u0435 \u043d\u0430 \u041c\u0430\u0442\u0447!" },
|
||||||
|
{
|
||||||
|
"id": 183826,
|
||||||
|
"title": "\u041a\u0443\u0431\u043e\u043a \u0432\u043e\u0439\u043d\u044b \u0438 \u043c\u0438\u0440\u0430"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 185340,
|
||||||
|
"title": "\u0421\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u0432\u043e\u0440"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 185341,
|
||||||
|
"title": "\u0421\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0440\u0442\u0435\u0440"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 187565,
|
||||||
|
"title": "\u0422\u043e\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u0442\u0431\u043e\u043b"
|
||||||
|
},
|
||||||
|
{ "id": 188522, "title": "\u0410\u0432\u0442\u043e\u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f" },
|
||||||
|
{
|
||||||
|
"id": 195075,
|
||||||
|
"title": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430 \u043f\u0440\u043e\u043a\u0430\u0447\u043a\u0443 "
|
||||||
|
},
|
||||||
|
{ "id": 195076, "title": "\u0411\u0435\u0448\u0435\u043d\u0430\u044f \u0441\u0443\u0448\u043a\u0430" },
|
||||||
|
{ "id": 195079, "title": "\u0411\u043b\u0438\u0446" },
|
||||||
|
{ "id": 195510, "title": "\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u0448\u043e\u0443" },
|
||||||
|
{
|
||||||
|
"id": 195771,
|
||||||
|
"title": "\u0423\u0442\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043b\u0430\u0432\u043e\u0439"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 198090,
|
||||||
|
"title": "\u0420\u043e\u0441\u0441\u0438\u044f \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u0430\u044f"
|
||||||
|
},
|
||||||
|
{ "id": 198535, "title": "\u0414\u0435\u043d\u044c \u0418\u043a\u0441" },
|
||||||
|
{ "id": 199051, "title": "\u0412\u044d\u043b\u043a\u0430\u043c \u0442\u0443 \u0420\u0430\u0448\u0430" },
|
||||||
|
{ "id": 199111, "title": "\u041d\u0430\u0448\u0438 \u043d\u0430 \u0427\u041c" },
|
||||||
|
{ "id": 199112, "title": "\u0420\u043e\u0441\u0441\u0438\u044f \u0436\u0434\u0435\u0442! " },
|
||||||
|
{
|
||||||
|
"id": 199117,
|
||||||
|
"title": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0431\u043e\u0440\u043d\u043e\u0439"
|
||||||
|
},
|
||||||
|
{ "id": 199447, "title": "\u041d\u0430\u0448\u0438 \u043f\u043e\u0431\u0435\u0434\u044b" },
|
||||||
|
{
|
||||||
|
"id": 199675,
|
||||||
|
"title": "\u0427\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u043c\u0438\u0440\u0430. Live"
|
||||||
|
},
|
||||||
|
{ "id": 201543, "title": "\u0428\u0435\u043b\u043a\u043e\u0432\u044b\u0439 \u043f\u0443\u0442\u044c" },
|
||||||
|
{
|
||||||
|
"id": 203403,
|
||||||
|
"title": "\u0422\u0430\u0435\u0442 \u043b\u0435\u0434 \u0441 \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u042f\u0433\u0443\u0434\u0438\u043d\u044b\u043c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204089,
|
||||||
|
"title": "\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u0442\u0431\u043e\u043b"
|
||||||
|
},
|
||||||
|
{ "id": 204096, "title": "\u0412\u0441\u0435 \u043d\u0430 \u0445\u043e\u043a\u043a\u0435\u0439" },
|
||||||
|
{ "id": 204138, "title": "\u041d\u043e\u0432\u043e\u0441\u0442\u0438" },
|
||||||
|
{ "id": 204186, "title": "\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0440\u0442" },
|
||||||
|
{ "id": 204582, "title": "\u0413\u0435\u043d \u043f\u043e\u0431\u0435\u0434\u044b" },
|
||||||
|
{ "id": 204593, "title": "\u0424\u0443\u0442\u0411\u043e\u043b\u044c\u043d\u043e" },
|
||||||
|
{ "id": 204848, "title": "\u041a\u0438\u0431\u0435\u0440\u0430\u0442\u043b\u0435\u0442\u0438\u043a\u0430" },
|
||||||
|
{ "id": 205028, "title": "\u041a\u0443\u0440\u0441 \u0415\u0432\u0440\u043e" },
|
||||||
|
{ "id": 205174, "title": "\u0421\u0430\u043c\u044b\u0435 \u0441\u0438\u043b\u044c\u043d\u044b\u0435" },
|
||||||
|
{ "id": 206192, "title": "\u0412\u0430\u043d\u043a\u0443\u0432\u0435\u0440. Live" },
|
||||||
|
{ "id": 206286, "title": "\u0414\u0430\u043a\u0430\u0440-2019" },
|
||||||
|
{ "id": 206303, "title": "\u041a\u0430\u0436\u0434\u043e\u043c\u0443 - \u0441\u043f\u043e\u0440\u0442" },
|
||||||
|
{ "id": 206587, "title": "\u041a\u0430\u0442\u0430\u0440 Live" },
|
||||||
|
{ "id": 206631, "title": "\u041a\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0435 \u0438\u0433\u0440\u044b" },
|
||||||
|
{ "id": 207868, "title": "\u0412\u0441\u0435 \u043d\u0430 \u043b\u044b\u0436\u0438!" },
|
||||||
|
{
|
||||||
|
"id": 208192,
|
||||||
|
"title": "\u0414\u043d\u0435\u0432\u043d\u0438\u043a \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0430\u0434\u044b "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208377,
|
||||||
|
"title": "\u0422\u0440\u0435\u043d\u0435\u0440\u0441\u043a\u0438\u0439 \u0448\u0442\u0430\u0431"
|
||||||
|
},
|
||||||
|
{ "id": 208446, "title": "\u041a\u0430\u043f\u0438\u0442\u0430\u043d\u044b" },
|
||||||
|
{
|
||||||
|
"id": 208506,
|
||||||
|
"title": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208625,
|
||||||
|
"title": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b"
|
||||||
|
},
|
||||||
|
{ "id": 208750, "title": "\u0418\u0433\u0440\u0430\u0435\u043c \u0437\u0430 \u0432\u0430\u0441" },
|
||||||
|
{ "id": 209068, "title": "\u041c\u0430\u0441\u0442\u0435\u0440 \u0441\u043f\u043e\u0440\u0442\u0430" },
|
||||||
|
{
|
||||||
|
"id": 209349,
|
||||||
|
"title": "\u041d\u0435\u0438\u0437\u0432\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0445\u043e\u043a\u043a\u0435\u0439\u043d\u0430\u044f \u0420\u043e\u0441\u0441\u0438\u044f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 213332,
|
||||||
|
"title": "\u0413\u0440\u0430\u043d-\u043f\u0440\u0438 \u0441 \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041f\u043e\u043f\u043e\u0432\u044b\u043c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17829286,
|
||||||
|
"title": "\u0424\u0443\u0442\u0431\u043e\u043b. \u0427\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u043c\u0438\u0440\u0430-2026. \u0421\u0435\u043d\u0435\u0433\u0430\u043b - \u0418\u0440\u0430\u043a. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u041a\u0430\u043d\u0430\u0434\u044b [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782542400,
|
||||||
|
"finish": 1782550500,
|
||||||
|
"startTime": "2026-06-27T09:40:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T11:55:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17829286-1782495234.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"weight": 2,
|
||||||
|
"alias": "premier",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440",
|
||||||
|
"description": "\u003Cp\u003E\u041f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e\u0026nbsp;\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u0435:\u003C\/p\u003E\u003Cul\u003E\u003Cli\u003E\u0432\u0441\u0435 \u043c\u0430\u0442\u0447\u0438 \u041c\u0418\u0420 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u041f\u0440\u0435\u043c\u044c\u0435\u0440-\u041b\u0438\u0433\u0438;\u003C\/li\u003E\u003Cli\u003E\u043a\u0443\u0431\u043a\u043e\u0432\u044b\u0435 \u043c\u0430\u0442\u0447\u0438 \u0438\u0026nbsp;\u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u0441\u043a\u0438\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043a\u043b\u0443\u0431\u043e\u0432 \u0420\u041f\u041b;\u003Cbr\u003E\u003C\/li\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u041b\u0438\u0433\u0438 PARI;\u003C\/li\u003E\u003Cli\u003E\u0438\u0433\u0440\u044b \u0441\u0431\u043e\u0440\u043d\u043e\u0439 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438\u0026nbsp;\u043c\u043e\u043b\u043e\u0434\u0435\u0436\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043d\u043e\u0439.\u003Cbr\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003E\u0422\u0430\u043a\u0436\u0435 \u0432\u0026nbsp;\u044d\u0444\u0438\u0440\u0435 \u041c\u0410\u0422\u0427 \u041f\u0420\u0415\u041c\u042c\u0415\u0420: \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u00ab8-16\u00bb, \u00ab\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b\u00bb, \u00ab\u0420\u0435\u0446\u0435\u043f\u0422\u0443\u0440\u0430\u00bb, \u0441\u0442\u0443\u0434\u0438\u0439\u043d\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438. \u0412\u0435\u0441\u044c \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0443\u0442\u0431\u043e\u043b \u0432\u0026nbsp;\u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435! \u042d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b\u0026nbsp;\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435.\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u041f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u0442\u0447\u0438 \u041c\u0418\u0420 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u041f\u0440\u0435\u043c\u044c\u0435\u0440-\u041b\u0438\u0433\u0438, \u043a\u0443\u0431\u043a\u043e\u0432\u044b\u0435 \u043c\u0430\u0442\u0447\u0438 \u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u0441\u043a\u0438\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043a\u043b\u0443\u0431\u043e\u0432 \u041c\u0438\u0440 \u0420\u041f\u041b, \u0438\u0433\u0440\u044b \u0441\u0431\u043e\u0440\u043d\u043e\u0439 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u043c\u043e\u043b\u043e\u0434\u0435\u0436\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043d\u043e\u0439 \u0438 \u00ab\u043f\u0435\u0440\u0435\u043a\u043b\u0438\u0447\u043a\u0438\u00bb \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0442\u0447\u0430\u043c\u0438, \u0438\u0434\u0443\u0449\u0438\u043c\u0438 \u0432 \u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f.\r\n\u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0444\u0438\u0440\u0435 \u041c\u0410\u0422\u0427 \u041f\u0420\u0415\u041c\u042c\u0415\u0420: \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u00ab8-16\u00bb, \u00ab\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b\u00bb, \u00ab\u0420\u0435\u0446\u0435\u043f\u0422\u0443\u0440\u0430\u00bb, \u0441\u0442\u0443\u0434\u0438\u0439\u043d\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438. \u0412\u0435\u0441\u044c \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0443\u0442\u0431\u043e\u043b \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435! \u042d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435.",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_04153373fcaa00fc4e37db89e6d7f82a\/17_91502360\/8be99f14cce8abdaa9e2dd4bc8f12c8c\/4934710878?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "41f83e48ab4a92e5afd57c6ab57b2584",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 1142310,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043c\u0430\u0442\u0447\u0435\u0439 \u0420\u041f\u041b \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0447\u0435\u0439 \u041c\u0438\u0440 \u0420\u041f\u041b, \u0438\u0433\u0440 \u041a\u0443\u0431\u043a\u0430 \u0420\u043e\u0441\u0441\u0438\u0438, \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u0441\u043a\u0438\u0445 \u0432\u0441\u0442\u0440\u0435\u0447 \u043a\u043b\u0443\u0431\u043e\u0432 \u041c\u0438\u0440 \u0420\u041f\u041b \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440\u00bb!",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/1969\/778c\/1969778c1a0e470077b19bd32648f18f.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/dd5c\/7cb6\/dd5c7cb6cf41d45010a6485dd66415d9.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/7168\/f84a\/7168f84a807771d47d5af0d7a0749ca1.svg",
|
||||||
|
"tvChannel": {
|
||||||
|
"id": 7,
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440",
|
||||||
|
"serviceTvId": 3459,
|
||||||
|
"priority": 25
|
||||||
|
},
|
||||||
|
"terms": [
|
||||||
|
{ "id": 20317, "title": "\u041c\u0438\u0440 \u0420\u041f\u041b" },
|
||||||
|
{
|
||||||
|
"id": 205664,
|
||||||
|
"title": "\u0424\u041e\u041d\u0411\u0415\u0422 \u041a\u0423\u0411\u041e\u041a \u041c\u0410\u0422\u0427 \u041f\u0420\u0415\u041c\u042c\u0415\u0420"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211845,
|
||||||
|
"title": "\u041a\u0443\u0431\u043e\u043a \u041f\u0430\u0440\u0438\u043c\u0430\u0442\u0447 \u041f\u0440\u0435\u043c\u044c\u0435\u0440"
|
||||||
|
},
|
||||||
|
{ "id": 204095, "title": "8-16" },
|
||||||
|
{ "id": 205212, "title": "\u0418\u043d\u0441\u0430\u0439\u0434\u0435\u0440\u044b" },
|
||||||
|
{
|
||||||
|
"id": 208377,
|
||||||
|
"title": "\u0422\u0440\u0435\u043d\u0435\u0440\u0441\u043a\u0438\u0439 \u0448\u0442\u0430\u0431"
|
||||||
|
},
|
||||||
|
{ "id": 208446, "title": "\u041a\u0430\u043f\u0438\u0442\u0430\u043d\u044b" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17828869,
|
||||||
|
"title": "\u0022\u0421\u043e\u0432\u0435\u0442\u0441\u043a\u0438\u0439 \u0444\u0443\u0442\u0431\u043e\u043b\u0022. \u0426\u0421\u041a\u0410 (\u041c\u043e\u0441\u043a\u0432\u0430). \u0427\u0430\u0441\u0442\u044c 2 [12+]",
|
||||||
|
"description": "\u041a\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441\u043e\u0432\u0435\u0442\u0441\u043a\u0438\u0439 \u0444\u0443\u0442\u0431\u043e\u043b? \u041a\u0430\u043a\u0438\u043c\u0438 \u0431\u044b\u043b\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0443\u0441\u043f\u0435\u0445\u0438? \u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0442\u0430\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u044d\u043f\u043e\u0445\u0438? \u041a\u0430\u043a\u043e\u0432\u044b \u0431\u044b\u043b\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0435\u0442\u0441\u043a\u043e\u0439 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u044b? \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u2014 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435!",
|
||||||
|
"start": 1782547500,
|
||||||
|
"finish": 1782549000,
|
||||||
|
"startTime": "2026-06-27T11:05:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T11:30:00+03:00",
|
||||||
|
"ageRating": "12+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17828869-1781880696.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"weight": 3,
|
||||||
|
"alias": "strana",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447! \u0421\u0442\u0440\u0430\u043d\u0430",
|
||||||
|
"description": "\u003Cp\u003E\u042d\u0442\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b, \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u044b \u0438\u0026nbsp;\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0440\u0442\u0430. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0449\u0430\u043d\u0438\u044f\u0026nbsp;\u2014 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043a\u043b\u0443\u0431\u043d\u044b\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439. \u0410\u0026nbsp;\u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442: \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0441\u043f\u0435\u0446\u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u0438\u0026nbsp;\u043f\u0440\u0435\u043c\u044c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0448 \u0441\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u043e\u0439 \u0438\u0026nbsp;\u0431\u043e\u043b\u0435\u0435\u043c \u0437\u0430 \u043d\u0430\u0448\u0438\u0445\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u042d\u0442\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b, \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u044b \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0440\u0442\u0430. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0449\u0430\u043d\u0438\u044f \u2014 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043a\u043b\u0443\u0431\u043d\u044b\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442: \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0441\u043f\u0435\u0446\u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u0438 \u043f\u0440\u0435\u043c\u044c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0448 \u0441\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u043e\u0439 \u0438 \u0431\u043e\u043b\u0435\u0435\u043c \u0437\u0430 \u043d\u0430\u0448\u0438\u0445!",
|
||||||
|
"videoPlayerCode": "https:\/\/video.matchtv.ru\/iframe\/channel\/96",
|
||||||
|
"platformVideoId": null,
|
||||||
|
"package": null,
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606417,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447! C\u0442\u0440\u0430\u043d\u0430",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0421\u0442\u0440\u0430\u043d\u0430 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0421\u0442\u0440\u0430\u043d\u0430\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0421\u0442\u0440\u0430\u043d\u0430\u00bb!",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447! C\u0442\u0440\u0430\u043d\u0430",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/492b\/2610\/492b26105962fd92ea1eb704a40d009b.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/2fd5\/d4e4\/2fd5d4e435c7c25bc29b752383b2e02e.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/a86c\/df54\/a86cdf54fdb7ab9e893986bcbbf8e017.svg",
|
||||||
|
"tvChannel": {
|
||||||
|
"id": 143,
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u0421\u0442\u0440\u0430\u043d\u0430",
|
||||||
|
"serviceTvId": 3568,
|
||||||
|
"priority": 28
|
||||||
|
},
|
||||||
|
"terms": [
|
||||||
|
{ "id": 207869, "title": "\u041c\u0430\u0442\u0447 \u0421\u0442\u0440\u0430\u043d\u0430" },
|
||||||
|
{ "id": 183823, "title": "\u0412\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443" },
|
||||||
|
{
|
||||||
|
"id": 208192,
|
||||||
|
"title": "\u0414\u043d\u0435\u0432\u043d\u0438\u043a \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0430\u0434\u044b "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208212,
|
||||||
|
"title": "\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0430\u0434\u0430-2019. \u0421\u0442\u0443\u0434\u0438\u044f"
|
||||||
|
},
|
||||||
|
{ "id": 208507, "title": "\u0421\u0442\u0440\u0430\u043d\u0430.Live" },
|
||||||
|
{
|
||||||
|
"id": 208508,
|
||||||
|
"title": "\u0421\u0442\u0440\u0430\u043d\u0430 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u0430\u044f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208958,
|
||||||
|
"title": "\u0421\u0442\u0440\u0430\u043d\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0441\u043f\u043e\u0440\u0442"
|
||||||
|
},
|
||||||
|
{ "id": 211925, "title": "\u0418\u0433\u0440\u044b \u043a\u043e\u0440\u043e\u043b\u0435\u0439" },
|
||||||
|
{ "id": 211926, "title": "\u041f\u043e\u0440\u0430 \u043d\u0430 \u0442\u0435\u043d\u043d\u0438\u0441" },
|
||||||
|
{ "id": 252187, "title": "\u041b\u0438\u0446\u0430 \u0441\u0442\u0440\u0430\u043d\u044b" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17830233,
|
||||||
|
"title": "\u0421\u0430\u043c\u0431\u043e. \u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u0420\u043e\u0441\u0441\u0438\u0438. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u041c\u043e\u0441\u043a\u0432\u044b [12+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782547500,
|
||||||
|
"finish": 1782551700,
|
||||||
|
"startTime": "2026-06-27T11:05:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T12:15:00+03:00",
|
||||||
|
"ageRating": "12+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17830233-1782222276.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"weight": 4,
|
||||||
|
"alias": "futbol-1",
|
||||||
|
"name": "\u0424\u0443\u0442\u0431\u043e\u043b 1 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u003Cp\u003E\u0424\u0443\u0442\u0431\u043e\u043b\u0026nbsp;1,2,3\u0026nbsp;\u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432\u0026nbsp;\u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0026nbsp;\u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435:\u003Cbr\u003E\u003C\/p\u003E\u003Cul\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438\u0026nbsp;\u043b\u0438\u0433;\u003C\/li\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0437\u0430\u0026nbsp;\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430;\u003C\/li\u003E\u003Cli\u003E\u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b;\u003C\/li\u003E\u003Cli\u003E\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0026nbsp;\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430.\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003E\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u0026nbsp;\u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u043f\u043e\u0432\u044b\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u043e\u043c \u0432\u0026nbsp;\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043b\u0443\u0447\u0448\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0026nbsp;\u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432!\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u0424\u0443\u0442\u0431\u043e\u043b 1,2,3 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043b\u0438\u0433, \u043c\u0430\u0442\u0447\u0438 \u0437\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443.",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_8546b1b795cf43e91e6cbb319db40fea\/17_97595835\/f119d3c8f364d6a7f3747fecf47c70ea\/4934710873?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "df213c9c6dc3669522dc77447bf69bdf",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 1044754,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u0424\u0443\u0442\u0431\u043e\u043b 1 | \u041f\u0430\u043a\u0435\u0442 \u0421\u043f\u043e\u0440\u0442",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 1 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0447\u0435\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 1\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043c\u0430\u0442\u0447\u0435\u0439 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043a\u0443\u0431\u043a\u043e\u0432, \u043e\u0431\u0437\u043e\u0440\u044b \u0438\u0433\u0440 \u0438 \u0442\u0443\u0440\u043e\u0432, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 1\u00bb!",
|
||||||
|
"seoKeywords": "\u0424\u0443\u0442\u0431\u043e\u043b 1",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/042c\/80f5\/042c80f5a8074b9d3458af1561ba5ec0.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/b407\/d1aa\/b407d1aa02288bdfcc7f9736645693d5.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/964b\/5631\/964b5631bc31a3141083cbd8520993f1.svg",
|
||||||
|
"tvChannel": { "id": 8, "name": "\u0424\u0443\u0442\u0431\u043e\u043b 1", "serviceTvId": 205, "priority": 50 },
|
||||||
|
"terms": [
|
||||||
|
{ "id": 118, "title": "\u0424\u0443\u0442\u0431\u043e\u043b" },
|
||||||
|
{ "id": 213528, "title": "\u0424\u0443\u0442\u0431\u043e\u043b 1" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17828977,
|
||||||
|
"title": "\u0427\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u043c\u0438\u0440\u0430-2026. \u0423\u0440\u0443\u0433\u0432\u0430\u0439 - \u0418\u0441\u043f\u0430\u043d\u0438\u044f. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u041c\u0435\u043a\u0441\u0438\u043a\u0438 [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782547800,
|
||||||
|
"finish": 1782555300,
|
||||||
|
"startTime": "2026-06-27T11:10:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T13:15:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17828977-1782307268.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"weight": 5,
|
||||||
|
"alias": "futbol-2",
|
||||||
|
"name": "\u0424\u0443\u0442\u0431\u043e\u043b 2 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u003Cp\u003E\u0424\u0443\u0442\u0431\u043e\u043b\u0026nbsp;1,2,3\u0026nbsp;\u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432\u0026nbsp;\u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0026nbsp;\u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435:\u003Cbr\u003E\u003C\/p\u003E\u003Cul\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438\u0026nbsp;\u043b\u0438\u0433;\u003C\/li\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0437\u0430\u0026nbsp;\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430;\u003C\/li\u003E\u003Cli\u003E\u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b;\u003C\/li\u003E\u003Cli\u003E\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0026nbsp;\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430.\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003E\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u0026nbsp;\u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u043f\u043e\u0432\u044b\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u043e\u043c \u0432\u0026nbsp;\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043b\u0443\u0447\u0448\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0026nbsp;\u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432!\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u0424\u0443\u0442\u0431\u043e\u043b 1,2,3 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043b\u0438\u0433, \u043c\u0430\u0442\u0447\u0438 \u0437\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443. \r\n\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u043f\u043e\u0432\u044b\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u043e\u043c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043b\u0443\u0447\u0448\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432!",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_79df03f3381d2bac53c7dbce81bf1003\/17_900a338a44154bfccc74e8b251cb4850\/aa7c274e64856c35114ee0ddfc50dfb4\/4934710899?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "900a338a44154bfccc74e8b251cb4850",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606437,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u0424\u0443\u0442\u0431\u043e\u043b 2 | \u041f\u0430\u043a\u0435\u0442 \u0421\u043f\u043e\u0440\u0442",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 2 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0447\u0435\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 2\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043c\u0430\u0442\u0447\u0435\u0439 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043a\u0443\u0431\u043a\u043e\u0432, \u043e\u0431\u0437\u043e\u0440\u044b \u0438\u0433\u0440 \u0438 \u0442\u0443\u0440\u043e\u0432, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 2\u00bb!",
|
||||||
|
"seoKeywords": "\u0424\u0443\u0442\u0431\u043e\u043b 2",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/ab60\/61f4\/ab6061f4cecf5112c21bd1e549f467dc.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/7013\/6755\/701367555ed778b6fac513ec9060b43e.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/1c9d\/f020\/1c9df020717d419561cac6c7b439dc00.svg",
|
||||||
|
"tvChannel": { "id": 14, "name": "\u0424\u0443\u0442\u0431\u043e\u043b 2", "serviceTvId": 1261, "priority": 60 },
|
||||||
|
"terms": [
|
||||||
|
{ "id": 118, "title": "\u0424\u0443\u0442\u0431\u043e\u043b" },
|
||||||
|
{ "id": 213529, "title": "\u0424\u0443\u0442\u0431\u043e\u043b 2" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17829068,
|
||||||
|
"title": "\u0427\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u0418\u0441\u043f\u0430\u043d\u0438\u0438. \u0411\u0430\u0440\u0441\u0435\u043b\u043e\u043d\u0430 - \u0410\u043b\u0430\u0432\u0435\u0441 [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782543600,
|
||||||
|
"finish": 1782550800,
|
||||||
|
"startTime": "2026-06-27T10:00:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T12:00:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17829068-1782282983.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"weight": 6,
|
||||||
|
"alias": "futbol-3",
|
||||||
|
"name": "\u0424\u0443\u0442\u0431\u043e\u043b 3 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u003Cp\u003E\u0424\u0443\u0442\u0431\u043e\u043b\u0026nbsp;1,2,3\u0026nbsp;\u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432\u0026nbsp;\u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0026nbsp;\u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435:\u003Cbr\u003E\u003C\/p\u003E\u003Cul\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438\u0026nbsp;\u043b\u0438\u0433;\u003C\/li\u003E\u003Cli\u003E\u043c\u0430\u0442\u0447\u0438 \u0437\u0430\u0026nbsp;\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430;\u003C\/li\u003E\u003Cli\u003E\u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b;\u003C\/li\u003E\u003Cli\u003E\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0026nbsp;\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430.\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003E\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0438\u0026nbsp;\u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u043f\u043e\u0432\u044b\u043c \u0444\u0443\u0442\u0431\u043e\u043b\u043e\u043c \u0432\u0026nbsp;\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043b\u0443\u0447\u0448\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0026nbsp;\u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432!\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u0424\u0443\u0442\u0431\u043e\u043b 1,2,3 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0430\u0442\u0447\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043b\u0438\u0433, \u043c\u0430\u0442\u0447\u0438 \u0437\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0443\u0431\u043a\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u043e\u0442\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443.",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_1f8dc610f3a99c722390b4da99c3eb97\/17_c21e41488d60529b326f403d57bfc904\/629c2077843e3af30d42fedd5c694a43\/4934710893?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "c21e41488d60529b326f403d57bfc904",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606433,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u0424\u0443\u0442\u0431\u043e\u043b 3",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 3 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0447\u0435\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 3\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043c\u0430\u0442\u0447\u0435\u0439 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0444\u0443\u0442\u0431\u043e\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432 \u0438 \u043a\u0443\u0431\u043a\u043e\u0432, \u043e\u0431\u0437\u043e\u0440\u044b \u0438\u0433\u0440 \u0438 \u0442\u0443\u0440\u043e\u0432, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0424\u0443\u0442\u0431\u043e\u043b 3\u00bb!",
|
||||||
|
"seoKeywords": "\u0424\u0443\u0442\u0431\u043e\u043b 3",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/3d63\/1cbe\/3d631cbef4cc0b09408fc9ac1ada1a99.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/e434\/26c6\/e43426c648c7fb88f7e4dd0bd0dbf503.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/9baa\/c2fe\/9baac2fecd8a8a19f8e7072eb6c87cc7.svg",
|
||||||
|
"tvChannel": { "id": 140, "name": "\u0424\u0443\u0442\u0431\u043e\u043b 3", "serviceTvId": 2305, "priority": 70 },
|
||||||
|
"terms": [
|
||||||
|
{ "id": 118, "title": "\u0424\u0443\u0442\u0431\u043e\u043b" },
|
||||||
|
{ "id": 213530, "title": "\u0424\u0443\u0442\u0431\u043e\u043b 3" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17829808,
|
||||||
|
"title": "\u0427\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442 \u0411\u0440\u0430\u0437\u0438\u043b\u0438\u0438. \u0022\u041a\u043e\u0440\u0438\u0442\u0438\u0431\u0430\u0022 - \u0022\u0411\u0430\u0438\u044f\u0022 [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782543600,
|
||||||
|
"finish": 1782550800,
|
||||||
|
"startTime": "2026-06-27T10:00:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T12:00:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17829808-1781881048.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"weight": 7,
|
||||||
|
"alias": "boec",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u0422\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447 \u0411\u043e\u0435\u0446\u0026nbsp;\u2014 \u044d\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u0440\u044f\u043c\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0439 \u0438\u0437\u0026nbsp;\u0440\u0438\u043d\u0433\u0430 \u0438\u0026nbsp;\u043e\u043a\u0442\u0430\u0433\u043e\u043d\u0430. \u0411\u043e\u043a\u0441, \u041c\u041c\u0410, \u043a\u0438\u043a\u0431\u043e\u043a\u0441\u0438\u043d\u0433, \u0441\u0430\u043c\u0431\u043e \u0438\u0026nbsp;\u0431\u043e\u0440\u044c\u0431\u0430, \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u043e\u0431\u043e\u0440\u0441\u0442\u0432\u0430 \u0438\u0026nbsp;\u043d\u0435\u0026nbsp;\u0442\u043e\u043b\u044c\u043a\u043e. \u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u043e\u0435\u0434\u0438\u043d\u043a\u0438 \u043e\u0442\u0026nbsp;\u043f\u0440\u043e\u043c\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u0440\u0430: \u0431\u043e\u0438 \u043b\u0435\u0433\u0435\u043d\u0434 \u0438\u0026nbsp;\u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0437\u0432\u0435\u0437\u0434. \u041c\u0430\u0442\u0447 \u0411\u043e\u0435\u0446\u0026nbsp;\u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0431\u043e\u0435\u0432\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e!\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u0422\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447 \u0411\u043e\u0435\u0446 \u2014 \u044d\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u0440\u044f\u043c\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0439 \u0438\u0437 \u0440\u0438\u043d\u0433\u0430 \u0438 \u043e\u043a\u0442\u0430\u0433\u043e\u043d\u0430. \u0411\u043e\u043a\u0441, \u041c\u041c\u0410, \u043a\u0438\u043a\u0431\u043e\u043a\u0441\u0438\u043d\u0433, \u0441\u0430\u043c\u0431\u043e \u0438 \u0431\u043e\u0440\u044c\u0431\u0430, \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u043e\u0431\u043e\u0440\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e. \u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u043e\u0435\u0434\u0438\u043d\u043a\u0438 \u043e\u0442 \u043f\u0440\u043e\u043c\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u0440\u0430: \u0431\u043e\u0438 \u043b\u0435\u0433\u0435\u043d\u0434 \u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0437\u0432\u0435\u0437\u0434. \u041c\u0430\u0442\u0447 \u0411\u043e\u0435\u0446 \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0431\u043e\u0435\u0432\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e!",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_8e011e545b9aa539a9e585eb0015d0d4\/17_6a6ffd269d21331c36923698e5058dff\/27a704d2e26671812d744beb5f2174a9\/4934710901?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "6a6ffd269d21331c36923698e5058dff",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606425,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446 | \u041f\u0430\u043a\u0435\u0442 \u0421\u043f\u043e\u0440\u0442",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u041c\u041c\u0410 \u0438 \u0431\u043e\u043a\u0441\u0430 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0442\u0443\u0440\u043d\u0438\u0440\u043e\u0432 \u043f\u043e \u041c\u041c\u0410, \u0431\u043e\u0435\u0432 \u043f\u043e \u0431\u043e\u043a\u0441\u0443, \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0435\u0434\u0438\u043d\u043e\u0431\u043e\u0440\u0441\u0442\u0432\u0430\u043c, \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446\u00bb!",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446",
|
||||||
|
"seoMeta": "\u003Clink rel=\u0022canonical\u0022 href=\u0022https:\/\/matchtv.ru\/channel\/boec\u0022\u003E",
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/a5ee\/374a\/a5ee374ac3cfa8d2ad130bf37a29a53b.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/5b37\/7bf3\/5b377bf386985eb0bc00c7f727c045c6.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/dfd7\/8054\/dfd78054f3b2b5a3ee14c527632ce48f.svg",
|
||||||
|
"tvChannel": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u0411\u043e\u0435\u0446",
|
||||||
|
"serviceTvId": 554,
|
||||||
|
"priority": 100
|
||||||
|
},
|
||||||
|
"terms": [
|
||||||
|
{ "id": 175983, "title": "\u0411\u043e\u043a\u0441\/MMA" },
|
||||||
|
{ "id": 213534, "title": "\u041c\u0430\u0442\u0447! \u0411\u043e\u0435\u0446" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17828753,
|
||||||
|
"title": "\u0411\u043e\u043a\u0441. Bare Knuckle FC. \u041a\u044d\u043c\u0435\u0440\u043e\u043d \u0412\u0430\u043d\u043a\u0430\u043c\u043f \u043f\u0440\u043e\u0442\u0438\u0432 \u0413\u0440\u0435\u0433\u043e\u0440\u0438\u0441\u0430 \u0421\u0438\u0441\u043d\u0435\u0440\u043e\u0441\u0430. \u0410\u0440\u043d\u043e\u043b\u044c\u0434 \u0410\u0434\u0430\u043c\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 \u0421\u0442\u0438\u0432\u0430 \u0411\u044d\u043d\u043a\u0441. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u0421\u0428\u0410 [16+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782541800,
|
||||||
|
"finish": 1782550500,
|
||||||
|
"startTime": "2026-06-27T09:30:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T11:55:00+03:00",
|
||||||
|
"ageRating": "16+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17828753-1781880649.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"weight": 9,
|
||||||
|
"alias": "arena",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u0421\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0026nbsp;\u0431\u0438\u0430\u0442\u043b\u043e\u043d\u0443 \u0438\u0026nbsp;\u043b\u044b\u0436\u043d\u044b\u043c \u0433\u043e\u043d\u043a\u0430\u043c, \u0444\u0438\u0433\u0443\u0440\u043d\u043e\u043c\u0443 \u043a\u0430\u0442\u0430\u043d\u0438\u044e \u0438\u0026nbsp;\u043f\u043b\u0430\u0432\u0430\u043d\u0438\u044e, \u043b\u0435\u0433\u043a\u043e\u0439 \u0430\u0442\u043b\u0435\u0442\u0438\u043a\u0435 \u0438\u0026nbsp;\u0430\u0432\u0442\u043e\u0441\u043f\u043e\u0440\u0442\u0443\u0026nbsp;\u2014 \u043d\u0430\u0026nbsp;\u041c\u0430\u0442\u0447 \u0410\u0440\u0435\u043d\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u0438\u0434\u044b, \u0433\u0434\u0435 \u0443\u0441\u043f\u0435\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u0026nbsp;\u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430!\u003Cp\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u0421\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0431\u0438\u0430\u0442\u043b\u043e\u043d\u0443 \u0438 \u043b\u044b\u0436\u043d\u044b\u043c \u0433\u043e\u043d\u043a\u0430\u043c, \u0444\u0438\u0433\u0443\u0440\u043d\u043e\u043c\u0443 \u043a\u0430\u0442\u0430\u043d\u0438\u044e \u0438 \u043f\u043b\u0430\u0432\u0430\u043d\u0438\u044e, \u043b\u0435\u0433\u043a\u043e\u0439 \u0430\u0442\u043b\u0435\u0442\u0438\u043a\u0435 \u0438 \u0430\u0432\u0442\u043e\u0441\u043f\u043e\u0440\u0442\u0443 \u2014 \u043d\u0430 \u041c\u0430\u0442\u0447 \u0410\u0440\u0435\u043d\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u0438\u0434\u044b, \u0433\u0434\u0435 \u0443\u0441\u043f\u0435\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430!",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_a26972ccc9ac0100160dc6dbddf8e692\/17_9a32d7c6e26c38cbf12eac3bdb76849c\/764c339814404f3aec301f92f46f3249\/4934710917?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "9a32d7c6e26c38cbf12eac3bdb76849c",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606429,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u0431\u0438\u0430\u0442\u043b\u043e\u043d\u0443, \u043b\u044b\u0436\u043d\u044b\u043c \u0433\u043e\u043d\u043a\u0430\u043c, \u043b\u0435\u0433\u043a\u043e\u0439 \u0430\u0442\u043b\u0435\u0442\u0438\u043a\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u0432\u0438\u0434\u0430\u043c \u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430\u00bb!",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/f768\/e9e1\/f768e9e1e6f4580f69c916d5f5a16132.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/44a3\/6689\/44a366893d98e8cfc1c1491ea5bce6de.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/f2f6\/45b7\/f2f645b7cf0962908fdb5bb485bd0cad.svg",
|
||||||
|
"tvChannel": {
|
||||||
|
"id": 137,
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u0410\u0440\u0435\u043d\u0430",
|
||||||
|
"serviceTvId": 2944,
|
||||||
|
"priority": 80
|
||||||
|
},
|
||||||
|
"terms": [
|
||||||
|
{ "id": 38, "title": "\u0424\u043e\u0440\u043c\u0443\u043b\u0430-1" },
|
||||||
|
{ "id": 12218, "title": "\u0410\u0432\u0442\u043e\u0441\u043f\u043e\u0440\u0442" },
|
||||||
|
{
|
||||||
|
"id": 160328,
|
||||||
|
"title": "\u0415\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0435 \u0438\u0433\u0440\u044b"
|
||||||
|
},
|
||||||
|
{ "id": 176009, "title": "\u041b\u0435\u0442\u043d\u0438\u0435 \u0432\u0438\u0434\u044b" },
|
||||||
|
{ "id": 213531, "title": "\u041c\u0430\u0442\u0447! \u0410\u0440\u0435\u043d\u0430" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17829580,
|
||||||
|
"title": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u043b\u0430\u0432\u0430\u043d\u0438\u0435. \u041a\u0443\u0431\u043e\u043a \u043c\u0438\u0440\u0430. \u0414\u0443\u044d\u0442\u044b. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u041a\u0438\u0442\u0430\u044f [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782540900,
|
||||||
|
"finish": 1782549300,
|
||||||
|
"startTime": "2026-06-27T09:15:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T11:35:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17829580-1781880962.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"weight": 10,
|
||||||
|
"alias": "igra",
|
||||||
|
"name": "\u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"description": "\u003Cp\u003E\u042d\u0442\u043e\u0442 \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u043c \u0432\u0438\u0434\u0430\u043c \u0441\u043f\u043e\u0440\u0442\u0430. \u041d\u0430\u0026nbsp;\u00ab\u0418\u0433\u0440\u0435\u00bb\u0026nbsp;\u2014 \u0442\u043e\u043f\u043e\u0432\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b \u043f\u043e\u0026nbsp;\u0431\u0430\u0441\u043a\u0435\u0442\u0431\u043e\u043b\u0443, \u0433\u0430\u043d\u0434\u0431\u043e\u043b\u0443, \u0432\u043e\u043b\u0435\u0439\u0431\u043e\u043b\u0443 \u0438\u0026nbsp;\u043d\u0435\u0026nbsp;\u0442\u043e\u043b\u044c\u043a\u043e. \u0410\u0026nbsp;\u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432\u0026nbsp;\u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0026nbsp;\u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0442\u0434\u0430\u0447\u0435\u0439!\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E",
|
||||||
|
"shortDescription": "\u042d\u0442\u043e\u0442 \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u043c \u0432\u0438\u0434\u0430\u043c \u0441\u043f\u043e\u0440\u0442\u0430. \u041d\u0430 \u00ab\u0418\u0433\u0440\u0435\u00bb \u2014 \u0442\u043e\u043f\u043e\u0432\u044b\u0435 \u0442\u0443\u0440\u043d\u0438\u0440\u044b \u043f\u043e \u0431\u0430\u0441\u043a\u0435\u0442\u0431\u043e\u043b\u0443, \u0433\u0430\u043d\u0434\u0431\u043e\u043b\u0443, \u0432\u043e\u043b\u0435\u0439\u0431\u043e\u043b\u0443 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e. \u0410 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0442\u0434\u0430\u0447\u0435\u0439!",
|
||||||
|
"videoPlayerCode": "\/\/video.matchtv.ru\/iframe\/feed\/start\/na_5e5f7b66fb3f1deb56f706bef2366edf\/17_76666997491217f4514cc1c9316ab99d\/791e47a7b142fe09d5040cc98caf676e\/4934710916?sr=14\u0026type_id=\u0026width=100%25\u0026height=100%25\u0026iframe_width=100%25\u0026iframe_height=100%25\u0026lang=ru\u0026skin_name=matchtv",
|
||||||
|
"platformVideoId": "76666997491217f4514cc1c9316ab99d",
|
||||||
|
"package": "16",
|
||||||
|
"isNeedAuthorization": false,
|
||||||
|
"webcasterVideoId": 606421,
|
||||||
|
"chatRoomId": null,
|
||||||
|
"seoH1": "\u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430 | \u041c! \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c",
|
||||||
|
"seoTitle": "\u041a\u0430\u043d\u0430\u043b \u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430 - \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u043e\u043d\u043b\u0430\u0439\u043d, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435",
|
||||||
|
"seoDescription": "\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u043a\u0430\u043d\u0430\u043b\u0430 \u00ab\u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430\u00bb - \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043e\u043d\u043b\u0430\u0439\u043d \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u00ab\u041c\u0430\u0442\u0447 \u0422\u0412\u00bb. \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0440\u0435\u043f\u043e\u0440\u0442\u0430\u0436\u0438, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u00ab\u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430\u00bb!",
|
||||||
|
"seoKeywords": "\u041c\u0430\u0442\u0447! \u0418\u0433\u0440\u0430",
|
||||||
|
"seoMeta": null,
|
||||||
|
"seoText": null,
|
||||||
|
"imageUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/e939\/2d16\/e9392d16bb9fbda00953e29d7a3af284.jpg",
|
||||||
|
"thumbnailUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/6b45\/0490\/6b4504901702d992df910d8072e67eee.png",
|
||||||
|
"iconUrl": "https:\/\/fb-cdn.matchtv.ru\/files\/default\/upload\/195d\/f488\/195df488b284a339df19aaa6660a70cd.svg",
|
||||||
|
"tvChannel": {
|
||||||
|
"id": 138,
|
||||||
|
"name": "\u041c\u0430\u0442\u0447 \u0418\u0433\u0440\u0430",
|
||||||
|
"serviceTvId": 2945,
|
||||||
|
"priority": 90
|
||||||
|
},
|
||||||
|
"terms": [
|
||||||
|
{ "id": 45, "title": "\u0411\u0430\u0441\u043a\u0435\u0442\u0431\u043e\u043b" },
|
||||||
|
{ "id": 169, "title": "\u0422\u0435\u043d\u043d\u0438\u0441" },
|
||||||
|
{ "id": 178, "title": "\u0412\u043e\u043b\u0435\u0439\u0431\u043e\u043b" }
|
||||||
|
],
|
||||||
|
"currentTvTransmissions": [
|
||||||
|
{
|
||||||
|
"id": 17829708,
|
||||||
|
"title": "\u0412\u043e\u043b\u0435\u0439\u0431\u043e\u043b. \u041a\u0443\u0431\u043e\u043a \u0420\u043e\u0441\u0441\u0438\u0438. \u0416\u0435\u043d\u0449\u0438\u043d\u044b. \u0424\u0438\u043d\u0430\u043b \u0448\u0435\u0441\u0442\u0438. 1\/2 \u0444\u0438\u043d\u0430\u043b\u0430. \u0022\u0414\u0438\u043d\u0430\u043c\u043e\u0022 (\u041c\u043e\u0441\u043a\u0432\u0430) - \u0022\u0423\u0440\u0430\u043b\u043e\u0447\u043a\u0430-\u041d\u0422\u041c\u041a\u0022 (\u0421\u0432\u0435\u0440\u0434\u043b\u043e\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c). \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0438\u0437 \u041c\u043e\u0441\u043a\u0432\u044b [6+]",
|
||||||
|
"description": "",
|
||||||
|
"start": 1782544500,
|
||||||
|
"finish": 1782554100,
|
||||||
|
"startTime": "2026-06-27T10:15:00+03:00",
|
||||||
|
"finishTime": "2026-06-27T12:55:00+03:00",
|
||||||
|
"ageRating": "6+",
|
||||||
|
"sourceImagePath": "https:\/\/s-cdn.sportbox.ru\/images\/tv_transmission\/17829708-1782195506.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,5 +6,6 @@ YANDEXTV_MOCK_SOURCE = MockSource(
|
|||||||
Path(__file__).parent,
|
Path(__file__).parent,
|
||||||
{
|
{
|
||||||
"test": "test.html",
|
"test": "test.html",
|
||||||
|
"suggest-tv2": "suggest-tv2.json",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
423
tests/data/yandextv/suggest-tv2.json
Normal file
423
tests/data/yandextv/suggest-tv2.json
Normal file
@@ -0,0 +1,423 @@
|
|||||||
|
[
|
||||||
|
"матч",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч!",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/channels\/1593",
|
||||||
|
"target": "_self",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "icon",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "l"
|
||||||
|
},
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/48x72",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/48x68",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/48x72",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/48x68",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/64x36",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/64x36",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/80x60",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/80x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/80x60",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/80x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/120x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/120x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/130x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/130x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/214x121",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/368x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/184x140",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/428x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/z",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/170x100",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/340x200",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/260x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x120",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/214x121",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/368x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/184x140",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/428x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/z",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/170x100",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/340x200",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/260x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x120",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/160x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016e2603ad95657bcd08dc16bad081\/orig",
|
||||||
|
"attrs": {
|
||||||
|
"style": "margin-right: 5px;"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"content": "Матч!"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"label": "Каналы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч Премьер",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/channels\/1861",
|
||||||
|
"target": "_self",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "icon",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "l"
|
||||||
|
},
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/80x60",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/80x60",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/120x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/120x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/130x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/130x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/184x140",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x120",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/260x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/428x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/340x200",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/z",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/214x121",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/368x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/170x100",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/184x140",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x120",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x90",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/260x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/428x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/340x200",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/z",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/214x121",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/160x160",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/368x280",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/170x100",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/28884\/2a00000164ea55a8e4e47294c57caf3f249c\/orig",
|
||||||
|
"attrs": {
|
||||||
|
"style": "margin-right: 5px;"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"content": "Матч Премьер"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"label": "Каналы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч! Арена",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/channels\/1667",
|
||||||
|
"target": "_self",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "icon",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "l"
|
||||||
|
},
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a00000160080262b3c5f1b231e9c1a50c16\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a00000160080262b3c5f1b231e9c1a50c16\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/30303\/2a0000016008026461f08cb3fdd86e3a2457\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/30303\/2a0000016008026461f08cb3fdd86e3a2457\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/51763\/2a0000016008026771d2f3c7dac0e8d437f9\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802686dbbbed380ec99afc655\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/51763\/2a000001600802653c391d2e32075819e8f6\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016008026696804b8c4e42f226e439\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/51763\/2a0000016008026771d2f3c7dac0e8d437f9\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802686dbbbed380ec99afc655\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/51763\/2a000001600802653c391d2e32075819e8f6\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a0000016008026696804b8c4e42f226e439\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802507cc14a8dfebd96835e47\/orig",
|
||||||
|
"attrs": {
|
||||||
|
"style": "margin-right: 5px;"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"content": "Матч! Арена"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"label": "Каналы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч! Боец",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/channels\/454",
|
||||||
|
"target": "_self",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "icon",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "l"
|
||||||
|
},
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/square",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/small",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/40x30",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/60x45",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/alice_64_48",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/x",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802e5ce16abfff4ef6582314b\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802e5ce16abfff4ef6582314b\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/114x80",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802ed550b3e50934bd9590a8d\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/27485\/2a000001600802ed550b3e50934bd9590a8d\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/middle",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/y",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802fb1f6c51e988763d812c9a\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a000001600803041768d758a55eb7e2badb\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/30303\/2a0000016008030a3439b27b50315e0282d5\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802f430b56de4f7f74fa9d062\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802fb1f6c51e988763d812c9a\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/70787\/2a000001600803041768d758a55eb7e2badb\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/30303\/2a0000016008030a3439b27b50315e0282d5\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802f430b56de4f7f74fa9d062\/orig",
|
||||||
|
"png": "\/\/avatars.mds.yandex.net\/get-tv-channel-logos\/69315\/2a000001600802bf4bc9e92d4f31f4a9878b\/orig",
|
||||||
|
"attrs": {
|
||||||
|
"style": "margin-right: 5px;"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"content": "Матч! Боец"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"label": "Каналы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч Поинт",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/program\/8975707?eventId=258920426",
|
||||||
|
"target": "_self",
|
||||||
|
"label": "Передачи",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "info",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"elem": "img",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "m"
|
||||||
|
},
|
||||||
|
"src": "\/\/avatars.mds.yandex.net\/get-tv-shows\/28313\/2a0000019e1b8bb6911cbc36699f5e382156\/120x90"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"elemMods": {
|
||||||
|
"type": "title-url"
|
||||||
|
},
|
||||||
|
"content": "Матч Поинт"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "desc",
|
||||||
|
"content": "КИНОМАН, сегодня, 18:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/program\/9094736?eventId=258988710",
|
||||||
|
"target": "_self",
|
||||||
|
"label": "Передачи",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "info",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"elem": "img",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "m"
|
||||||
|
},
|
||||||
|
"src": "\/\/avatars.mds.yandex.net\/get-tv-shows\/27487\/2a0000019ee0cfaf7272900dc66e5da38072\/120x90"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"elemMods": {
|
||||||
|
"type": "title-url"
|
||||||
|
},
|
||||||
|
"content": "Матч"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "desc",
|
||||||
|
"content": "Союзный, завтра, 19:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч-реванш",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/program\/8045748?eventId=258901794",
|
||||||
|
"target": "_self",
|
||||||
|
"label": "Передачи",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "info",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"elem": "img",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "m"
|
||||||
|
},
|
||||||
|
"src": "\/\/avatars.mds.yandex.net\/get-tv-shows\/28886\/2a0000019590a3a76b641bcec6df9bb179cc\/120x90"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"elemMods": {
|
||||||
|
"type": "title-url"
|
||||||
|
},
|
||||||
|
"content": "Матч-реванш"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "desc",
|
||||||
|
"content": "Советские мультфильмы, сегодня, 20:04"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Матч-реванш",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/program\/7398398?eventId=258967472",
|
||||||
|
"target": "_self",
|
||||||
|
"label": "Передачи",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "info",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"elem": "img",
|
||||||
|
"elemMods": {
|
||||||
|
"size": "m"
|
||||||
|
},
|
||||||
|
"src": "\/\/avatars.mds.yandex.net\/get-tv-shows\/26422\/2a0000019409646c1723839178f3274f0a03\/120x90"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "text",
|
||||||
|
"elemMods": {
|
||||||
|
"type": "title-url"
|
||||||
|
},
|
||||||
|
"content": "Матч-реванш"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"elem": "desc",
|
||||||
|
"content": "Чижик, завтра, 07:55"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"bemjson",
|
||||||
|
"Все результаты",
|
||||||
|
{
|
||||||
|
"url": "https:\/\/tv.yandex.ru\/search?text=%D0%BC%D0%B0%D1%82%D1%87",
|
||||||
|
"target": "_self",
|
||||||
|
"label": "Другое",
|
||||||
|
"bemjson": [
|
||||||
|
{
|
||||||
|
"elem": "info",
|
||||||
|
"elemMods": {
|
||||||
|
"type": "title_url"
|
||||||
|
},
|
||||||
|
"content": "Все результаты"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
@@ -3,7 +3,6 @@ import datetime
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from gallery.painting.matchtv.api import MatchTvApi
|
from gallery.painting.matchtv.api import MatchTvApi
|
||||||
from gallery.sketch.schedule.model import ChannelId
|
|
||||||
from tests.data.matchtv import MATCHTV_MOCK_SOURCE
|
from tests.data.matchtv import MATCHTV_MOCK_SOURCE
|
||||||
|
|
||||||
|
|
||||||
@@ -14,9 +13,12 @@ def matchtv_api_fixture() -> MatchTvApi:
|
|||||||
return api
|
return api
|
||||||
|
|
||||||
|
|
||||||
|
async def test_search(matchtv_api: MatchTvApi):
|
||||||
|
result = await matchtv_api.find_channels("матч")
|
||||||
|
assert len(result) == 6
|
||||||
|
|
||||||
|
|
||||||
async def test_channel(matchtv_api: MatchTvApi):
|
async def test_channel(matchtv_api: MatchTvApi):
|
||||||
result = await matchtv_api.get_channel_schedule(
|
result = await matchtv_api.get_channel_schedule("test", datetime.date.today())
|
||||||
ChannelId.TEST, datetime.date.today()
|
|
||||||
)
|
|
||||||
assert result is not None
|
assert result is not None
|
||||||
assert len(result.values) > 0
|
assert len(result.values) > 0
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ import datetime
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from gallery.painting.yandextv.api import CHANNELS_MAP, YandexTvApi
|
from gallery.painting.yandextv.api import YandexTvApi
|
||||||
from gallery.sketch.schedule.model import ChannelId
|
|
||||||
from tests.data.yandextv import YANDEXTV_MOCK_SOURCE
|
from tests.data.yandextv import YANDEXTV_MOCK_SOURCE
|
||||||
|
|
||||||
|
|
||||||
@@ -11,13 +10,15 @@ from tests.data.yandextv import YANDEXTV_MOCK_SOURCE
|
|||||||
def yandextv_api_fixture() -> YandexTvApi:
|
def yandextv_api_fixture() -> YandexTvApi:
|
||||||
api = YandexTvApi()
|
api = YandexTvApi()
|
||||||
api.SOURCE = YANDEXTV_MOCK_SOURCE
|
api.SOURCE = YANDEXTV_MOCK_SOURCE
|
||||||
CHANNELS_MAP[ChannelId("test")] = "test"
|
|
||||||
return api
|
return api
|
||||||
|
|
||||||
|
|
||||||
|
async def test_search(yandextv_api: YandexTvApi):
|
||||||
|
result = await yandextv_api.find_channels("матч")
|
||||||
|
assert len(result) == 8
|
||||||
|
|
||||||
|
|
||||||
async def test_channel(yandextv_api: YandexTvApi):
|
async def test_channel(yandextv_api: YandexTvApi):
|
||||||
result = await yandextv_api.get_channel_schedule(
|
result = await yandextv_api.get_channel_schedule("test", datetime.date.today())
|
||||||
ChannelId.TEST, datetime.date.today()
|
|
||||||
)
|
|
||||||
assert result is not None
|
assert result is not None
|
||||||
assert len(result.values) > 0
|
assert len(result.values) > 0
|
||||||
|
|||||||
Reference in New Issue
Block a user