Компании и телесети

Эндпоинты компаний и телесетей возвращают название, страну происхождения и путь к логотипу студии или телесети по ID: GET /3/company/{company_id} и GET /3/network/{network_id}. Пути и JSON совпадают с TMDB v3. Передайте ID в with_companies и with_networks в discover, чтобы получить список их проектов.

Обновлено Открыть в Markdown

Получение данных компании

GET /3/company/{company_id} возвращает одну кинокомпанию: название, страну происхождения и путь к логотипу. В ответе также есть description, headquarters, homepage и parent_company, но amodb оставляет их пустыми. ID совпадает с ID компании в TMDB, поэтому сохраненные ранее ID продолжают работать.

Пример ниже читает первую кинокомпанию фильма 550, а затем загружает эту компанию.

bashjspyphpgo
COMPANY_ID=$(curl -sf "https://api.amodb.dev/3/movie/550" \
  -H "Authorization: Bearer $AMODB_KEY" | jq '.production_companies[0].id')
curl -sf "https://api.amodb.dev/3/company/$COMPANY_ID" \
  -H "Authorization: Bearer $AMODB_KEY"
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 movie = await get('/movie/550');
const company = await get(`/company/${movie.production_companies[0].id}`);
console.log(company.name, company.origin_country, company.logo_path);
import os
import requests

BASE = "https://api.amodb.dev/3"
HEADERS = {"Authorization": f"Bearer {os.environ['AMODB_KEY']}"}


def get(path):
    r = requests.get(BASE + path, headers=HEADERS, timeout=10)
    r.raise_for_status()
    return r.json()


movie = get("/movie/550")
company = get(f"/company/{movie['production_companies'][0]['id']}")
print(company["name"], company["origin_country"], company["logo_path"])
<?php
function amodb_get(string $path): array {
    $ch = curl_init('https://api.amodb.dev/3' . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
    ]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status !== 200) {
        throw new RuntimeException("amodb returned $status for $path");
    }
    return json_decode($body, true);
}

$movie = amodb_get('/movie/550');
$company = amodb_get('/company/' . $movie['production_companies'][0]['id']);
echo $company['name'], ' ', $company['origin_country'], PHP_EOL;
package main

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

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

func get(path string, out any) error {
	req, err := http.NewRequest("GET", "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 for %s", res.Status, path)
	}
	return json.NewDecoder(res.Body).Decode(out)
}

func main() {
	var movie struct {
		Companies []struct {
			ID int `json:"id"`
		} `json:"production_companies"`
	}
	if err := get("/movie/550", &movie); err != nil || len(movie.Companies) == 0 {
		panic("movie has no production companies")
	}
	var company struct {
		Name          string `json:"name"`
		OriginCountry string `json:"origin_country"`
	}
	if err := get(fmt.Sprintf("/company/%d", movie.Companies[0].ID), &company); err != nil {
		panic(err)
	}
	fmt.Println(company.Name, company.OriginCountry)
}

Параметры

  • company_idпутьобязателен
    Числовой ID компании, например 25.
  • api_keyстрока запросаодин из двух
    Ваш ключ. Используйте его или заголовок Authorization: Bearer.

Поля ответа

ПолеТипПримечания
descriptionстрокаВсегда пустая строка.
headquartersстрокаГород или регион. У большинства компаний пусто.
homepageстрокаАдрес сайта. У большинства компаний пусто.
idцелое числоID компании.
logo_pathстрока или nullДобавьте к https://img.amodb.dev/t/p/{size}.
nameстрокаНазвание компании.
origin_countryстрокаКод ISO 3166-1, например US. Может быть пустым.
parent_companynullВсегда null. amodb не заполняет материнскую компанию.

Пример ответа

JSON
{
  "description": "",
  "headquarters": "",
  "homepage": "",
  "id": 25,
  "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
  "name": "20th Century Fox",
  "origin_country": "US",
  "parent_company": null
}

Та же структура возвращается для любого ID компании, например /3/company/1 для Lucasfilm.

Получение данных телесети

GET /3/network/{network_id} возвращает телесеть: название, страну происхождения, путь к логотипу, headquarters и homepage. Полей description и parent_company в ответе нет. ID телесети берите из массива networks сериала. Сериал /3/tv/1399 содержит HBO с ID 49.

