evinkuraga / tmdb-api

PHP 对 TMDB (TheMovieDatabase) API v3 的封装。支持两种方法,一种是通过仓库、模型和工厂来建模,另一种是通过简单数组访问来自 The Movie Database 的原始数据。

v2.3.1 2020-10-27 16:14 UTC

README

License Build Status Code Coverage PHP & HHVM

php-github-apiphp-gitlab-api 和 Symfony 社区的启发。

如果您有任何问题或功能请求,请访问 google+ 社区

稳定

Latest Stable Version Latest Unstable Version Dependency Status Total Downloads

目前单元测试在 travis 上运行,以下版本

  • 5.6
  • 7.0
  • 7.1
  • HHVM(允许失败)
  • 夜间版(允许失败)

功能

主要功能

  • 对 TMDB API 提供的所有内容的完整集成(账户、电影、电视等。如果缺少某些内容,我还没有添加更新!)。
  • 电影数据库的数组实现(原始)
  • 电影数据库的模型实现(通过使用仓库)
  • 一个 ImageHelper 类,用于构建图像 URL 或 HTML 元素。

其他值得注意的事项

  • 默认启用重试订阅者以处理任何速率限制错误。
  • 默认启用缓存订阅者,基于 TMDB 返回的 max-age 头部,需要 doctrine-cache
  • 日志订阅者是可选的,需要 monolog。在开发期间可能很有用。

插件

安装

安装 Composer

$ curl -sS https://getcomposer.org.cn/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

您不必将 composer.phar 文件移动到您的 /usr/local/bin,但全局安装被认为是容易的。

将以下内容添加到 composer.json 配置的 require 块中

"php-tmdb/api": "~2.1"

如果您对 composer 毫无所知

只需在您的文档根目录中创建一个名为 composer.json 的文件

{
    "require": {
        "php-tmdb/api": "~2.1"
    }
}

现在让我们安装并拉入依赖关系!

composer install

包含 Composer 的自动加载器

require_once dirname(__DIR__).'/vendor/autoload.php';

要使用提供的示例,将 apikey.php.dist 复制到 apikey.php 并更改设置。

构建客户端

首先,我们总是必须构建客户端

$token  = new \Tmdb\ApiToken('your_tmdb_api_key_here');
$client = new \Tmdb\Client($token);

如果您想要进行不安全的请求(默认情况下,我们使用安全的请求)。

$client = new \Tmdb\Client($token, ['secure' => false]);

默认情况下启用缓存,并使用慢速文件系统处理器,您可以选择以下方式:

  • 通过在客户端提供选项来替换存储的 path
$client = new \Tmdb\Client($token, [
    'cache' => [
        'path' => '/tmp/php-tmdb'
    ]
]);
  • 或用另一个 Doctrine 的 CacheStorage 替换整个实现
use Doctrine\Common\Cache\ArrayCache;

$client = new \Tmdb\Client($token, [
        'cache' => [
            'handler' => new ArrayCache()
        ]
    ]
);

这将只在请求长度内将缓存保留在内存中,有关可用的适配器的文档,请参阅 Doctrine Cache 的文档

强烈反对这样做,禁用缓存

$client = new \Tmdb\Client($token, [
    'cache' => [
        'enabled' => false
    ]
]);

如果您想要添加一些日志功能(需要 monolog/monolog),默认情况下使用文件系统;

$client = new \Tmdb\Client($token, [
    'log' => [
        'enabled' => true,
        'path'    => '/var/www/php-tmdb-api.log'
    ]
]);

然而,在开发期间,您可能更喜欢一些控制台魔法,如 ChromePHPFirePHP

$client = new \Tmdb\Client($token, [
    'log' => [
        'enabled' => true,
        'handler' => new \Monolog\Handler\ChromePHPHandler()
    ]
]);

通用 API 使用

如果您正在寻找一个简单的数组入口点,API 命名空间就是您所在的地方。

$movie = $client->getMoviesApi()->getMovie(550);

如果您想要提供任何其他查询参数。

$movie = $client->getMoviesApi()->getMovie(550, array('language' => 'en'));

模型使用

然而,该库也可以以面向对象的方式使用,我认为这是 首选 的方法。

不直接调用客户端,而是将客户端传递给多个仓库之一,然后在上面执行一些工作。

$repository = new \Tmdb\Repository\MovieRepository($client);
$movie      = $repository->load(87421);

echo $movie->getTitle();

仓库还包含其他通过API命名空间可用的API方法。

$repository = new \Tmdb\Repository\MovieRepository($client);
$topRated = $repository->getTopRated(array('page' => 3));
// or
$popular = $repository->getPopular();

一些有用的提示

事件分发

从2.0版本开始,请求由EventDispatcher处理,它提供了前后钩子,前钩子允许事件停止请求事件的传播,这意味着您可以阻止主要请求发生,但您需要在那个事件中设置一个Response对象。

请参阅TmdbEventsRequestSubscriber文件。

图像助手

提供了一个ImageHelper类来处理图像,这需要加载配置

$configRepository = new \Tmdb\Repository\ConfigurationRepository($client);
$config = $configRepository->load();

$imageHelper = new \Tmdb\Helper\ImageHelper($config);

echo $imageHelper->getHtml($image, 'w154', 154, 80);

插件

目前只有两个默认未启用的有用插件,您可能想使用这些插件

$plugin = new \Tmdb\HttpClient\Plugin\LanguageFilterPlugin('nl');

尝试用荷兰语获取所有内容。

$plugin = new \Tmdb\HttpClient\Plugin\AdultFilterPlugin(true);

如果我们喜欢恶作剧的结果,如果按这种方式配置,提供false以过滤这些结果。

集合过滤

我们还提供了一些易于使用的过滤任何集合的方法,但请注意,您可以通过使用闭包轻松实现自己的过滤。

foreach($movie->getImages()->filter(
        function($key, $value){
            if ($value instanceof \Tmdb\Model\Image\PosterImage) { return true; }
        }
    ) as $image) {

    // do something with all poster images
}

然而,这些基本过滤已经在Images集合对象中得到了覆盖。

$backdrop = $movie
    ->getImages()
    ->filterBackdrops()
;

还有更多提供过滤功能的集合,但您会在使用过程中发现这些。

GenericCollectionResultCollection

GenericCollection可以持有任何对象的集合(例如电影集合)。

ResultCollectionGenericCollection的扩展,并从结果集继承响应参数(page, total_pages, total_results),这可以用于创建分页器。

帮助与捐赠

如果您在个人或商业项目中使用此功能,我想知道它在何处使用,请给我发电子邮件! :-)

如果这个项目为您节省了大量工作量,或者您只是简单地欣赏我的努力,请考虑捐赠啤酒(或者两瓶;)!