Documentation
¶
Overview ¶
Package models defines the request parameter types and response types for the Kodik API.
Request parameter types ¶
Each API endpoint has a corresponding Params type:
- SearchParams — parameters for /search
- ListParams — parameters for /list
- GenresParams — parameters for /genres
- CountriesParams — parameters for /countries
- YearsParams — parameters for /years
- QualitiesParams — parameters for /qualities/v2
- TranslationsParams — parameters for /translations/v2
All Params types expose a ToMap method that serialises non-zero fields into a map[string]string used as URL query parameters. Zero-value fields are omitted automatically, so you only set what you need:
params := &models.SearchParams{
Title: "Naruto",
Limit: 10,
}
// Only "title" and "limit" are sent; everything else is omitted.
Shared filter fields ¶
Most filtering options (genres, ratings, personnel, status, etc.) are shared across all endpoints. They are defined in MediaFilters, which is embedded in every Params type, so fields are accessed directly:
params := &models.ListParams{}
params.Genres = "anime"
params.KinopoiskRating = "7.0-10"
params.Sort = "updated_at"
params.Order = "desc"
The ContentFilters struct (embedded in SearchParams and ListParams) adds episode/season flags and region-blocking controls on top of MediaFilters:
params := &models.SearchParams{
Title: "Attack on Titan",
WithMaterialData: true,
WithSeasons: true,
}
Pointer booleans ¶
Fields of type *bool (e.g. [MediaFilters.Lgbt], [ContentFilters.Camrip]) use a pointer so that false and "not set" are distinct. A nil pointer means the parameter is not sent; a non-nil pointer always sends the value:
f := false params.Camrip = &f // sends camrip=false params.Camrip = nil // parameter is omitted entirely
Response types ¶
- SearchResponse — results from /search
- ListResponse — paginated results from /list
- GenresResponse — genre list from /genres
- CountriesResponse — country list from /countries
- YearsResponse — year list from /years
- QualitiesResponse — quality list from /qualities/v2
- TranslationsResponse— voice-over list from /translations/v2
The core content types are Material (a film, serial, or anime entry) and MaterialData (extended metadata from external sources such as Kinopoisk, IMDb, and Shikimori).
Index ¶
- type ContentFilters
- type CountriesParams
- type CountriesResponse
- type Country
- type Genre
- type GenresParams
- type GenresResponse
- type ListParams
- type ListResponse
- type Material
- type MaterialData
- type MediaFilters
- type QualitiesParams
- type QualitiesResponse
- type QualityEntry
- type SearchParams
- type SearchResponse
- type Translation
- type TranslationEntry
- type TranslationsParams
- type TranslationsResponse
- type YearEntry
- type YearsParams
- type YearsResponse
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ContentFilters ¶
type ContentFilters struct {
Camrip *bool `json:"camrip,omitempty"` // Filter by camrip status
WithSeasons bool `json:"with_seasons,omitempty"` // Include season data in response
Season int `json:"season,omitempty"` // Filter by specific season number
WithEpisodes bool `json:"with_episodes,omitempty"` // Include episode data in response
WithEpisodesData bool `json:"with_episodes_data,omitempty"` // Include detailed episode data
Episode int `json:"episode,omitempty"` // Filter by specific episode number
WithPageLinks bool `json:"with_page_links,omitempty"` // Return page links instead of player links
NotBlockedIn string `json:"not_blocked_in,omitempty"` // Comma-separated country codes; return only unblocked content
NotBlockedForMe *bool `json:"not_blocked_for_me,omitempty"` // Auto-detect requester's country to filter blocked content
WithMaterialData bool `json:"with_material_data,omitempty"` // Include extended material metadata
MediaFilters
}
ContentFilters extends MediaFilters with parameters specific to content-listing endpoints (/search and /list). These fields control how individual episodes, seasons, and links are returned, and allow blocking content by region.
type CountriesParams ¶
type CountriesParams struct {
MediaFilters
}
CountriesParams contains parameters for the /countries endpoint.
func (CountriesParams) ToMap ¶
func (cp CountriesParams) ToMap() map[string]string
ToMap serializes CountriesParams into a flat string map suitable for query parameters.
type CountriesResponse ¶
type CountriesResponse struct {
Time string `json:"time"` // Время выполнения запроса (например, "5ms")
Total int `json:"total"` // Общее количество стран
Results []Country `json:"results"` // Список стран с количеством материалов для каждой
}
CountriesResponse представляет структуру ответа от эндпоинта /countries API Kodik.
type Country ¶
Country описывает отдельную страну в ответе API. Поле Title содержит название страны, а Count — количество материалов, связанных с ней.
type Genre ¶
Genre описывает отдельный жанр. Поле Title содержит название жанра, а Count — количество материалов, связанных с ним.
type GenresParams ¶
type GenresParams struct {
// GenresType selects the genre source: "kinopoisk" (default), "shikimori", "mydramalist", or "all".
GenresType string `json:"genres_type,omitempty"`
MediaFilters
}
GenresParams contains parameters for the /genres endpoint.
func (GenresParams) ToMap ¶
func (gp GenresParams) ToMap() map[string]string
ToMap serializes GenresParams into a flat string map suitable for query parameters.
type GenresResponse ¶
type GenresResponse struct {
Time string `json:"time"` // Время выполнения запроса (например, "5ms")
Total int `json:"total"` // Общее количество жанров
Results []Genre `json:"results"` // Список жанров с количеством материалов для каждого
}
GenresResponse представляет структуру ответа от эндпоинта /genres API Kodik.
type ListParams ¶
type ListParams struct {
Limit int `json:"limit,omitempty"` // Results per request (1–100)
Order string `json:"order,omitempty"` // Sort direction: "asc" or "desc"
ContentFilters
}
ListParams contains parameters for the /list endpoint.
func (ListParams) ToMap ¶
func (lp ListParams) ToMap() map[string]string
ToMap serializes ListParams into a flat string map suitable for query parameters.
type ListResponse ¶
type ListResponse struct {
Time string `json:"time"`
Total int `json:"total"`
PrevPage *string `json:"prev_page"` // Может быть null
NextPage *string `json:"next_page"` // Может быть null
Results []Material `json:"results"`
}
ListResponse описывает ответ от эндпоинта /list API Kodik.
type Material ¶
type Material struct {
ID string `json:"id"`
Title string `json:"title"`
TitleOrig string `json:"title_orig"`
OtherTitle string `json:"other_title"`
Link string `json:"link"`
Year int `json:"year"`
KinopoiskID string `json:"kinopoisk_id"`
ImdbID string `json:"imdb_id"`
MdlID string `json:"mdl_id"`
WorldartLink string `json:"worldart_link"`
ShikimoriID string `json:"shikimori_id"`
Type string `json:"type"`
Quality string `json:"quality"`
Camrip bool `json:"camrip"`
Lgbt bool `json:"lgbt"`
Translation Translation `json:"translation"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
BlockedCountries []string `json:"blocked_countries"`
// Данные, специфичные для сериалов (для фильмов могут отсутствовать)
Seasons interface{} `json:"seasons,omitempty"`
LastSeason int `json:"last_season,omitempty"`
LastEpisode int `json:"last_episode,omitempty"`
EpisodesCount int `json:"episodes_count,omitempty"`
BlockedSeasons interface{} `json:"blocked_seasons,omitempty"`
Screenshots []string `json:"screenshots,omitempty"`
// Дополнительная информация из внешних источников (KinoPoisk, Shikimori, MyDramaList)
MaterialData *MaterialData `json:"material_data,omitempty"`
}
Material описывает основные данные материала (фильма, сериала и т.д.).
type MaterialData ¶
type MaterialData struct {
// Основная информация
Title *string `json:"title,omitempty"`
AnimeTitle *string `json:"anime_title,omitempty"`
TitleEn *string `json:"title_en,omitempty"`
OtherTitles []string `json:"other_titles,omitempty"`
OtherTitlesEn []string `json:"other_titles_en,omitempty"`
OtherTitlesJp []string `json:"other_titles_jp,omitempty"`
// Аниме-специфичная информация
AnimeLicenseName *string `json:"anime_license_name,omitempty"`
AnimeLicensedBy []string `json:"anime_licensed_by,omitempty"`
AnimeKind *string `json:"anime_kind,omitempty"`
// MyDramaList теги
MydramalistTags []string `json:"mydramalist_tags,omitempty"`
// Статусы
AllStatus *string `json:"all_status,omitempty"`
AnimeStatus *string `json:"anime_status,omitempty"`
DramaStatus *string `json:"drama_status,omitempty"`
// Основные данные
Year *int `json:"year,omitempty"`
Tagline *string `json:"tagline,omitempty"`
Description *string `json:"description,omitempty"`
AnimeDescription *string `json:"anime_description,omitempty"`
// Постеры
PosterUrl *string `json:"poster_url,omitempty"`
AnimePosterUrl *string `json:"anime_poster_url,omitempty"`
DramaPosterUrl *string `json:"drama_poster_url,omitempty"`
Screenshots []string `json:"screenshots,omitempty"`
// Продолжительность и география
Duration *int `json:"duration,omitempty"`
Countries []string `json:"countries,omitempty"`
// Жанры
AllGenres []string `json:"all_genres,omitempty"`
Genres []string `json:"genres,omitempty"`
AnimeGenres []string `json:"anime_genres,omitempty"`
DramaGenres []string `json:"drama_genres,omitempty"`
AnimeStudios []string `json:"anime_studios,omitempty"`
// Рейтинги
KinopoiskRating *float64 `json:"kinopoisk_rating,omitempty"`
KinopoiskVotes *int `json:"kinopoisk_votes,omitempty"`
ImdbRating *float64 `json:"imdb_rating,omitempty"`
ImdbVotes *int `json:"imdb_votes,omitempty"`
ShikimoriRating *float64 `json:"shikimori_rating,omitempty"`
ShikimoriVotes *int `json:"shikimori_votes,omitempty"`
MydramalistRating *float64 `json:"mydramalist_rating,omitempty"`
MydramalistVotes *int `json:"mydramalist_votes,omitempty"`
// Даты
PremiereRu *string `json:"premiere_ru,omitempty"`
PremiereWorld *string `json:"premiere_world,omitempty"`
AiredAt *string `json:"aired_at,omitempty"`
ReleasedAt *string `json:"released_at,omitempty"`
NextEpisodeAt *string `json:"next_episode_at,omitempty"`
// Возрастные ограничения
RatingMpaa *string `json:"rating_mpaa,omitempty"`
MinimalAge *int `json:"minimal_age,omitempty"`
// Эпизоды
EpisodesTotal *int `json:"episodes_total,omitempty"`
EpisodesAired *int `json:"episodes_aired,omitempty"`
// Участники производства
Actors []string `json:"actors,omitempty"`
Directors []string `json:"directors,omitempty"`
Producers []string `json:"producers,omitempty"`
Writers []string `json:"writers,omitempty"`
Composers []string `json:"composers,omitempty"`
Editors []string `json:"editors,omitempty"`
Designers []string `json:"designers,omitempty"`
Operators []string `json:"operators,omitempty"`
}
MaterialData описывает дополнительную информацию о материале из различных источников.
type MediaFilters ¶
type MediaFilters struct {
Types string `json:"types,omitempty"` // Comma-separated material types (e.g. "anime-serial,foreign-movie")
Year string `json:"year,omitempty"` // Exact year or range (e.g. "2020", "2010-2020")
TranslationID int `json:"translation_id,omitempty"` // Filter by voice-over ID
BlockTranslations string `json:"block_translations,omitempty"` // Comma-separated voice-over IDs to exclude
TranslationType string `json:"translation_type,omitempty"` // "voice" or "subtitles"
HasField string `json:"has_field,omitempty"` // Filter by presence of a field (e.g. "kinopoisk_id")
Lgbt *bool `json:"lgbt,omitempty"` // Filter by LGBT content
Sort string `json:"sort,omitempty"` // Sort field (endpoint-specific, e.g. "title", "count", "updated_at")
Countries string `json:"countries,omitempty"` // Comma-separated country filter
Genres string `json:"genres,omitempty"` // Comma-separated genre filter
AnimeGenres string `json:"anime_genres,omitempty"` // Anime-specific genre filter
DramaGenres string `json:"drama_genres,omitempty"` // Drama-specific genre filter
AllGenres string `json:"all_genres,omitempty"` // Filter across all genre sources
Duration string `json:"duration,omitempty"` // Minutes, exact or range (e.g. "90", "80-120")
KinopoiskRating string `json:"kinopoisk_rating,omitempty"` // Rating or range (e.g. "7.0", "6.5-8.2")
ImdbRating string `json:"imdb_rating,omitempty"` // IMDb rating or range
ShikimoriRating string `json:"shikimori_rating,omitempty"` // Shikimori rating or range
MydramalistRating string `json:"mydramalist_rating,omitempty"` // MyDramaList rating or range
Actors string `json:"actors,omitempty"` // Comma-separated actor names
Directors string `json:"directors,omitempty"` // Comma-separated director names
Producers string `json:"producers,omitempty"` // Comma-separated producer names
Writers string `json:"writers,omitempty"` // Comma-separated writer names
Composers string `json:"composers,omitempty"` // Comma-separated composer names
Editors string `json:"editors,omitempty"` // Comma-separated editor names
Designers string `json:"designers,omitempty"` // Comma-separated designer names
Operators string `json:"operators,omitempty"` // Comma-separated operator names
RatingMPAA string `json:"rating_mpaa,omitempty"` // MPAA rating (e.g. "PG-13", "R")
MinimalAge string `json:"minimal_age,omitempty"` // Minimum viewer age (e.g. "16", "12-16")
AnimeKind string `json:"anime_kind,omitempty"` // Anime type: "tv", "movie", "ova", "ona", etc.
MydramalistTags string `json:"mydramalist_tags,omitempty"` // Comma-separated MyDramaList tags
AnimeStatus string `json:"anime_status,omitempty"` // "anons", "ongoing", "released"
DramaStatus string `json:"drama_status,omitempty"` // "anons", "ongoing", "released"
AllStatus string `json:"all_status,omitempty"` // Universal status filter
AnimeStudios string `json:"anime_studios,omitempty"` // Comma-separated anime studio names
AnimeLicensedBy string `json:"anime_licensed_by,omitempty"` // Comma-separated license holders
}
MediaFilters contains filter parameters shared across all Kodik API endpoints. Embed this struct in any Params type to get all common filters and their serialization.
type QualitiesParams ¶
type QualitiesParams struct {
MediaFilters
}
QualitiesParams contains parameters for the /qualities/v2 endpoint.
func (QualitiesParams) ToMap ¶
func (qp QualitiesParams) ToMap() map[string]string
ToMap serializes QualitiesParams into a flat string map suitable for query parameters.
type QualitiesResponse ¶
type QualitiesResponse struct {
Time string `json:"time"` // Время выполнения запроса (например, "5ms")
Total int `json:"total"` // Общее количество записей
Results []QualityEntry `json:"results"` // Список записей с качествами видео
}
QualitiesResponse представляет структуру ответа для эндпоинта /qualities/v2.
type QualityEntry ¶
type QualityEntry struct {
Title string `json:"title"` // Название качества (например, "WEB-DLRip 720p")
Count int `json:"count"` // Число материалов, имеющих данное качество
}
QualityEntry описывает отдельную запись качества видео, приходящую в ответе от API.
type SearchParams ¶
type SearchParams struct {
// Text search
Title string `json:"title,omitempty"`
TitleOrig string `json:"title_orig,omitempty"`
Strict bool `json:"strict,omitempty"` // Require exact word match
FullMatch bool `json:"full_match,omitempty"` // Require full string match
// External identifiers (alternative to text search)
ID string `json:"id,omitempty"`
PlayerLink string `json:"player_link,omitempty"`
KinopoiskID int `json:"kinopoisk_id,omitempty"`
ImdbID string `json:"imdb_id,omitempty"`
MdlID string `json:"mdl_id,omitempty"`
WorldartAnimationID int `json:"worldart_animation_id,omitempty"`
WorldartCinemaID int `json:"worldart_cinema_id,omitempty"`
WorldartLink string `json:"worldart_link,omitempty"`
ShikimoriID int `json:"shikimori_id,omitempty"`
// Pagination
Limit int `json:"limit,omitempty"` // Max results to return (1–100)
// Translation priority controls
PrioritizeTranslations string `json:"prioritize_translations,omitempty"`
UnprioritizeTranslations string `json:"unprioritize_translations,omitempty"`
PrioritizeTranslationType string `json:"prioritize_translation_type,omitempty"`
ContentFilters
}
SearchParams contains parameters for the /search endpoint. At least one of Title, TitleOrig, or an external identifier must be provided.
func (SearchParams) ToMap ¶
func (sp SearchParams) ToMap() map[string]string
ToMap serializes SearchParams into a flat string map suitable for query parameters.
type SearchResponse ¶
type SearchResponse struct {
Results []Material `json:"results"`
}
SearchResponse представляет структуру ответа для запроса /search.
type Translation ¶
type Translation struct {
ID int `json:"id"`
Title string `json:"title"`
Type string `json:"type"` // Возможные значения: "voice" или "subtitles"
}
Translation описывает структуру озвучки (дублирования).
type TranslationEntry ¶
type TranslationEntry struct {
ID int `json:"id"` // Уникальный идентификатор озвучки
Title string `json:"title"` // Название озвучки
Count int `json:"count"` // Число материалов, в которых используется данная озвучка
}
TranslationEntry описывает отдельную запись озвучки в ответе API.
type TranslationsParams ¶
type TranslationsParams struct {
MediaFilters
}
TranslationsParams contains parameters for the /translations/v2 endpoint.
func (TranslationsParams) ToMap ¶
func (tp TranslationsParams) ToMap() map[string]string
ToMap serializes TranslationsParams into a flat string map suitable for query parameters.
type TranslationsResponse ¶
type TranslationsResponse struct {
Time string `json:"time"` // Время выполнения запроса (например, "5ms")
Total int `json:"total"` // Общее количество записей
Results []TranslationEntry `json:"results"` // Список записей (озвучек)
}
TranslationsResponse представляет структуру ответа эндпоинта /translations/v2.
type YearEntry ¶
type YearEntry struct {
Year int `json:"year"` // Год материала
Count int `json:"count"` // Количество материалов за данный год
}
YearEntry описывает отдельную запись года в ответе API.
type YearsParams ¶
type YearsParams struct {
MediaFilters
}
YearsParams contains parameters for the /years endpoint.
func (YearsParams) ToMap ¶
func (yp YearsParams) ToMap() map[string]string
ToMap serializes YearsParams into a flat string map suitable for query parameters.
type YearsResponse ¶
type YearsResponse struct {
Time string `json:"time"` // Время выполнения запроса (например, "5ms")
Total int `json:"total"` // Общее количество лет
Results []YearEntry `json:"results"` // Список записей с годом и количеством материалов
}
YearsResponse представляет структуру ответа от эндпоинта /years API Kodik.