ayacoo/video-validator

在TYPO3中检查在线视频是否可用

安装次数: 5,877

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 1

开放问题: 1

类型:typo3-cms-extension

3.0.1 2023-04-27 21:45 UTC

This package is auto-updated.

Last update: 2024-09-28 12:38:11 UTC


README

1 功能

  • 检查您的YouTube或Vimeo视频是否在TYPO3项目中仍然可用
  • 可以通过电子邮件发送报告
  • 可以使用自定义报告服务
  • 还可以通过灵活的可扩展性检查更多媒体扩展

2 使用方法

2.1 安装

使用Composer安装

推荐使用Composer安装此扩展。

在您的基于Composer的TYPO3项目中运行以下命令

composer require ayacoo/video-validator

不要忘记在扩展管理器中激活扩展,并且更新数据库一次,以便添加两个新字段。

2.2 设置任务/任务如何协同工作?(TYPO3集成器内容)

可以通过CLI(见开发者角落)或直接在计划任务中设置任务。

在计划任务中,我们创建一个名为“执行控制台命令”的新任务。首先应该设置可计划命令“videoValidator:validate”。此命令会定期检查YouTube和Vimeo视频,并将状态和抓取时间的信息存储在数据集中。

TODO 截图

之后,我们在相同的方案中创建一个名为“videoValidator:report”的任务。注意这里的设置,并定义至少一个收件人。

TODO 截图

3 常见问题解答

3.1 它是如何工作的

EXT:video_validator从sys_file表中获取所有与该媒体扩展(例如YouTube)链接的文件,考虑了验证日期。

如果视频列表已处理完毕,则默认情况下7天后再次检查视频。可以为相应任务覆盖这些设置。

使用提供商的oEmbed API,您可以读取视频的状态而不需要API密钥。私有视频标记为错误,但无论如何都不能在TYPO3中保存。注意私有视频和未列出视频之间的区别!

3.2 支持的媒体扩展

  • YouTube
  • Vimeo
  • 自定义媒体扩展,见开发者文档

3.3 如果视频不可访问怎么办?

有时可能会发生视频不再可访问的情况。这些视频在报告邮件中列为无效视频。在文件列表中,TYPO3在文件旁边显示一个编号。如果您点击它,将列出所有对此文件的引用。现在您可以处理相应的更正。

4 管理员角落

4.1 版本和支持

提示:版本1用户应升级到版本2

4.2 版本管理

video_validator使用语义版本控制,这意味着

  • 错误修复更新(例如1.0.0 => 1.0.1)仅包括小的错误修复或安全相关内容,没有破坏性更改,
  • 次要更新(例如1.0.0 => 1.1.0)包括新功能和较小的任务,没有破坏性更改,
  • 以及 主要更新(例如1.0.0 => 2.0.0)破坏性更改,这些更改可以是重构、功能或错误修复。

5 开发者角落(TYPO3开发者内容)

5.1 CLI调用

可以直接通过CLI获取调用,或者您可以在计划任务中设置相应的作业。计划任务的优势:TYPO3在邮件中正确显示:https://forge.typo3.org/issues/93940

不清楚oEmbed API允许的最大连续快速访问次数。因此,最好考虑较小的限制。

videoValidator:validate

验证定义的媒体扩展的数量

vendor/bin/typo3 videoValidator:validate --extension --limit --referencedOnly=0(default)|1 --referenceRoot=0(default)

示例

vendor/bin/typo3 videoValidator:validate --extension=Vimeo --limit=10

示例:仅获取在可见的非删除页面及其可见的非删除引用中引用的视频

vendor/bin/typo3 videoValidator:validate --extension=Vimeo --limit=10 --referencedOnly=1

您可以使用--referenceRoot选项来指定一个PageRoot UID,在其中搜索引用。0为默认值,表示所有可用的根。

请注意使用正确的首字母大写/小写的媒体扩展名称(使用YouTube而不是YouTube),这些名称由Validator实例的名称定义。

videoValidator:report

创建过去7天内YouTube视频的电子邮件报告

vendor/bin/typo3 videoValidator:report --days --recipients --extension --referencedOnly=0(default)|1 --referenceRoot=0(default)

示例

vendor/bin/typo3 videoValidator:report --days=7 --recipients=receiver@example.com,receiver2@example.com --extension=YouTube

videoValidator:validate中的相同referencedOnlyreferenceRoot选项可用。

videoValidator:reset

重置媒体扩展的所有视频状态。

vendor/bin/typo3 videoValidator:reset --extension

示例

vendor/bin/typo3 videoValidator:reset --extension=YouTube

videoValidator:count

计算媒体扩展的所有视频。这将帮助您决定可以使用的限制。

vendor/bin/typo3 videoValidator:count --extension

示例

vendor/bin/typo3 videoValidator:count --extension=YouTube

5.2 注册自定义验证器

EXT:video_validator设计得可以检查其他媒体扩展。为此,媒体扩展必须在$GLOBALS['TYPO3_CONF_VARS']['SYS']['fal']['onlineMediaHelpers']中注册,并且您必须通过事件注册一个验证器。

例如,您可以使用EXT:tiktok

事件监听器注册

