kiwilan/php-tmdb

用于与电影数据库 (TMDB) API 交互的 PHP 封装包。

0.1.05 2024-09-24 12:19 UTC

README

Banner with a lots of movies and TV series in background and PHP TMDB title

php version downloads license tests codecov

用于与 电影数据库 (TMDB) API 交互的 PHP 封装包。

重要

您需要在 TMDB 上创建账户并获取一个 API密钥 来使用此包。这非常简单且免费,您可以阅读 此指南 以开始使用。

警告

此包正在开发中。

要求

PHP 8.1 及更高版本。

注意

guzzlehttp/guzzle 将由 composer 自动安装。

关于

此包使用仓储模式与 TMDB API 交互。每个仓储代表一个 API 类别,如 电影搜索趋势 等。API 的每个端点是仓储中的方法,如 details() 用于 电影movie() 用于 搜索all() 用于 趋势 等。如果您了解 TMDB API,您将很容易理解此包。

这不是官方 TMDB API PHP 封装包,如果您想要官方包,请查看 php-tmdb/api

为什么选择这个包?

目前所有与 TMDB API 交互的 PHP 包都过时了,我需要一个现代且易于使用的包来与 TMDB API 交互。因此,我决定创建这个包。您可以通过查看 roadmap 来了解我计划如何使用这个包。

安装

您可以通过 composer 安装此包。

composer require kiwilan/php-tmdb

API 使用方法

基本示例

您只需要使用 client() 静态方法获取带有您的 API 密钥的新 Tmdb 类实例。之后,您可以使用仓储和链式方法与 TMDB API 交互,第一个链式方法是仓储,对应于 API 的一个类别。第二个链式方法是 API 的一个端点。

use Kiwilan\Tmdb\Tmdb;

$results = Tmdb::client('API_KEY')
    ->search()
    ->movie(query: 'the lord of the rings'); // ?\Kiwilan\Tmdb\Results\MovieResults

集合

集合:详细信息

通过 ID 获取集合的详细信息。

use Kiwilan\Tmdb\Tmdb;

$collection = Tmdb::client('API_KEY')
    ->collections()
    ->details(collection_id: 119); // ?\Kiwilan\Tmdb\Models\TmdbCollection

集合:图片

获取属于集合的图片。

$images = Tmdb::client('API_KEY')
    ->collections()
    ->images(collection_id: 119); // ?\Kiwilan\Tmdb\Models\Images\TmdbImages

集合:翻译

获取属于集合的翻译。

$translations = Tmdb::client('API_KEY')
    ->collections()
    ->translations(collection_id: 119); // ?\Kiwilan\Tmdb\Models\Translations\TmdbTranslations

公司

公司:详细信息

通过 ID 获取公司的详细信息。

use Kiwilan\Tmdb\Tmdb;

$company = Tmdb::client('API_KEY')
    ->companies()
    ->details(company_id: 12); // ?\Kiwilan\Tmdb\Models\TmdbCompany

信用

信用:详细信息

通过 ID 获取电影或电视的信用详细信息。

use Kiwilan\Tmdb\Tmdb;

$credit = Tmdb::client('API_KEY')
    ->credits()
    ->details(credit_id: '5256c8b219c2956ff6047cd8'); // ?\Kiwilan\Tmdb\Models\TmdbCredit

电影列表

电影列表:正在上映

获取目前正在影院上映的电影列表。

use Kiwilan\Tmdb\Tmdb;

$now_playing = Tmdb::client('API_KEY')
    ->movieLists()
    ->nowPlaying(); // ?\Kiwilan\Tmdb\Results\MovieResults

电影列表:流行

获取按流行度排序的电影列表。

$popular = Tmdb::client('API_KEY')
    ->movieLists()
    ->popular(); // ?\Kiwilan\Tmdb\Results\MovieResults

电影列表:评分最高

获取按评分排序的电影列表。

$top_rated = Tmdb::client('API_KEY')
    ->movieLists()
    ->topRated(); // ?\Kiwilan\Tmdb\Results\MovieResults

电影列表:即将上映

获取即将上映的电影列表。

$upcoming = Tmdb::client('API_KEY')
    ->movieLists()
    ->upcoming(); // ?\Kiwilan\Tmdb\Results\MovieResults

电影

电影:详细信息

通过 ID 获取电影的顶级详细信息(您可以使用 append_to_response 选项获取更多详细信息)。

use Kiwilan\Tmdb\Tmdb;

$movie = Tmdb::client('API_KEY')
    ->movies()
    ->details(movie_id: 120); // ?\Kiwilan\Tmdb\Models\TmdbMovie

网络

网络:详细信息

通过 ID 获取网络的详细信息。

use Kiwilan\Tmdb\Tmdb;

$network = Tmdb::client('API_KEY')
    ->networks()
    ->details(network_id: 49); // ?\Kiwilan\Tmdb\Models\TvSeries\TmdbNetwork

搜索

搜索:集合

通过原始、翻译和替代名称搜索集合。

use Kiwilan\Tmdb\Tmdb;

$results = Tmdb::client('API_KEY')
    ->search()
    ->movie(query: 'the lord of the rings');

