Essence est une simple bibliothèque PHP permettant d'extraire des informations multimédias à partir de sites Web, comme des vidéos YouTube, des statuts Twitter ou des articles de blog.
Si vous utilisiez déjà Essence 2.xx, vous devriez consulter le guide de migration.
composer require essence/essence
Essence est conçu pour être vraiment facile à utiliser. En utilisant la classe principale de la bibliothèque, vous pouvez récupérer des informations dans ces quelques lignes seulement :
$ Essence = new Essence Essence ();
$ Media = $ Essence -> extract ( ' http://www.youtube.com/watch?v=39e3KYAmXK4 ' );
if ( $ Media ) {
// That's all, you're good to go !
}
Ensuite, faites ce que vous voulez avec les données :
<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>
En utilisant Essence, vous interagirez principalement avec des objets Media. Le média est un simple conteneur pour toutes les informations extraites d'une URL.
Voici les propriétés par défaut qu'il fournit :
Ces propriétés ont été rassemblées à partir des spécifications OEmbed et OpenGraph et fusionnées dans une interface unie. Sur la base de ces normes, ces propriétés devraient constituer un point de départ solide.
Cependant, des propriétés « non standard » peuvent et seront également définies.
Voici comment manipuler les propriétés du 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 ;
Notez qu'Essence essaiera toujours de remplir la propriété html
lorsqu'elle n'est pas disponible.
La classe Essence fournit des fonctions utilitaires utiles pour garantir que vous obtiendrez certaines informations.
Les méthodes crawl()
et crawlUrl()
vous permettent d'explorer les URL extractibles d'une page Web, soit directement depuis sa source, soit depuis son URL (auquel cas Essence se chargera de récupérer la source).
Par exemple, voici comment obtenir l’URL de toutes les vidéos d’un article 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'
}
Vous pouvez ensuite obtenir des informations sur toutes les URL extraites :
$ 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 peut remplacer n'importe quelle URL extractible dans un texte par des informations la concernant. Par défaut, toute URL sera remplacée par la propriété html
du média trouvé.
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 >
Mais vous pouvez faire plus en passant un rappel pour contrôler quelles informations remplaceront l'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 >
Cela facilite la création de modèles riches ou même l'intégration d'un moteur de modèles :
echo $ Essence -> replace ( $ text , function ( $ Media ) use ( $ TwigTemplate ) {
return $ TwigTemplate -> render ( $ Media -> properties ());
});
Il est possible de transmettre certaines options aux fournisseurs.
Par exemple, les fournisseurs OEmbed acceptent les paramètres maxwidth
et maxheight
, comme spécifié dans la spécification OEmbed.
$ options = [
' maxwidth ' => 800 ,
' maxheight ' => 600
];
$ Media = $ Essence -> extract ( $ url , $ options );
$ medias = $ Essence -> extractAll ( $ urls , $ options );
$ text = $ Essence -> replace ( $ text , null , $ options );
Les autres fournisseurs ignoreront simplement les options qu'ils ne gèrent pas.
Essence accompagne actuellement 68 prestataires spécialisés :
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
Plus les fournisseurs OEmbed
et OpenGraph
, qui peuvent être utilisés pour extraire n'importe quelle URL.
Vous pouvez configurer ces fournisseurs sur instanciation :
$ 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 '
]
]);
Vous pouvez également désactiver ceux par défaut :
$ Essence = new Essence Essence ([
' filters ' => [
' SoundCloud ' => false
]
]);
Vous trouverez la configuration par défaut dans le conteneur DI standard d'Essence (voir la partie suivante).
Presque tout dans Essence peut être configuré via l’injection de dépendances. Sous les capots, le constructeur utilise un conteneur d'injection de dépendances pour renvoyer une instance d'Essence entièrement configurée.
Pour personnaliser le comportement d'Essence, le moyen le plus simple consiste à configurer les paramètres d'injection lors de la création d'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 ();
})
]);
Les paramètres d'injection par défaut sont définis dans la classe de conteneur Standard.
Une fois que vous avez installé Essence, vous devriez essayer d'exécuter ./cli/essence.php
dans un terminal. Ce script vous permet de tester Essence rapidement :
# 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 vous souhaitez intégrer des vidéos, vous devriez jeter un œil à la bibliothèque Multiplayer. Il vous permet de créer facilement des codes d'intégration personnalisables :
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}