ride / lib-media
Ride框架中媒体服务抽象库
1.0.4
2019-10-04 09:38 UTC
Requires
- ride/lib-http-client: ^1.0.0
- ride/lib-validation: ^1.0.0
README
此库增加了对自定义媒体项目的支持,例如YouTube视频、Soundcloud音乐或纯URL。
MediaItem类位于item/
目录中,它们的工厂在factory
目录中。
此库包含的内容
MediaItemFactory
MediaItemFactory类是所有媒体项目工厂的接口。此工厂有两个职责:
- 检查给定URL是否适用于关联的MediaItem类
- 实例化新的MediaItem类
AbstractMediaItemFactory
为createFormUrl
、createFromId
和setClientId
方法提供了默认实现。其构造函数需要一个ride\library\http\client\Client
实例。
应在子类中实现isValidUrl
方法,并包含用于确定URL是否可解析的逻辑。
MediaItem
MediaItem类是所有媒体项目的接口。有一个名为AbstractMediaItem
的抽象实现,所有类都可以从中扩展。每个MediaItem类应实现以下方法至少一个:
abstract protected function parseUrl($url); abstract protected function loadProperties();
parseUrl
方法将接受一个给定的URL,并对其进行解析以适用于此特定的MediaItem实现。可以假设这个URL是可解析的,因为已经通过MediaItemFactory进行了检查。
每个媒体项都需要一个工厂,以便MediaFactory能够使用它。
MediaFactory
MediaFactory接口将所有MediaItemFactory实例粘合在一起,形成一个易于使用的门面。它将使用特定的媒体项工厂来测试给定的URL是否可以解析。
通过SimpleMediaFactory类提供了一个通用实现。
代码示例
您可以通过以下代码示例查看此库的一些可能性
use ride\library\media\factory\UrlMediaItemFactory; use ride\library\media\factory\VimeoMediaItemFactory; use ride\library\media\factory\YoutubeMediaItemFactory; use ride\library\media\MediaFactory; use ride\library\media\SimpleMediaFactory; use ride\library\http\client\Client; function createMediaFactory(Client $httpClient) { $youtubeMediaItemFactory = new YoutubeMediaItemFactory($httpClient); $youtubeMediaItemFactory->setClientId('client-id'); $vimeoMediaItemFactory = new VimeoMediaItemFactory($httpClient); $urlMediaItemFactory = new UrlMediaItemFactory($httpClient); $mediaFactory = new SimpleMediaFactory($httpClient); $mediaFactory->setMediaItemFactory($youtubeMediaItemFactory); $mediaFactory->setMediaItemFactory($vimeoMediaItemFactory); $mediaFactory->setDefaultMediaItemFactory($urlMediaItemFactory); return $mediaFactory; } function useMediaFactory(MediaFactory $mediaFactory) { // create a MediaItem using a URL $youtubeMediaItem = $simpleMediaFactory->createMediaItem('https://www.youtube.com/watch?v=njos57IJf-0'); $type = $youtubeMediaItem->getType(); // youtube $id = $youtubeMediaItem->getId(); // njos57IJf-0 $title = $youtubeMediaItem->getTitle(); $description = $youtubeMediaItem->getDescription(); // if you know the type and id, you can fetch it like this $youtubeMediaItem = $simpleMediaFactory->getMediaItem($type, $id); }
相关模块
安装
您可以使用Composer安装此库。
composer require ride/lib-media