services:
  Ayacoo\Tiktok\Listener\ValidatorListener:
    tags:
      - name: event.listener
        identifier: 'tiktok/validator'
        method: 'setValidator'
        event: Ayacoo\VideoValidator\Event\ModifyValidatorEvent

事件监听器

<?php
declare(strict_types=1);

namespace Ayacoo\Tiktok\Listener;

use Ayacoo\Tiktok\Crawler\TiktokValidator;
use Ayacoo\VideoValidator\Event\ModifyValidatorEvent;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class ValidatorListener
{
    public function setValidator(ModifyValidatorEvent $event): ModifyValidatorEvent
    {
        $extension = strtolower($event->getExtension());
        if ($extension === 'tiktok') {
            $validator = GeneralUtility::makeInstance(TiktokValidator::class, $extension);
            $event->setValidator($validator);
        }
        return $event;
    }
}

自定义验证器

<?php

declare(strict_types=1);

namespace Ayacoo\Tiktok\Crawler;

use Ayacoo\Tiktok\Helper\TiktokHelper;
use Ayacoo\VideoValidator\Service\Validator\AbstractVideoValidator;
use Ayacoo\VideoValidator\Service\Validator\AbstractVideoValidatorInterface;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class TiktokValidator extends AbstractVideoValidator implements AbstractVideoValidatorInterface
{
    private TiktokHelper $tiktokHelper;

    private string $username;

    public function __construct(string $extension)
    {
        $this->tiktokHelper = GeneralUtility::makeInstance(TiktokHelper::class, $extension);
    }

    public function getOEmbedUrl(string $mediaId, string $format = 'json'): string
    {
        return sprintf(
            'https://www.tiktok.com/oembed?url=https://www.tiktok.com/video/%s',
            rawurlencode($mediaId)
        );
    }

    public function getOnlineMediaId(File $file): string
    {
        $this->username = $file->getProperty('tiktok_username') ?? '';
        return $this->tiktokHelper->getOnlineMediaId($file);
    }

    public function buildUrl(string $mediaId): string
    {
        return 'https://www.tiktok.com/@' . $this->username . '/' . $mediaId;
    }
}

使用自定义验证器时,您必须注意接口,以便检查结构正确。

5.3 注册自定义报告

还有注册自己的报告服务的机会。例如,您可以导出视频列表到XML或CSV文件。或者可能发送Slack消息?

事件监听器注册

services:
  Extension\Namespace\Listener\ReportServiceListener:
    tags:
      - name: event.listener
        identifier: 'extensionkey/reportservices'
        method: 'setReportServices'
        event: Ayacoo\VideoValidator\Event\ModifyReportServiceEvent

事件监听器

<?php
declare(strict_types=1);

namespace Extension\Namespace\Listener;

use Ayacoo\VideoValidator\Event\ModifyReportServiceEvent;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class ReportServiceListener
{
    public function setReportServices(ModifyReportServiceEvent $event): ModifyReportServiceEvent
    {
        $yourReportService = GeneralUtility::makeInstance(XmlReportService::class);
        $reportServices = $event->getReportServices() ?? [];
        $reportServices['XmlReportService'] = $yourReportService;
        $event->setReportServices($reportServices);

        return $event;
    }
}

自定义报告

<?php

declare(strict_types=1);

namespace Extension\Namespace\Report;

use Ayacoo\VideoValidator\Service\Report\AbstractReportServiceInterface;

class YourReportService implements AbstractReportServiceInterface
{
    protected array $settings = [];

    protected array $validVideos = [];

    protected array $invalidVideos = [];

    public function makeReport(): void
    {
        // Do your custom stuff e.g. CSV or XML export
        $mediaExtension = $this->getSettings()['extension'];
        $xmlDocument = new SimpleXMLElement('<?xml version="1.0"?><videos/>');
        foreach ($this->getValidVideos() as $validVideo) {
            $videoTag = $xmlDocument->addChild('video');
            $videoTag->addChild('title', $validVideo->getProperty('title'));
            $videoTag->addChild('url', $validVideo->getPublicUrl());
        }

        GeneralUtility::writeFile($mediaExtension . '_validVideos.xml', $xmlDocument->asXML());
    }

    // Have a look for the necessary functions
    // The ReportCommand gives you the video array

    public function getSettings(): array
    {
        return $this->settings;
    }

    public function setSettings(array $settings): void
    {
        $this->settings = $settings;
    }

    public function getValidVideos(): array
    {
        return $this->validVideos;
    }

    public function setValidVideos(array $validVideos): void
    {
        $this->validVideos = $validVideos;
    }

    public function getInvalidVideos(): array
    {
        return $this->invalidVideos;
    }

    public function setInvalidVideos(array $invalidVideos): void
    {
        $this->invalidVideos = $invalidVideos;
    }
}

5.4 邮件设置

要定义电子邮件的发送者,使用安装工具中的配置$GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']

因为TYPO3使用了FluidEmail,所以当然也可以轻松覆盖状态电子邮件的模板。

6 支持

如果您对扩展满意并想以任何方式支持它,我将非常欣赏社会机构的支持。

7 感谢 / 声明

特别感谢Georg Ringer及其news扩展。这是一个构建TYPO3扩展的好模板。例如,这里使用了README.md的结构。

感谢Garvin Hicking添加了ReferencedOnly/ReferenceRoot功能。

还要感谢所有测试和改进此扩展的人。