Essence 是一个简单的 PHP 库,用于从网站中提取媒体信息,例如 YouTube 视频、Twitter 状态或博客文章。
如果您已经在使用 Essence 2.xx,则应该查看迁移指南。
composer require essence/essence
Essence 的设计非常易于使用。使用库的主类,您只需几行即可检索信息:
$ Essence = new Essence Essence ();
$ Media = $ Essence -> extract ( ' http://www.youtube.com/watch?v=39e3KYAmXK4 ' );
if ( $ Media ) {
// That's all, you're good to go !
}
然后,对数据做任何你想做的事情:
<article>
<header>
<h1> <?php echo $ Media -> title ; ?> </h1>
<p>By <?php echo $ Media -> authorName ; ?> </p>
</header>
<div class="player">
<?php echo $ Media -> html ; ?>
</div>
</article>
使用 Essence,您将主要与媒体对象进行交互。媒体是从 URL 获取的所有信息的简单容器。
以下是它提供的默认属性:
这些属性是从 OEmbed 和 OpenGraph 规范中收集的,并合并在一个统一的界面中。基于这样的标准,这些属性应该是一个坚实的起点。
然而,“非标准”属性也可以并且将会被设置。
以下是操作媒体属性的方法:
// through dedicated methods
if (! $ Media -> has ( ' foo ' )) {
$ Media -> set ( ' foo ' , ' bar ' );
}
$ value = $ Media -> get ( ' foo ' );
// or directly like a class attribute
$ Media -> customValue = 12 ;
请注意,当html
属性不可用时,Essence 将始终尝试填充该属性。
Essence 类提供了一些有用的实用函数,以确保您获得一些信息。
crawl()
和crawlUrl()
方法允许您从网页中抓取可提取的URL,可以直接从其源,也可以从其URL(在这种情况下,Essence 将负责获取源)。
例如,以下是获取博客文章中所有视频的 URL 的方法:
$ urls = $ Essence -> crawlUrl ( ' http://www.blog.com/article ' );
array(2) {
[0] => 'http://www.youtube.com/watch?v=123456',
[1] => 'http://www.dailymotion.com/video/a1b2c_lolcat-fun'
}
然后您可以从所有提取的 URL 中获取信息:
$ medias = $ Essence -> extractAll ( $ urls );
array(2) {
['http://www.youtube.com/watch?v=123456'] => object(Media) {}
['http://www.dailymotion.com/video/a1b2c_lolcat-fun'] => object(Media) {}
}
Essence 可以用有关文本的信息替换文本中任何可提取的 URL。默认情况下,任何 URL 都将替换为找到的媒体的html
属性。
echo $ Essence -> replace ( ' Look at this: http://www.youtube.com/watch?v=123456 ' );
Look at this: < iframe src =" http://www.youtube.com/embed/123456 " > </ iframe >
但是您可以通过传递回调来控制哪些信息将替换 URL 来执行更多操作:
echo $ Essence -> replace ( $ text , function ( $ Media ) {
return <<<HTML
<p class="title"> $ Media -> title </p>
<div class="player"> $ Media -> html </div>
HTML ;
});
Look at this:
< p class =" title " > Video title </ p >
< div class =" player " >
< iframe src =" http://www.youtube.com/embed/123456 " > </ iframe >
< div >
这使得构建丰富的模板甚至集成模板引擎变得容易:
echo $ Essence -> replace ( $ text , function ( $ Media ) use ( $ TwigTemplate ) {
return $ TwigTemplate -> render ( $ Media -> properties ());
});
可以将一些选项传递给提供者。
例如,OEmbed 提供程序接受 OEmbed 规范中指定的maxwidth
和maxheight
参数。
$ options = [
' maxwidth ' => 800 ,
' maxheight ' => 600
];
$ Media = $ Essence -> extract ( $ url , $ options );
$ medias = $ Essence -> extractAll ( $ urls , $ options );
$ text = $ Essence -> replace ( $ text , null , $ options );
其他提供商只会忽略他们不处理的选项。
Essence 目前支持 68 家专业提供商:
23hq Deviantart Kickstarter Sketchfab
Animoto Dipity Meetup SlideShare
Aol Dotsub Mixcloud SoundCloud
App.net Edocr Mobypicture SpeakerDeck
Bambuser Flickr Nfb Spotify
Bandcamp FunnyOrDie Official.fm Ted
Blip.tv Gist Polldaddy Twitter
Cacoo Gmep PollEverywhere Ustream
CanalPlus HowCast Prezi Vhx
Chirb.it Huffduffer Qik Viddler
CircuitLab Hulu Rdio Videojug
Clikthrough Ifixit Revision3 Vimeo
CollegeHumor Ifttt Roomshare Vine
Coub Imgur Sapo Wistia
CrowdRanking Instagram Screenr WordPress
DailyMile Jest Scribd Yfrog
Dailymotion Justin.tv Shoudio Youtube
加上OEmbed
和OpenGraph
提供程序,可用于提取任何 URL。
您可以在实例化时配置这些提供程序:
$ Essence = new Essence Essence ([
// the SoundCloud provider is an OEmbed provider with a specific endpoint
' SoundCloud ' => Essence Di Container :: unique ( function ( $ C ) {
return $ C -> get ( ' OEmbedProvider ' )-> setEndpoint (
' http://soundcloud.com/oembed?format=json&url=:url '
);
}),
' filters ' => [
// the SoundCloud provider will be used for URLs that matches this pattern
' SoundCloud ' => ' ~soundcloud.com/[a-zA-Z0-9-_]+/[a-zA-Z0-9-]+~i '
]
]);
您还可以禁用默认的:
$ Essence = new Essence Essence ([
' filters ' => [
' SoundCloud ' => false
]
]);
您将在 Essence 的标准 DI 容器中找到默认配置(请参阅以下部分)。
Essence 中的几乎所有内容都可以通过依赖注入进行配置。在底层,构造函数使用依赖项注入容器来返回 Essence 的完全配置实例。
要自定义 Essence 行为,最简单的方法是在构建 Essence 时配置注入设置:
$ Essence = new Essence Essence ([
// the container will return a unique instance of CustomHttpClient
// each time an HTTP client is needed
' Http ' => Essence Di Container :: unique ( function () {
return new CustomHttpClient ();
})
]);
默认注入设置在标准容器类中定义。
安装essence后,您应该尝试在终端中运行./cli/essence.php
。该脚本允许您快速测试 Essence:
# will fetch and print information about the video
./cli/essence.php extract http://www.youtube.com/watch?v=4S_NHY9c8uM
# will fetch and print all extractable URLs found at the given HTML page
./cli/essence.php crawl http://www.youtube.com/watch?v=4S_NHY9c8uM
如果您对嵌入视频感兴趣,您应该看看多人游戏库。它允许您轻松构建可定制的嵌入代码:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}