קבלת כל הפרקים של עונה

GET /3/tv/{tv_id}/season/{season_number} מחזיר עונה עם מערך episodes המלא שלה. לכל פרק יש episode_number, name, overview, air_date, runtime ו-still_path. המזהים הם המזהים המספריים של TMDB, למשל 1396 עבור Breaking Bad.

מקבלים עונות, פרקים עם תאריכים ומשכים, תמונות סצנה, את הפרק הבא והאחרון ששודרו בסדרה, ואת רשימת הסדרים החלופיים של הפרקים. שדות טקסט עוקבים אחרי הפרמטר language, ותקציר נשאר ריק כשאין תרגום.

אילו נתונים מקבלים

נקודת קצהמה מוחזר
GET /3/tv/{tv_id}סיכום seasons, number_of_seasons, status, next_episode_to_air, last_episode_to_air
GET /3/tv/{tv_id}/season/{season_number}עונה אחת עם כל ה-episodes שלה
GET /3/tv/{tv_id}/season/{season_number}/episode/{episode_number}פרק אחד עם crew ו-guest_stars
GET /3/tv/{tv_id}/episode_groupsשם, type ומספר הפרקים של כל סדר חלופי שהוגדר לסדרה

שדות של פרק:

שדהסוגהערות
id, show_idintegerמזהה הפרק ומזהה הסדרה. show_id מופיע ברשימות עונות וב-next_episode_to_air, לא בנתיב של פרק בודד
episode_number, season_numberintegerהמיקום בעונה
episode_typestringלמשל standard
name, overviewstringמתורגמים לפי language
air_datestring או nullYYYY-MM-DD, ריק או null כשלא הוכרז
runtimeinteger או nullדקות
still_pathstring או nullמצרפים ל-https://img.amodb.dev/t/p/{size}
vote_average, vote_countnumber, integerכרגע 0 בפרקים
production_codestringקוד אולפן, לעיתים קרובות ריק
crew, guest_starsarrayאנשים שמופיעים בקרדיטים של הפרק, עם אותם שדות כמו חבר צוות שחקנים

מתחילים בשלושה שלבים

  1. בחרו מסלול בעמוד תמחור. כל המסלולים מחזירים את אותם נתוני פרקים, ורק קצב הבקשות שונה.
  2. צרו מפתח בלוח הבקרה של החשבון ושמרו אותו במשתנה סביבה.
  3. בקשו /3/tv/{tv_id}/season/1 עם המפתח ככותרת Bearer או כ-api_key.

בקשה לדוגמה

הדוגמה שולפת את עונה 1 של Breaking Bad (מזהה סדרה 1396) באנגלית. תוכנית ה-Go מפענחת אותה למבנים עם טיפוסים ומדפיסה שורה לכל פרק עם תאריך השידור, המשך וכתובת תמונת הסצנה.

bashgo
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
package main

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

type Episode struct {
	EpisodeNumber int     `json:"episode_number"`
	Name          string  `json:"name"`
	AirDate       string  `json:"air_date"`
	Runtime       int     `json:"runtime"`
	StillPath     *string `json:"still_path"`
}

type Season struct {
	Name         string    `json:"name"`
	SeasonNumber int       `json:"season_number"`
	Episodes     []Episode `json:"episodes"`
}

func main() {
	client := &http.Client{Timeout: 10 * time.Second}
	url := "https://api.amodb.dev/3/tv/1396/season/1?language=en-US"
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(fmt.Sprintf("amodb returned %s", res.Status))
	}
	var season Season
	if err := json.NewDecoder(res.Body).Decode(&season); err != nil {
		panic(err)
	}
	fmt.Println(season.Name)
	for _, e := range season.Episodes {
		still := "no still"
		if e.StillPath != nil {
			still = "https://img.amodb.dev/t/p/w300" + *e.StillPath
		}
		fmt.Printf("S%02dE%02d  %s  %3d min  %s  %s\n",
			season.SeasonNumber, e.EpisodeNumber, e.AirDate, e.Runtime, e.Name, still)
	}
}

תגובה מקוצרת: 2 מתוך 7 הפרקים, עם חבר צוות אחד ושחקן אורח אחד בכל אחד.

JSON
{
  "air_date": "2008-01-20",
  "episodes": [
    {
      "air_date": "2008-01-20",
      "episode_number": 1,
      "episode_type": "standard",
      "id": 62085,
      "name": "Pilot",
      "overview": "When an unassuming high school chemistry teacher discovers he has a rare form...",
      "production_code": "",
      "runtime": 59,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7029219c29533d00dd2c1",
          "adult": false,
          "gender": 2,
          "id": 2483,
          "known_for_department": "Camera",
          "name": "约翰·托尔",
          "original_name": "约翰·托尔",
          "popularity": 1.1957,
          "profile_path": "/cfL9A6tC7L5Ps5fq1o3WpVKGMb1.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Steven Gomez",
          "credit_id": "5271b489760ee35b3e0881a7",
          "order": 8,
          "adult": false,
          "gender": 2,
          "id": 61535,
          "known_for_department": "Acting",
          "name": "史蒂文·迈克尔·奎扎达",
          "original_name": "史蒂文·迈克尔·奎扎达",
          "popularity": 1.7511,
          "profile_path": "/pVYrDkwI6GWvCNL2kJhpDJfBFyd.jpg"
        }
      ]
    },
    {
      "air_date": "2008-01-27",
      "episode_number": 2,
      "episode_type": "standard",
      "id": 62086,
      "name": "Cat's in the Bag...",
      "overview": "Walt and Jesse attempt to tie up loose ends. The desperate situation gets mor...",
      "production_code": "",
      "runtime": 49,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/AbMoecO0ZZio0LcgeLxlzdyGs6X.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7049c19c2953b63015013",
          "adult": false,
          "gender": 2,
          "id": 17948,
          "known_for_department": "Camera",
          "name": "Reynaldo Villalobos",
          "original_name": "Reynaldo Villalobos",
          "popularity": 0.904,
          "profile_path": "/4YlfhHDRZWhbRgeqT2Bwl1u5p9j.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Krazy-8",
          "credit_id": "52725845760ee3046b09426e",
          "order": 504,
          "adult": false,
          "gender": 2,
          "id": 1046460,
          "known_for_department": "Acting",
          "name": "Max Arciniega",
          "original_name": "Max Arciniega",
          "popularity": 1.4399,
          "profile_path": "/eqKAJKPpt41KpsLIkkBnAY4HMAL.jpg"
        }
      ]
    }
  ],
  "name": "Season 1",
  "overview": "High school chemistry teacher Walter White's life is suddenly transformed by...",
  "id": 3572,
  "poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
  "season_number": 1,
  "vote_average": 0
}

