Essence — это простая библиотека PHP для извлечения мультимедийной информации с веб-сайтов, например видео на YouTube, статусов в Твиттере или статей в блогах.
Если вы уже использовали 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 ;
Обратите внимание, что Essence всегда будет пытаться заполнить свойство html
, когда оно недоступно.
Класс 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 принимают параметры maxwidth
и maxheight
, как указано в спецификации OEmbed.
$ 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
]
]);
Конфигурацию по умолчанию вы найдете в стандартном DI-контейнере Essence (см. следующую часть).
Почти все в 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 ();
})
]);
Параметры внедрения по умолчанию определены в классе контейнера Standard.
После установки сущности попробуйте запустить ./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. Это позволяет безболезненно создавать настраиваемые коды для встраивания:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}