Выбірайце па аб’ёме даных і бюджэце
TVmaze працуе толькі з серыяламі. Ён бясплатны як публічны API з лімітамі па IP-адрасе, а яго даныя ідуць пад ліцэнзіяй з указаннем аўтарства, таму падрабязнасці глядзіце ў іх дакументацыі. amodb платны і ахоплівае серыялы, фільмы і персон. Калі ваша праграма трэкер серыялаў і бясплатнай крыніцы вам хапае, TVmaze стане разумным пачаткам. Калі вы паказваеце яшчэ і фільмы, старонкі акцёраў або постэры на некалькіх мовах, адзін ключ amodb замяняе некалькі крыніц.
Што азначае кожны аб’ём для вашай праграмы
| Што паказвае праграма | TVmaze | amodb |
|---|---|---|
| Старонку серыяла | Так | GET /3/tv/{series_id} |
| Спіс эпізодаў | Так | GET / |
| Старонку фільма | Фільмаў няма | GET / |
| Старонку акцёра | Глядзіце іх дакументацыю | GET / і зводныя ўдзельнікі |
| Серыялы, што выходзяць сёння | Глядзіце іх дакументацыю | 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 няма эндпоінта са спісам серыялаў, змененых пасля пэўнай даты.
Параўнанне магчымасцей
| Магчымасць | TVmaze | amodb |
|---|---|---|
| Мадэль цэнаўтварэння | Бясплатны публічны 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 з серыялам і друкуе дату наступнага эпізода.
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_ да кожнага выкліку, каб акцёры і ацэнкі прыходзілі ў тым жа запыце, а не каштавалі яшчэ два запыты на серыял. Чытайце X-RateLimit-Remaining і рабіце паўзу, калі яно дасягае нуля, а потым працягвайце праз X-RateLimit-Reset секунд.
Цэны
amodb працуе з аплатай наперад і ніколі не прадаўжаецца сам. Абярыце 1, 3, 6, 12 або 24 месяцы і план на 20, 40 або 120 запытаў у хвіліну. Доўгія перыяды танней на 10, 20, 30 або 40 працэнтаў, і кожны план уключае ўсе даныя. Сумы ёсць на старонцы цэны.