Выбірайце па аб’ёме даных і бюджэце

TVmaze працуе толькі з серыяламі. Ён бясплатны як публічны API з лімітамі па IP-адрасе, а яго даныя ідуць пад ліцэнзіяй з указаннем аўтарства, таму падрабязнасці глядзіце ў іх дакументацыі. amodb платны і ахоплівае серыялы, фільмы і персон. Калі ваша праграма трэкер серыялаў і бясплатнай крыніцы вам хапае, TVmaze стане разумным пачаткам. Калі вы паказваеце яшчэ і фільмы, старонкі акцёраў або постэры на некалькіх мовах, адзін ключ amodb замяняе некалькі крыніц.

Што азначае кожны аб’ём для вашай праграмы

Што паказвае праграмаTVmazeamodb
Старонку серыялаТакGET /3/tv/{series_id}
Спіс эпізодаўТакGET /3/tv/{series_id}/season/{season_number}
Старонку фільмаФільмаў нямаGET /3/movie/{movie_id}
Старонку акцёраГлядзіце іх дакументацыюGET /3/person/{person_id} і зводныя ўдзельнікі
Серыялы, што выходзяць сённяГлядзіце іх дакументацыюGET /3/tv/airing_today
Перакладзенае апісаннеГлядзіце іх дакументацыюпараметр language, 14 моў
Ацэнкі з некалькіх сайтаўГлядзіце іх дакументацыюпашырэнне /ratings

Радок з фільмамі вырашае большасць выпадкаў. Калі ў вас няма старонак фільмаў, дадатковы аб’ём для вас нічога не значыць.

Месцы, якія трэба праверыць перад пераходам

Эндпоінты сезонаў і эпізодаў маюць форму TMDB, і некаторыя іх часткі вяртаюцца пустымі. Праверце экраны, якія іх выкарыстоўваюць.

  • Акцёры эпізода. У эпізода cast уяўляе сабой пусты масіў. guest_stars і crew запоўненыя, а асноўныя акцёры ёсць у выкліку /credits серыяла.
  • Дадаткі да сезона. images, videos і translations сезона пустыя, таму постэр сезона бярэцца з запісу сезона, а не са спісу выяў.
  • Вонкавыя id. external_ids сезона і эпізода ўсе роўныя null. Супастаўляйце эпізоды з вашымі запісамі па season_number і episode_number.
  • Стваральнікі. created_by у серыяла пусты для большасці серыялаў.
  • Няма стужкі змен. У amodb няма эндпоінта са спісам серыялаў, змененых пасля пэўнай даты.

Параўнанне магчымасцей

МагчымасцьTVmazeamodb
Мадэль цэнаўтварэнняБясплатны публічны APIЗ аплатай наперад, ад 1 да 24 месяцаў за адну пакупку
Бясплатны тарыфТак, увесь публічны APIНяма, пробнага перыяду таксама няма
АўтэнтыфікацыяГлядзіце іх дакументацыюapi_key або загаловак Bearer
Фармат адказуJSON, глядзіце іх дакументацыюJSON у форме TMDB v3
МовыГлядзіце іх дакументацыю14 моў інтэрфейсу
ФільмыНеТак
СерыялыТак, гэта яго адзіны фокусТак
ПерсоныГлядзіце іх дакументацыюТак
ВыявыГлядзіце іх дакументацыюimg.amodb.dev, дзесяць токенаў памераў
РэйтынгіГлядзіце іх дакументацыюПяць крыніц, калі вядомыя
Ліміт запытаўПа IP-адрасе, лічбы глядзіце ў іх дакументацыі20, 40 або 120 у хвіліну на ключ
Камерцыйнае выкарыстаннеДаныя пад ліцэнзіяй з указаннем аўтарства, глядзіце іх дакументацыюПлатныя планы, гл. цэны
СумяшчальнасцьУласны APIЧытанне TMDB v3 і OMDb

Чым адрозніваецца amodb

  • Ліміт прывязаны да ключа. Усе вашы серверы падзяляюць адзін лічыльнік у слізгальным 60-секундным акне, а адказы нясуць X-RateLimit-Remaining. Нічога не залежыць ад таго, з якога адраса выходзіць запыт.
  • Фільмы, серыялы і персоны ў адным месцы. Адзін кліент, адзін фармат памылак і адзін набор загалоўкаў абслугоўваюць усю праграму.
  • Мовы. Назвы і апісанні вяртаюцца на любой з 14 моў, а original_name захоўвае родную назву.
  • Устоены пратакол. Бібліятэкі, напісаныя для чытання TMDB v3, працуюць з новым базавым URL. Эндпоінты серыялаў глядзіце на старонцы API серыялаў.

