Изберете според обхвата и бюджета
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 процента, а всеки план включва всички данни. Сумите са на страницата с цените.