שליפת סדרה שלמה

amodb לא מקבל ערכים בסגנון season/1 ב-append_to_response, ולכן קריאות העונות נשארות נפרדות. קראו קודם את number_of_seasons ואת הרשימה seasons מפרטי הסדרה, ואז בקשו כל עונה בלולאה.

JavaScript
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function get(path) {
  const res = await fetch(base + path, { headers });
  if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
  return res.json();
}

const show = await get('/tv/1396');
for (const { season_number } of show.seasons) {
  const season = await get(`/tv/1396/season/${season_number}`);
  console.log(season.name, season.episodes.length);
}

seasons כולל עונה 0 כשיש לסדרה פרקים מיוחדים, ולכן Breaking Bad עולה קריאת פרטים אחת ועוד 6 קריאות עונה. סדרה עם 10 עונות עולה 11 בקשות. הפרטים נשמרים בקצה במטמון 6 שעות, ולכן שמרו את התוצאה ורעננו אותה לפי לוח זמנים.

תאריכי שידור ומה בא אחר כך

GET /3/tv/{tv_id} כולל את next_episode_to_air ואת last_episode_to_air, אובייקטי פרק מלאים עם name, air_date, season_number, episode_number, runtime ו-still_path. הערך next_episode_to_air הוא null כשלא הוכרז דבר. שלבו אותו עם status (למשל Returning Series, Ended או Canceled) כדי להחליט אם להציג ספירה לאחור.

air_date הוא תאריך לוח שנה בלי שעה ביום. השוו אותו לתאריך של היום כדי לסמן פרקים חדשים. ללוח של מה משודר, הרשימות airing_today ו-on_the_air בעמוד טרנדים ורשימות נשמרות במטמון 30 דקות.

תמונות סצנה ומשכים

השתמשו ב-w185 או ב-w300 לשורות ברשימה וב-original לגודל מלא. גדלי תמונות הסצנה הם w92, w185, w300 ו-original. לפרק יכולה להיות חסרה תמונת סצנה, ולכן הציגו תמונת מחדל כש-still_path הוא null. שרת התמונות לא דורש מפתח, ראו תמונות.

runtime הוא בדקות ויכול להיות null. כדי להציג זמן צפייה רצוף לעונה, סכמו את runtime על פני episodes וספרו null כ-0. הוסיפו append_to_response=credits,images לנתיב של פרק בודד כדי לקבל אובייקט credits ורשימת stills. מערך cast של הפרק ריק, והאנשים נמצאים ב-crew וב-guest_stars. פרטים בעמודים עונות ופרקים וקרדיטים.

סדרים חלופיים עם קבוצות פרקים

סדרות מסוימות נצפות בסדר שונה מזה ששודרו בו. GET /3/tv/{tv_id}/episode_groups מציג את הסדרים שהוגדרו לסדרה. בכל פריט יש id, name, description, type, episode_count, group_count ו-network. המערך results ריק כשלא הוגדר דבר.

typeסדר
1תאריך שידור מקורי
2מוחלט
3DVD
4דיגיטלי
5קשת עלילה
6הפקה
7טלוויזיה

amodb מחזיר רק את הרשימה הזו. הוא לא מציע GET /3/tv/episode_group/{id}, ולכן הפרקים שבתוך קבוצה אינם זמינים. את נתוני הפרקים קראו מנקודות הקצה של עונות.

איך זה בהשוואה

יכולתגירוד דפי פרקיםAPI למטא-נתונים עם מסלול חינמיamodb
עונה מלאהשליפת דף אחד לכל עונהראו במסמכים שלהםקריאה אחת, כולל מערך episodes
סדרה שלמהסריקה של כל עונהראו במסמכים שלהםקריאה אחת לכל עונה, הרשומות ב-seasons
תאריכי שידורניתוח טקסטראו במסמכים שלהםair_date ועוד next_episode_to_air
תמונות סצנההורדה ושינוי גודלראו במסמכים שלהםגדלים קבועים ב-img.amodb.dev, בלי מפתח
סדרי פרקים אחריםלא קייםראו במסמכים שלהםרשימת episode_groups, תוכן הקבוצות לא מוגש
שפותאזור שפה אחד לכל אתרראו במסמכים שלהם14 שפות דרך language

תמחור

המסלולים בתשלום מראש ל-1, 3, 6, 12 או 24 חודשים, עם 0, 10, 20, 30 או 40 אחוז הנחה לתקופות הארוכות יותר, והם לעולם לא מתחדשים מעצמם. המסלולים של 20, 40 ו-120 בקשות לדקה מחזירים כל נקודת קצה בעמוד הזה. רענון סדרה עולה בקשה אחת לפרטים ובקשה אחת לכל עונה. אין מסלול חינמי. בחרו מסלול בעמוד תמחור.