Дзе TVmaze падыходзіць лепш

  • Няма бюджэту. Ён бясплатны, таму студэнцкі праект або трэкер выхадных не патрабуе аплаты. У amodb няма бясплатнага тарыфа і пробнага перыяду.
  • Толькі серыялы, без лішняга. Калі ваша мадэль даных складаецца з серыялаў і эпізодаў і нічога болей, API, арыентаваны на серыялы, ёй адпавядае.
  • Свае канвенцыі. Праграмы, ужо пабудаваныя вакол мадэлі TVmaze, эканомяць працу, застаючыся на ім.

Калі вы застаяцеся, выконвайце яго ліцэнзію з указаннем аўтарства. Фармулёўку глядзіце ў іх дакументацыі.

Міграцыя на amodb

Пачніце з задачы супастаўлення. Прачытайце вонкавыя id, якія пералічаны ў вашых захаваных запісах TVmaze (назвы палёў глядзіце ў іх дакументацыі), і вырашыце іх праз /3/find. Праграма ніжэй супастаўляе адзін IMDb id з серыялам і друкуе дату наступнага эпізода.

Go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type findResult struct {
	TVResults []struct {
		ID   int    `json:"id"`
		Name string `json:"name"`
	} `json:"tv_results"`
}

type episode struct {
	AirDate       string `json:"air_date"`
	SeasonNumber  int    `json:"season_number"`
	EpisodeNumber int    `json:"episode_number"`
}

type series struct {
	Name        string   `json:"name"`
	Status      string   `json:"status"`
	NextEpisode *episode `json:"next_episode_to_air"`
}

var client = &http.Client{Timeout: 10 * time.Second}

func get(path string, out any) error {
	req, err := http.NewRequest(http.MethodGet, "https://api.amodb.dev/3"+path, nil)
	if err != nil {
		return err
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		return fmt.Errorf("amodb returned %s", res.Status)
	}
	return json.NewDecoder(res.Body).Decode(out)
}

func main() {
	var found findResult
	if err := get("/find/tt0903747?external_source=imdb_id", &found); err != nil {
		fmt.Println(err)
		return
	}
	if len(found.TVResults) == 0 {
		fmt.Println("no match")
		return
	}
	var s series
	if err := get(fmt.Sprintf("/tv/%d", found.TVResults[0].ID), &s); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(s.Name, s.Status)
	if s.NextEpisode != nil {
		fmt.Println("next episode:", s.NextEpisode.AirDate)
	}
}

Указальнік у тыпе NextEpisode апрацоўвае null, які вяртаюць завершаныя серыялы. Выканайце супастаўленне адзін раз, захавайце id amodb у кожным сваім запісе і далей выклікайце /3/tv/{id}. На 429 адказваюць загалоўкам Retry-After, а іншыя крыніцы id пералічаны на старонцы пошук па вонкавым ідэнтыфікатары.

Ацэнка начной сінхранізацыі

Дапусцім, вы абнаўляеце 300 серыялаў за ноч. Гэта 300 запытаў, бо адзін выклік серыяла вяртае адзін серыял. Пры 20 запытах у хвіліну задача займае 15 хвілін, пры 40 займае 7.5 хвіліны, а пры 120 займае 2.5 хвіліны. Дадайце append_to_response=credits,ratings да кожнага выкліку, каб акцёры і ацэнкі прыходзілі ў тым жа запыце, а не каштавалі яшчэ два запыты на серыял. Чытайце X-RateLimit-Remaining і рабіце паўзу, калі яно дасягае нуля, а потым працягвайце праз X-RateLimit-Reset секунд.

Цэны

amodb працуе з аплатай наперад і ніколі не прадаўжаецца сам. Абярыце 1, 3, 6, 12 або 24 месяцы і план на 20, 40 або 120 запытаў у хвіліну. Доўгія перыяды танней на 10, 20, 30 або 40 працэнтаў, і кожны план уключае ўсе даныя. Сумы ёсць на старонцы цэны.