$collections = $results->getResults(); // \Kiwilan\Tmdb\Models\TmdbCollection[]
$firstCollection = $results->getFirstResult(); // ?\Kiwilan\Tmdb\Models\TmdbCollection

您可以在搜索中使用选项

use Kiwilan\Tmdb\Tmdb;
use Kiwilan\Tmdb\Query\SearchCollectionQuery;

$results = Tmdb::client('API_KEY')
    ->search()
    ->collection(query: 'le seigneur des anneaux', params: new SearchCollectionQuery(
        include_adult: true,
        language: 'fr-FR',
        page: 1,
        year: 2001,
    ));

搜索:电影

通过原始、翻译和替代标题搜索电影。

use Kiwilan\Tmdb\Tmdb;

$results = Tmdb::client('API_KEY')
    ->search()
    ->movie(query:'the fellowship of the ring');

$movies = $results->getResults(); // \Kiwilan\Tmdb\Models\TmdbMovie[]
$firstMovie = $results->getFirstResult(); // ?\Kiwilan\Tmdb\Models\TmdbMovie

您可以在搜索中使用选项

use Kiwilan\Tmdb\Tmdb;
use Kiwilan\Tmdb\Query\SearchMovieQuery;

$results = Tmdb::client('API_KEY')
    ->search()
    ->movie(query: 'le seigneur des anneaux', params: new SearchMovieQuery(
        include_adult: true,
        language: 'fr-FR',
        primary_release_year: 2001,
        page: 1,
        region: 'en-US',
        year: 2001,
    ));

搜索:电视

通过原始名称、翻译名称以及别名搜索电视节目。

use Kiwilan\Tmdb\Tmdb;

$results = Tmdb::client('API_KEY')
    ->search()
    ->tv(query: 'game of thrones');

$tvSeries = $results->getResults(); // \Kiwilan\Tmdb\Models\TmdbTvSeries[]
$firstTvSeries = $results->getFirstResult(); // ?\Kiwilan\Tmdb\Models\TmdbTvSeries

您可以在搜索中使用选项

use Kiwilan\Tmdb\Tmdb;
use Kiwilan\Tmdb\Query\SearchTvSeriesQuery;

$results = Tmdb::client('API_KEY')
    ->search()
    ->tv(query: 'game of thrones', params: new SearchTvSeriesQuery(
        first_air_date_year: 2011,
        include_adult: true,
        language: 'fr-FR',
        page: 1,
        year: 2011,
    ));

热门

热门:全部

获取热门电影、电视节目和人物。

use Kiwilan\Tmdb\Tmdb;

$all = Tmdb::client('API_KEY')
    ->trending()
    ->all(); // ?\Kiwilan\Tmdb\Results\MediaResults

热门:电影

在TMDB上获取热门电影。

use Kiwilan\Tmdb\Tmdb;

$movies = Tmdb::client('API_KEY')
    ->trending()
    ->movies(); // ?\Kiwilan\Tmdb\Results\MovieResults

热门:人物

在TMDB上获取热门人物。

use Kiwilan\Tmdb\Tmdb;

$people = Tmdb::client('API_KEY')
    ->trending()
    ->people(); // ?\Kiwilan\Tmdb\Results\PeopleResults

热门:电视

在TMDB上获取热门电视节目。

use Kiwilan\Tmdb\Tmdb;

$tv = Tmdb::client('API_KEY')
    ->trending()
    ->tv(); // ?\Kiwilan\Tmdb\Results\TvSerieResults

电视系列列表

电视系列列表:今日播出

获取今天播出的电视节目列表。

$airing_today = Tmdb::client('API_KEY')
    ->tvSeriesList()
    ->airingToday(); // ?\Kiwilan\Tmdb\Results\TvSerieResults

电视系列列表:即将播出

获取未来7天内播出的电视节目列表。

$on_the_air = Tmdb::client('API_KEY')
    ->tvSeriesList()
    ->onTheAir(); // ?\Kiwilan\Tmdb\Results\TvSerieResults

电视系列列表:热门

获取按热度排序的电视节目列表。

$popular = Tmdb::client('API_KEY')
    ->tvSeriesList()
    ->popular(); // ?\Kiwilan\Tmdb\Results\TvSerieResults

电视系列列表:评分最高

获取按评分排序的电视节目列表。

$top_rated = Tmdb::client('API_KEY')
    ->tvSeriesList()
    ->topRated(); // ?\Kiwilan\Tmdb\Results\TvSerieResults

电视系列

电视系列:详情

获取电视节目的详细信息(您可以使用append_to_response选项获取更多详细信息)。

use Kiwilan\Tmdb\Tmdb;

$tvSeries = Tmdb::client('API_KEY')
    ->tvSeries()
    ->details(series_id: 1399); // ?\Kiwilan\Tmdb\Models\TmdbTvSeries

电视季

电视季:详情

查询电视季的详细信息(您可以使用append_to_response选项获取更多详细信息)。

use Kiwilan\Tmdb\Tmdb;

$season = Tmdb::client('API_KEY')
    ->tvSeasons()
    ->details(series_id: 1399, season_number: 1); // ?\Kiwilan\Tmdb\Models\TmdbSeason

