astrotomic/laravel-tmdb

在您的 Laravel 应用程序中交互使用 TMDB 数据。

dev-main 2024-07-17 09:11 UTC

README

Laravel TMDB

Latest Version MIT License Offset Earth Larabelles

GitHub Workflow Status GitHub Workflow Status

Total Downloads Trees Carbon

安装

composer require astrotomic/laravel-tmdb
php artisan vendor:publish --tag=tmdb-migrations

配置

将您的 TMDB API v4 Token 添加到 config/services.php 文件。

config/services.php

return [
    // ...
    
    'tmdb' => [
        'token' => env('TMDB_TOKEN'),
    ],

    // ...
];

之后,您可以配置要由包使用的语言和区域,用于一些 API 请求。默认情况下,我们使用 app()->getLocale() 作为语言,并使用硬编码的 US 区域。建议在 AppServiceProvider 中调用此方法,但您可以在代码的任何地方调用这些方法。如果您想运行一个特定的回调并使用区域或语言而不更改全局使用的那些,可以使用 with 方法。这些方法将区域或语言设置为给定的一个,在运行回调后自动恢复旧的设置。

use Astrotomic\Tmdb\Facades\Tmdb;

Tmdb::useLanguage('de');
Tmdb::useRegion('DE');

Tmdb::withLanguage('de', fn() => \Astrotomic\Tmdb\Models\Movie::find(335983));
Tmdb::withRegion('DE', fn() => \Astrotomic\Tmdb\Models\Movie::upcoming(20));

用法

模型

使用包的最简单和功能最全面的方式是提供的模型。它们带有自定义查询构建器,如果请求的模型在本地数据库中找不到,则会进行 API 调用。这仅适用于 find() 和有时是 all() 方法。因此,如果您只想查询数据库,可以通过例如使用 whereKey()->first() 来实现。

use Astrotomic\Tmdb\Models\Movie;

Movie::find(335983);
Movie::findMany([335983, 575788]);
Movie::findOrFail(335983);

建议准备两个“静态”模型来保存未来的调用,方法是调用它们的 all() 方法一次。这将针对每个模型进行一次 HTTP 调用,并在将来节省多个 HTTP 调用。

use Astrotomic\Tmdb\Models\MovieGenre;
use Astrotomic\Tmdb\Models\TvGenre;
use Astrotomic\Tmdb\Models\WatchProvider;

MovieGenre::all();
TvGenre::all();
WatchProvider::all();

大多数模型使用 spatie/laravel-translatable 并对 translate() 方法进行了轻微的自定义。如果您请求它,这将自动加载缺失的翻译。

use Astrotomic\Tmdb\Models\Movie;

app()->setLocale('en');
$movie = Movie::find(335983);
$movie->translate('title', 'en'); // get title from DB
$movie->translate('title', 'de'); // get and persist title from API

如果您想更新数据库中的数据,可以在任何模型上调用 updateFromTmdb() 方法。这应该通过控制台命令或队列作业完成,因为它将执行大量的 HTTP 请求,每部电影可能需要几分钟。

use Astrotomic\Tmdb\Models\Movie;

Movie::eachById(static function(Movie $movie): void {
    $movie->updateFromTmdb('de', ['credits']);
});

电影

首先,您还可以使用额外的关系来 find() 电影,并且它们也将从 API 中查询。为此,您只需在调用任何 find() 方法之前在查询上调用 with() 方法。

use Astrotomic\Tmdb\Models\Movie;

Movie::with('genres')->find(335983);
Movie::with('credits')->find(335983);
Movie::with('cast')->find(335983);
Movie::with('crew')->find(335983);

有一些方法会在每次都进行 HTTP 调用。如果它们接受一个 $limit 参数,它们将自动调用每一页,直到找到指定数量的 ID。您必须提供一个明确的参数;如果使用 null,则将调用 每一 页。这可能会导致数千次请求 - 因此更推荐提供一个合理的数字。

use Astrotomic\Tmdb\Models\Movie;

Movie::popular(20);
Movie::upcoming(20);
Movie::toprated(20);
Movie::trending(20);
Movie::nowPlaying(20);

Movie::findOrFail(335983)->recommendations(20);
Movie::findOrFail(335983)->similars(20);

您还可以获取给定电影的全部观看提供商(由 JustWatch 提供),这些可以过滤/限制到特定的区域和/或类型。

use Astrotomic\Tmdb\Models\Movie;
use Astrotomic\Tmdb\Enums\WatchProviderType;

Movie::findOrFail(335983)->watchProviders();
Movie::findOrFail(335983)->watchProviders('DE');
Movie::findOrFail(335983)->watchProviders(null, WatchProviderType::FLATRATE);
Movie::findOrFail(335983)->watchProviders('DE', WatchProviderType::FLATRATE);

电影模型还有一些辅助方法,可以更容易地处理某些属性。

use Astrotomic\Tmdb\Models\Movie;

Movie::findOrFail(335983)->runtime();
Movie::findOrFail(335983)->poster();
Movie::findOrFail(335983)->backdrop();

人物

人物模型与电影和通用方法 API 使用相同的基模型。

use Astrotomic\Tmdb\Models\Person;

Person::with('movie_credits')->find(6384);
Person::trending(20);
Person::findOrFail(6384)->profile();

图片

有一些辅助类可以帮助您生成具有正确宽高比的图像URL。具有图像路径属性的模型有一个快捷方法,该方法返回该图像类的实例。

use Astrotomic\Tmdb\Models\Movie;

Movie::find(335983)->poster();
Movie::find(335983)->backdrop();

如果您在Blade模板中输出这些图像辅助类,它们将渲染一个<img/>标签。如果将它们转换为字符串,它们将返回图像URL或备用URL。您还可以调用url()fallback()来获取一个或另一个URL,并按需使用。

请求

模型使用OOP请求类,您也可以使用自己的。这些不是主要使用的API,但如果有需要,您可以自由使用。

use Astrotomic\Tmdb\Requests\Movie\Details;

Details::request(335983)->send()->json();

变更日志

请参阅CHANGELOG获取最近更改的更多信息。

贡献

请参阅CONTRIBUTING获取详细信息。您可能还对行为准则感兴趣。

安全

如果您发现任何安全相关的问题,请查阅SECURITY以获取报告步骤。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。

Treeware

您可以自由使用此包,但如果它进入您的生产环境,我将非常感激您为世界买一棵树。

现在众所周知,应对气候危机并防止气温上升超过1.5C的最佳工具之一是种植树木。如果您为我的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。

您可以在ecologi.com/astrotomic购买树木。

有关Treeware的更多信息,请参阅treeware.earth