Essence es una biblioteca PHP sencilla para extraer información multimedia de sitios web, como vídeos de YouTube, estados de Twitter o artículos de blogs.
Si ya estabas usando Essence 2.xx, deberías echar un vistazo a la guía de migración.
composer require essence/essence
Essence está diseñado para ser realmente fácil de usar. Usando la clase principal de la biblioteca, puedes recuperar información en solo esas pocas líneas:
$ Essence = new Essence Essence ();
$ Media = $ Essence -> extract ( ' http://www.youtube.com/watch?v=39e3KYAmXK4 ' );
if ( $ Media ) {
// That's all, you're good to go !
}
Luego, haz lo que quieras con los datos:
<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>
Al utilizar Essence, interactuará principalmente con objetos multimedia. Media es un contenedor simple para toda la información que se obtiene de una URL.
Estas son las propiedades predeterminadas que proporciona:
Estas propiedades se obtuvieron de las especificaciones OEmbed y OpenGraph y se fusionaron en una interfaz unida. Según dichos estándares, estas propiedades deberían ser un punto de partida sólido.
Sin embargo, también se pueden establecer y se establecerán propiedades "no estándar".
Así es como puedes manipular las propiedades de los medios:
// through dedicated methods
if (! $ Media -> has ( ' foo ' )) {
$ Media -> set ( ' foo ' , ' bar ' );
}
$ value = $ Media -> get ( ' foo ' );
// or directly like a class attribute
$ Media -> customValue = 12 ;
Tenga en cuenta que Essence siempre intentará completar la propiedad html
cuando no esté disponible.
La clase Essence proporciona algunas funciones de utilidad útiles para garantizar que obtenga cierta información.
Los métodos crawl()
y crawlUrl()
le permiten rastrear URL extraíbles de una página web, ya sea directamente desde su fuente o desde su URL (en cuyo caso Essence se encargará de buscar la fuente).
Por ejemplo, así es como puedes obtener la URL de todos los vídeos en una publicación 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'
}
Luego puede obtener información de todas las URL extraídas:
$ 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 puede reemplazar cualquier URL extraíble en un texto por información sobre ella. De forma predeterminada, cualquier URL será reemplazada por la propiedad html
del medio encontrado.
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 >
Pero puedes hacer más pasando una devolución de llamada para controlar qué información reemplazará la 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 >
Esto facilita la creación de plantillas enriquecidas o incluso la integración de un motor de plantillas:
echo $ Essence -> replace ( $ text , function ( $ Media ) use ( $ TwigTemplate ) {
return $ TwigTemplate -> render ( $ Media -> properties ());
});
Es posible pasar algunas opciones a los proveedores.
Por ejemplo, los proveedores de OEmbed aceptan los parámetros maxwidth
y maxheight
, como se especifica en la especificación de OEmbed.
$ options = [
' maxwidth ' => 800 ,
' maxheight ' => 600
];
$ Media = $ Essence -> extract ( $ url , $ options );
$ medias = $ Essence -> extractAll ( $ urls , $ options );
$ text = $ Essence -> replace ( $ text , null , $ options );
Otros proveedores simplemente ignorarán las opciones que no manejan.
Essence actualmente admite 68 proveedores 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
Además de los proveedores OEmbed
y OpenGraph
, que se pueden utilizar para extraer cualquier URL.
Puede configurar estos proveedores en la instanciación:
$ 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 '
]
]);
También puedes desactivar los predeterminados:
$ Essence = new Essence Essence ([
' filters ' => [
' SoundCloud ' => false
]
]);
Encontrará la configuración predeterminada en el contenedor DI estándar de Essence (consulte la siguiente parte).
Casi todo en Essence se puede configurar mediante inyección de dependencia. Debajo del capó, el constructor utiliza un contenedor de inyección de dependencias para devolver una instancia de Essence completamente configurada.
Para personalizar el comportamiento de Essence, la forma más sencilla es configurar los ajustes de inyección al crear 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 ();
})
]);
La configuración de inyección predeterminada se define en la clase de contenedor Estándar.
Una vez que hayas instalado essence, deberías intentar ejecutar ./cli/essence.php
en una terminal. Este script le permite probar Essence rápidamente:
# 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
Si está interesado en incrustar vídeos, debería echar un vistazo a la biblioteca multijugador. Le permite crear códigos de inserción personalizables sin problemas:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}