Essence é uma biblioteca PHP simples para extrair informações de mídia de sites, como vídeos do YouTube, status do Twitter ou artigos de blogs.
Se você já estava usando o Essence 2.xx, dê uma olhada no guia de migração.
composer require essence/essence
Essence foi projetado para ser realmente fácil de usar. Usando a classe principal da biblioteca, você pode recuperar informações apenas nessas poucas linhas:
$ Essence = new Essence Essence ();
$ Media = $ Essence -> extract ( ' http://www.youtube.com/watch?v=39e3KYAmXK4 ' );
if ( $ Media ) {
// That's all, you're good to go !
}
Então, faça o que quiser com os dados:
<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>
Usando o Essence, você interagirá principalmente com objetos de mídia. A mídia é um contêiner simples para todas as informações obtidas de uma URL.
Aqui estão as propriedades padrão que ele fornece:
Essas propriedades foram coletadas das especificações OEmbed e OpenGraph e mescladas em uma interface unida. Com base em tais padrões, estas propriedades devem ser um ponto de partida sólido.
No entanto, propriedades "não padronizadas" também podem e serão definidas.
Aqui está como você pode manipular as propriedades da mídia:
// through dedicated methods
if (! $ Media -> has ( ' foo ' )) {
$ Media -> set ( ' foo ' , ' bar ' );
}
$ value = $ Media -> get ( ' foo ' );
// or directly like a class attribute
$ Media -> customValue = 12 ;
Observe que o Essence sempre tentará preencher a propriedade html
quando ela não estiver disponível.
A classe Essence fornece algumas funções utilitárias úteis para garantir que você obtenha algumas informações.
Os métodos crawl()
e crawlUrl()
permitem rastrear URLs extraíveis de uma página da web, diretamente de sua fonte ou de sua URL (nesse caso, o Essence se encarregará de buscar a fonte).
Por exemplo, aqui está como você pode obter o URL de todos os vídeos em uma postagem de blog:
$ 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'
}
Você pode então obter informações de todos os URLs extraídos:
$ 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) {}
}
O Essence pode substituir qualquer URL extraível em um texto por informações sobre ele. Por padrão, qualquer URL será substituída pela propriedade html
da mídia encontrada.
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 >
Mas você pode fazer mais passando um retorno de chamada para controlar quais informações substituirão a 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 >
Isso facilita a construção de modelos ricos ou até mesmo a integração de um mecanismo de modelagem:
echo $ Essence -> replace ( $ text , function ( $ Media ) use ( $ TwigTemplate ) {
return $ TwigTemplate -> render ( $ Media -> properties ());
});
É possível repassar algumas opções aos provedores.
Por exemplo, os provedores OEmbed aceitam os parâmetros maxwidth
e maxheight
, conforme especificado na especificação OEmbed.
$ options = [
' maxwidth ' => 800 ,
' maxheight ' => 600
];
$ Media = $ Essence -> extract ( $ url , $ options );
$ medias = $ Essence -> extractAll ( $ urls , $ options );
$ text = $ Essence -> replace ( $ text , null , $ options );
Outros provedores simplesmente ignorarão as opções com as quais não atendem.
A Essence apoia atualmente 68 fornecedores especializados:
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
Além dos provedores OEmbed
e OpenGraph
, que podem ser usados para extrair qualquer URL.
Você pode configurar estes provedores na instanciação:
$ 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 '
]
]);
Você também pode desativar os padrões:
$ Essence = new Essence Essence ([
' filters ' => [
' SoundCloud ' => false
]
]);
Você encontrará a configuração padrão no contêiner DI padrão do Essence (veja a parte a seguir).
Quase tudo no Essence pode ser configurado por meio de injeção de dependência. Nos bastidores, o construtor usa um contêiner de injeção de dependência para retornar uma instância totalmente configurada do Essence.
Para personalizar o comportamento do Essence, a maneira mais fácil é definir as configurações de injeção ao construir o 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 ();
})
]);
As configurações de injeção padrão são definidas na classe de contêiner Padrão.
Depois de instalar o Essence, você deve tentar executar ./cli/essence.php
em um terminal. Este script permite que você teste o Essence rapidamente:
# 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
Se você estiver interessado em incorporar vídeos, dê uma olhada na biblioteca Multiplayer. Ele permite que você crie códigos incorporados personalizáveis sem problemas:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}