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 '
]);
}