rexlmanu/laravel-cache-tmdb

在您的Laravel应用程序中与TMDB数据进行交互。

dev-main 2023-07-09 20:51 UTC

This package is not auto-updated.

Last update: 2024-09-17 00:11:24 UTC


README

请勿使用此包,而应使用官方包。

Laravel TMDB

Latest Version MIT License Offset Earth Larabelles

GitHub Workflow Status GitHub Workflow Status Total Downloads

安装

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中调用此方法,但您可以在代码的任何地方调用这些方法。

use Astrotomic\Tmdb\Facades\Tmdb;

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

用法

模型

使用提供的模型是使用该包的最简单、功能最完整的方法。它们带有自定义查询构建器,如果请求的模型未在您的本地数据库中找到,则会进行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,则将调用strong每一页。这可能会导致成千上万次的请求——因此,建议提供一个合理的数字。

use Astrotomic\Tmdb\Models\Movie;

Movie::popular(20);
Movie::upcoming(20);
Movie::toprated(20);
Movie::trending(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,然后按需使用。

请求

模型使用面向对象的请求类,您也可以使用自己的。这些不是主要的API使用,但在需要时,您可以使用。

use Astrotomic\Tmdb\Requests\Movie\Details;

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

更新日志

请参阅变更日志获取更多信息,了解最近有哪些变化。

贡献

请参阅贡献指南了解详细信息。您可能还对行为准则感兴趣。

安全

如果您发现任何与安全相关的问题,请查阅安全指南了解报告步骤。

致谢

许可证

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

Treeware

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

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

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

有关Treeware的更多信息,请访问treeware.earth