电视集

电视集:详情

查询电视集的详细信息(您可以使用append_to_response选项获取更多详细信息)。

use Kiwilan\Tmdb\Tmdb;

$episode = Tmdb::client('API_KEY')
    ->tvEpisodes()
    ->details(series_id: 1399, season_number: 1, episode_number: 1); // ?\Kiwilan\Tmdb\Models\TmdbEpisode

高级

结果

对于返回结果列表的任何方法,您可以使用多个方法

use Kiwilan\Tmdb\Tmdb;

$movies = Tmdb::client('API_KEY')
    ->movieLists()
    ->popular(); // ?\Kiwilan\Tmdb\Results\MovieResults

$results = $movies->getResults(); // \Kiwilan\Tmdb\Models\TmdbMovie[]
$firstResult = $movies->getFirstResult(); // ?\Kiwilan\Tmdb\Models\TmdbMovie
$lastResult = $movies->getLastResult(); // ?\Kiwilan\Tmdb\Models\TmdbMovie
$filterResults = $movies->filter(fn (\Kiwilan\Tmdb\Models\TmdbMovie $movie) => $movie->getVoteAverage() > 8); // \Kiwilan\Tmdb\Models\TmdbMovie[]
$findResult = $movies->find(fn (\Kiwilan\Tmdb\Models\TmdbMovie $movie) => $movie->getVoteAverage() > 8); // ?\Kiwilan\Tmdb\Models\TmdbMovie

图片

对于任何具有图片(海报、背景、标志、个人资料、静止)的模型,您可以使用多个方法

use Kiwilan\Tmdb\Tmdb;

$movie = Tmdb::client('API_KEY')
    ->movies()
    ->details(movie_id: 120); // ?\Kiwilan\Tmdb\Models\TmdbMovie

$poster_path = $movie->getPosterPath(); // string|null (path to poster)
$poster_url = $movie->getPosterUrl(); // string|null (URL to poster)
$poster_image = $movie->getPosterImage(); // string|null (binary image)
$success = $movie->savePosterImage('path/to/save/poster.jpg'); // bool (true if success)

您可以使用size选项更改图片大小,该选项适用于get*Urlget*Imagesave*Image方法

use Kiwilan\Tmdb\Tmdb;
use Kiwilan\Tmdb\Enums\PosterSize;

$movie = Tmdb::client('API_KEY')
    ->movies()
    ->details(movie_id: 120); // ?\Kiwilan\Tmdb\Models\TmdbMovie

$poster_url = $movie->getPosterUrl(size: PosterSize::W500); // string|null (URL to poster)

这些方法适用于海报背景标志个人资料静止

添加到响应

TMDB通过append_to_response选项提供了一种获取更多详细信息的方法。您可以在同一请求中添加更多数据,这对于在一次请求中获取所有所需数据非常有用。

append_to_response是将额外请求添加到任何顶级命名空间的一种简单而有效的方法。电影、电视节目、电视季、电视集和人物详情方法都支持一个名为append_to_response的查询参数。这使得在单个HTTP请求中在同一命名空间内进行子请求成为可能。每个请求都将作为新的JSON对象附加到响应中。请参阅https://developer.themoviedb.org/docs/append-to-response

要了解哪些方法支持append_to_response,请检查方法是否具有append_to_response参数(始终为可选参数,位于参数列表末尾)。要了解您可以添加的内容,请参阅官方文档

带有append_to_response的示例

use Kiwilan\Tmdb\Tmdb;

$movie = Tmdb::client('API_KEY')
    ->movies()
    ->details(movie_id: 120, append_to_response: ['credits' ,'videos']); // ?\Kiwilan\Tmdb\Models\TmdbMovie

获取原始数据

如果您想从TMDB API获取原始数据,可以使用getRawData()方法和getRawDataKey()方法获取特定键。

注意

如果没有为键分配专用方法,您可以使用getRawDataKey()方法获取它,但请不要犹豫,提出一个请求以要求添加专用方法。

use Kiwilan\Tmdb\Tmdb;

$movie = Tmdb::client('API_KEY')
    ->movies()
    ->details(movie_id: 120); // ?\Kiwilan\Tmdb\Models\TmdbMovie

$raw_data = $movie->getRawData(); // array
$raw_title_key = $movie->getRawDataKey('title'); // mixed

发送原始请求

如果您想向TMDB API发送原始请求,可以使用raw()方法,API密钥将自动添加。

use Kiwilan\Tmdb\Tmdb;

$response = Tmdb::client(apiKey())
    ->raw()
    ->url('/movie/now_playing', ['language' => 'en-US', 'page' => 1]); // ?Kiwi\Tmdb\Repositories\RawRepository

$response->isSuccess(); // bool
$response->getStatusCode(); // int
$response->getBody(); // array
$response->getUrl(); // string

测试

composer test

贡献

修复?新功能?打字错误?欢迎您为此项目做出贡献。只需打开一个拉取请求。

路线图

变更日志

有关最近更改的更多信息,请参阅变更日志

信用

许可证

麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。

https://github.com/kiwilan/php-tmdb