JSON
{
  "headquarters": "",
  "homepage": "",
  "id": 49,
  "logo_path": "/tuomPhY2UtuPTqqFnKMVHvSb724.png",
  "name": "HBO",
  "origin_country": "US"
}
ПолеТипПримечания
headquartersстрокаУ большинства телесетей пусто.
homepageстрокаУ большинства телесетей пусто.
idцелое числоID телесети.
logo_pathстрока или nullПуть к файлу логотипа.
nameстрокаНазвание телесети.
origin_countryстрокаКод ISO 3166-1. Пустая строка для глобальных стриминговых сервисов, например Netflix.

Эндпоинты этой группы

Все пути используют базовый URL https://api.amodb.dev/3 и ту же аутентификацию, что и остальные эндпоинты.

Метод и путьЧто возвращаетПараметры
GET /company/{company_id}Запись компанииcompany_id
GET /network/{network_id}Запись телесетиnetwork_id
GET /search/companyПостраничный список компаний с полями id, name, logo_path, origin_countryquery, page

amodb не предоставляет пути alternative_names и images для компаний и телесетей. Логотип это поле logo_path в самой записи.

Логотипы

Адрес логотипа собирается как https://img.amodb.dev/t/p/w185 плюс logo_path. Размеры логотипов перечислены в GET /3/configuration: w92, w154, w185, w300, w500 и original. Полная таблица размеров есть на странице API изображений. Файлы логотипов в основном в формате PNG, а для файлов изображений ключ не нужен. У компании без логотипа в logo_path стоит null.

Фильтрация discover по компании или телесети

ID компаний и телесетей полезнее всего как фильтры. Discover превращает ID в список проектов.

ФильтрГде работаетЗначение
with_companies/discover/movie и /discover/tvПроекты этих компаний.
with_networks/discover/tvСериалы, которые показывали эти телесети. Discover для фильмов его игнорирует.

Чтобы требовать все ID сразу, разделяйте их запятой, а чтобы принять любой из них, используйте вертикальную черту (в закодированном виде %7C). Первый запрос ниже выводит фильмы одной компании, отсортированные по популярности. Второй выводит сериалы, которые показывал HBO.

curl
curl -sf "https://api.amodb.dev/3/discover/movie?with_companies=$COMPANY_ID&sort_by=popularity.desc&page=1" \
  -H "Authorization: Bearer $AMODB_KEY"

curl -sf "https://api.amodb.dev/3/discover/tv?with_networks=49&sort_by=popularity.desc" \
  -H "Authorization: Bearer $AMODB_KEY"

Результаты discover кэшируются на edge-серверах на 30 минут и приходят по 20 на страницу. Полный список фильтров есть на странице discover.

Поиск компании по названию

GET /3/search/company?query=lucasfilm возвращает постраничный список. Каждая строка содержит id, logo_path, name и origin_country. Строки не ранжируются по точному совпадению: студия Lucasfilm Ltd. имеет ID 1 и стоит третьей, после двух похожих названий. Прежде чем брать ID, сравните name и origin_country. Правила запроса описаны на странице поиск. Пути для поиска телесетей нет.

Ошибки

Несуществующая компания или телесеть возвращает тело ошибки TMDB с status_code 34. Остальные сбои используют то же тело.

HTTPstatus_codeКогда
4017Ключ отсутствует или неверен.
40236Срок действия тарифа закончился.
40434Нет компании или телесети с таким ID, или ID не является числом.
40537Вы отправили метод записи.
42925Превышен лимит запросов в минуту. Подождите столько секунд, сколько указано в Retry-After.

Полный список смотрите на странице ошибки, а заголовки описаны на странице лимиты запросов.

Практические замечания

  • Храните id компании рядом с названием. Названия меняются, ID нет.
  • Перед отрисовкой проверьте, что logo_path не равен null. Не опирайтесь на homepage, headquarters и description, потому что они пустые.
  • Данные компаний и телесетей кэшируются на edge-серверах на 6 часов. Файлы логотипов на img.amodb.dev кэшируются на 30 дней.
  • Телесеть относится к телевидению. Чтобы получить ее сериалы, используйте with_networks в /discover/tv, а не в discover для фильмов.
  • Чтобы найти компанию по названию, воспользуйтесь поиском компаний выше, затем выберите нужную строку по name и origin_country.