kiwilan / php-tmdb
用于与电影数据库 (TMDB) API 交互的 PHP 封装包。
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.9
Requires (Dev)
- php: ^8.1
- laravel/pint: ^1.0
- pestphp/pest: ^2.20
- phpstan/phpstan: ^1.12
- spatie/ray: ^1.28
README
用于与 电影数据库 (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*Url
、get*Image
和save*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
贡献
修复?新功能?打字错误?欢迎您为此项目做出贡献。只需打开一个拉取请求。
路线图
- 账户
- 身份验证
- 认证
- 更改
-
收藏 - 公司
- 配置
-
信用 - 探索
- 查找
- 类型
- 访客会话
- 关键词
- 列表
-
电影列表 - 电影
- 网络
- 人物列表
- 人物
- 评论
- 搜索
-
热门 -
电视系列列表 - 电视系列
- 电视季
- 电视集
- 电视集分组
- 观看提供商
变更日志
有关最近更改的更多信息,请参阅变更日志
信用
- 感谢TMDB提供的优秀API
- 感谢
spatie
提供的spatie/package-skeleton-php
- 感谢Ewilan Rivière为本包提供者
- 所有贡献者
许可证
麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。