Aleksander Garin
fb9fd9880e
- Add constants - Add default - Add set default for request payload - Fixes
584 lines
15 KiB
YAML
584 lines
15 KiB
YAML
openapi: 3.0.3
|
||
|
||
info:
|
||
title: YouTube Kids Public API
|
||
description: For generate API REST clients for Feelter UGC
|
||
contact:
|
||
email: garin1221@yandex.ru
|
||
version: 0.0.2
|
||
|
||
servers:
|
||
- url: https://www.youtubekids.com/youtubei/v1
|
||
description: Original YoutubeKids API Server V1
|
||
|
||
tags:
|
||
- name: browse
|
||
description: Browse resource content
|
||
|
||
paths:
|
||
|
||
# Получение контента определенного ресурса, {browseId}
|
||
/browse:
|
||
post:
|
||
tags:
|
||
- browse
|
||
summary: Browse resource content
|
||
description: Get content for resource
|
||
operationId: browse
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/BrowseRequestPayload'
|
||
responses:
|
||
'200':
|
||
description: OK
|
||
content:
|
||
'application/json':
|
||
"schema":
|
||
$ref: '#/components/schemas/BrowseResponsePayload'
|
||
default:
|
||
description: Unexpected error
|
||
content:
|
||
'application/json':
|
||
"schema":
|
||
$ref: '#/components/schemas/ErrorResponsePayload'
|
||
|
||
# Компоненты
|
||
components:
|
||
# Схемы данных
|
||
schemas:
|
||
|
||
# Ошибка
|
||
Error:
|
||
type: object
|
||
required:
|
||
- message
|
||
properties:
|
||
message:
|
||
type: string
|
||
domain:
|
||
type: string
|
||
reason:
|
||
type: string
|
||
|
||
# Доступность данных
|
||
AccessibilityData:
|
||
type: object
|
||
properties:
|
||
label:
|
||
type: string
|
||
|
||
# Доступность
|
||
Accessibility:
|
||
type: object
|
||
properties:
|
||
accessibilityData:
|
||
$ref: '#/components/schemas/AccessibilityData'
|
||
|
||
# WatchEndpoint
|
||
WatchEndpoint:
|
||
type: object
|
||
properties:
|
||
videoId:
|
||
type: string
|
||
|
||
# BrowseEndpoint
|
||
BrowseEndpoint:
|
||
type: object
|
||
properties:
|
||
browseId:
|
||
type: string
|
||
canonicalBaseUrl:
|
||
type: string
|
||
|
||
# Конечная точка навигации
|
||
NavigationEndpoint:
|
||
type: object
|
||
properties:
|
||
clickTrackingParams:
|
||
type: string
|
||
watchEndpoint:
|
||
$ref: '#/components/schemas/WatchEndpoint'
|
||
browseEndpoint:
|
||
$ref: '#/components/schemas/BrowseEndpoint'
|
||
|
||
# Текст -> Runs
|
||
TextRun:
|
||
type: object
|
||
required:
|
||
- text
|
||
properties:
|
||
text:
|
||
type: string
|
||
navigationEndpoint:
|
||
$ref: '#/components/schemas/NavigationEndpoint'
|
||
|
||
# Текст
|
||
Text:
|
||
type: object
|
||
required:
|
||
- runs
|
||
properties:
|
||
runs:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/TextRun'
|
||
accessibility:
|
||
$ref: '#/components/schemas/Accessibility'
|
||
|
||
# Строковый параметр ключ-зачение
|
||
KeyStringValue:
|
||
type: object
|
||
required:
|
||
- key
|
||
- value
|
||
properties:
|
||
key:
|
||
type: string
|
||
value:
|
||
type: string
|
||
|
||
# Ассеты категории
|
||
CategoryAssets:
|
||
type: object
|
||
required:
|
||
- assetKey
|
||
properties:
|
||
assetKey:
|
||
type: string
|
||
backgroundColor:
|
||
type: string
|
||
|
||
# Расширение для владельцев детских видео
|
||
KidsVideoOwnerExtension:
|
||
type: object
|
||
required:
|
||
- externalChannelId
|
||
properties:
|
||
externalChannelId:
|
||
type: string
|
||
|
||
# Thumbnail
|
||
Thumbnail:
|
||
type: object
|
||
required:
|
||
- url
|
||
- width
|
||
- height
|
||
properties:
|
||
url:
|
||
type: string
|
||
width:
|
||
type: integer
|
||
height:
|
||
type: integer
|
||
|
||
# Рендер карточки с видео
|
||
CompactVideoRenderer:
|
||
type: object
|
||
required:
|
||
- videoId
|
||
- title
|
||
- viewCountText
|
||
- trackingParams
|
||
- kidsVideoOwnerExtension
|
||
properties:
|
||
videoId:
|
||
type: string
|
||
thumbnail:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
title:
|
||
$ref: '#/components/schemas/Text'
|
||
longBylineText:
|
||
$ref: '#/components/schemas/Text'
|
||
publishedTimeText:
|
||
$ref: '#/components/schemas/Text'
|
||
viewCountText:
|
||
$ref: '#/components/schemas/Text'
|
||
lengthText:
|
||
$ref: '#/components/schemas/Text'
|
||
navigationEndpoint:
|
||
$ref: '#/components/schemas/NavigationEndpoint'
|
||
shortBylineText:
|
||
$ref: '#/components/schemas/Text'
|
||
channelThumbnail:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
trackingParams:
|
||
type: string
|
||
shortViewCountText:
|
||
$ref: '#/components/schemas/Text'
|
||
accessibility:
|
||
$ref: '#/components/schemas/Accessibility'
|
||
kidsVideoOwnerExtension:
|
||
$ref: '#/components/schemas/KidsVideoOwnerExtension'
|
||
|
||
# Рендер карточки с плейлистом
|
||
CompactPlaylistRenderer:
|
||
type: object
|
||
required:
|
||
- playlistId
|
||
- title
|
||
- viewCountText
|
||
- trackingParams
|
||
properties:
|
||
playlistId:
|
||
type: string
|
||
thumbnail:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
title:
|
||
$ref: '#/components/schemas/Text'
|
||
shortBylineText:
|
||
$ref: '#/components/schemas/Text'
|
||
videoCountText:
|
||
$ref: '#/components/schemas/Text'
|
||
navigationEndpoint:
|
||
$ref: '#/components/schemas/NavigationEndpoint'
|
||
videoCountShortText:
|
||
$ref: '#/components/schemas/Text'
|
||
trackingParams:
|
||
type: string
|
||
sidebarThumbnails:
|
||
type: array
|
||
items:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
thumbnailText:
|
||
$ref: '#/components/schemas/Text'
|
||
shareUrl:
|
||
type: string
|
||
longBylineText:
|
||
$ref: '#/components/schemas/Text'
|
||
tvBanner:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
|
||
# Рендер карточки с каналом
|
||
CompactChannelRenderer:
|
||
type: object
|
||
required:
|
||
- channelId
|
||
- displayName
|
||
- videoCountText
|
||
- title
|
||
- trackingParams
|
||
properties:
|
||
channelId:
|
||
type: string
|
||
thumbnail:
|
||
type: object
|
||
properties:
|
||
thumbnails:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Thumbnail'
|
||
displayName:
|
||
$ref: '#/components/schemas/Text'
|
||
videoCountText:
|
||
$ref: '#/components/schemas/Text'
|
||
subscriberCountText:
|
||
$ref: '#/components/schemas/Text'
|
||
navigationEndpoint:
|
||
$ref: '#/components/schemas/NavigationEndpoint'
|
||
title:
|
||
$ref: '#/components/schemas/Text'
|
||
trackingParams:
|
||
type: string
|
||
|
||
# Средство визуализации раздела элемента
|
||
ItemSectionRenderer:
|
||
type: object
|
||
required:
|
||
- contents
|
||
- trackingParams
|
||
properties:
|
||
contents:
|
||
type: array
|
||
items:
|
||
type: object
|
||
properties:
|
||
compactPlaylistRenderer:
|
||
$ref: '#/components/schemas/CompactPlaylistRenderer'
|
||
compactChannelRenderer:
|
||
$ref: '#/components/schemas/CompactChannelRenderer'
|
||
compactVideoRenderer:
|
||
$ref: '#/components/schemas/CompactVideoRenderer'
|
||
trackingParams:
|
||
type: string
|
||
|
||
# Рендер списка разделов
|
||
SectionListRenderer:
|
||
type: object
|
||
properties:
|
||
contents:
|
||
type: array
|
||
items:
|
||
type: object
|
||
properties:
|
||
itemSectionRenderer:
|
||
$ref: '#/components/schemas/ItemSectionRenderer'
|
||
trackingParams:
|
||
type: string
|
||
|
||
# Визуализатор закрепленных сечений
|
||
AnchoredSectionRenderer:
|
||
type: object
|
||
properties:
|
||
title:
|
||
type: string
|
||
content:
|
||
type: object
|
||
properties:
|
||
sectionListRenderer:
|
||
$ref: '#/components/schemas/SectionListRenderer'
|
||
trackingParams:
|
||
type: string
|
||
navigationEndpoint:
|
||
$ref: '#/components/schemas/NavigationEndpoint'
|
||
categoryAssets:
|
||
$ref: '#/components/schemas/CategoryAssets'
|
||
categoryType:
|
||
type: string
|
||
|
||
# Якорь экрана
|
||
ScreenAnchor:
|
||
type: object
|
||
properties:
|
||
anchoredSectionRenderer:
|
||
$ref: '#/components/schemas/AnchoredSectionRenderer'
|
||
|
||
# Рендерер экрана
|
||
ScreenRenderer:
|
||
type: object
|
||
properties:
|
||
anchors:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/ScreenAnchor'
|
||
|
||
# Средство визуализации заголовка категории
|
||
CategoriesHeaderRenderer:
|
||
type: object
|
||
properties:
|
||
trackingParams:
|
||
type: string
|
||
# TODO
|
||
|
||
# Параметры контента
|
||
KidsAppContentSettings:
|
||
type: object
|
||
required:
|
||
- corpusPreference
|
||
- kidsNoSearchMode
|
||
properties:
|
||
corpusPreference:
|
||
type: string
|
||
enum:
|
||
- KIDS_CORPUS_PREFERENCE_UNKNOWN # unknown
|
||
- KIDS_CORPUS_PREFERENCE_YOUNGER # (0-4 years)
|
||
- KIDS_CORPUS_PREFERENCE_TWEEN # (5-7)
|
||
- KIDS_CORPUS_PREFERENCE_PAM_YOUNGER
|
||
- KIDS_CORPUS_PREFERENCE_PAM_TWEEN
|
||
- KIDS_CORPUS_PREFERENCE_PRESCHOOL # (8-12)
|
||
example: KIDS_CORPUS_PREFERENCE_TWEEN
|
||
default: KIDS_CORPUS_PREFERENCE_TWEEN
|
||
kidsNoSearchMode:
|
||
type: string
|
||
enum:
|
||
- YT_KIDS_NO_SEARCH_MODE_UNKNOWN # unknown
|
||
- YT_KIDS_NO_SEARCH_MODE_ON
|
||
- YT_KIDS_NO_SEARCH_MODE_OFF
|
||
example: YT_KIDS_NO_SEARCH_MODE_OFF
|
||
default: YT_KIDS_NO_SEARCH_MODE_OFF
|
||
|
||
# Конфигурация категорий
|
||
KidsAppCategorySettings:
|
||
type: object
|
||
properties:
|
||
enabledCategories:
|
||
type: array
|
||
example: ["approved_for_you", "black_joy", "camp", "collections", "earth", "explore", "favorites", "gaming", "halloween", "hero", "learning", "making", "move", "music", "reading", "shared_by_parents", "shows", "soccer", "sports", "spotlight", "winter"]
|
||
items:
|
||
type: string
|
||
|
||
# Параметры приложения
|
||
KidsAppInfo:
|
||
type: object
|
||
description: Kids application configuration
|
||
properties:
|
||
contentSettings:
|
||
$ref: '#/components/schemas/KidsAppContentSettings'
|
||
categorySettings:
|
||
$ref: '#/components/schemas/KidsAppCategorySettings'
|
||
|
||
# Информация о клиенте в запросе
|
||
RequestClient:
|
||
type: object
|
||
description: Client information
|
||
required:
|
||
- kidsAppInfo
|
||
properties:
|
||
clientName:
|
||
type: string
|
||
example: WEB_KIDS
|
||
default: WEB_KIDS
|
||
clientVersion:
|
||
type: string
|
||
example: 2.20230817.00.00
|
||
default: 2.20230817.00.00
|
||
hl:
|
||
type: string
|
||
example: ru
|
||
default: ru
|
||
gl:
|
||
type: string
|
||
example: RU
|
||
default: RU
|
||
experimentsToken:
|
||
type: string
|
||
browserName:
|
||
type: string
|
||
example: Safari
|
||
default: Safari
|
||
deviceMake:
|
||
type: string
|
||
example: apple
|
||
default: apple
|
||
browserVersion:
|
||
type: string
|
||
example: '16.2'
|
||
default: '16.2'
|
||
osName:
|
||
type: string
|
||
example: Macintosh
|
||
default: Macintosh
|
||
osVersion:
|
||
type: string
|
||
example: '10_15_7'
|
||
default: '10_15_7'
|
||
platform:
|
||
type: string
|
||
example: DESKTOP
|
||
default: DESKTOP
|
||
kidsAppInfo:
|
||
$ref: '#/components/schemas/KidsAppInfo'
|
||
|
||
# Контекст запроса
|
||
RequestContext:
|
||
type: object
|
||
description: Request context
|
||
required:
|
||
- client
|
||
properties:
|
||
client:
|
||
$ref: '#/components/schemas/RequestClient'
|
||
|
||
# Контекст ответа
|
||
ResponseContext:
|
||
type: object
|
||
description: Response context
|
||
properties:
|
||
visitorData:
|
||
type: string
|
||
maxAgeSeconds:
|
||
type: integer
|
||
serviceTrackingParams:
|
||
type: array
|
||
items:
|
||
type: object
|
||
properties:
|
||
service:
|
||
type: string
|
||
params:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/KeyStringValue'
|
||
|
||
# Данные для запроса на получение контента определенного ресурса
|
||
BrowseRequestPayload:
|
||
type: object
|
||
required:
|
||
- context
|
||
- browseId
|
||
properties:
|
||
context:
|
||
$ref: '#/components/schemas/RequestContext'
|
||
params:
|
||
type: string
|
||
browseId:
|
||
type: string
|
||
example: FEkids_home
|
||
|
||
# Ответ на запрос получения контента определенного ресурса
|
||
BrowseResponsePayload:
|
||
type: object
|
||
required:
|
||
- header
|
||
- contents
|
||
- responseContext
|
||
properties:
|
||
responseContext:
|
||
$ref: '#/components/schemas/ResponseContext'
|
||
header:
|
||
type: object
|
||
properties:
|
||
kidsCategoriesHeaderRenderer:
|
||
$ref: '#/components/schemas/CategoriesHeaderRenderer'
|
||
contents:
|
||
type: object
|
||
properties:
|
||
kidsHomeScreenRenderer:
|
||
$ref: '#/components/schemas/ScreenRenderer'
|
||
trackingParams:
|
||
type: string
|
||
|
||
# Ответ с ошибкой
|
||
ErrorResponsePayload:
|
||
type: object
|
||
required:
|
||
- error
|
||
properties:
|
||
error:
|
||
type: object
|
||
required:
|
||
- code
|
||
- status
|
||
- message
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 400
|
||
message:
|
||
type: string
|
||
errors:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Error'
|
||
status:
|
||
type: string
|
||
example: FAILED_PRECONDITION
|