ayacoo / video-validator
在TYPO3中检查在线视频是否可用
Requires
- php: >=8.1
- typo3/cms-core: ^12.4
Replaces
- typo3-ter/video-validator: 3.0.1
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
中的相同referencedOnly
和referenceRoot
选项可用。
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功能。
还要感谢所有测试和改进此扩展的人。