Essence ist eine einfache PHP-Bibliothek zum Extrahieren von Medieninformationen aus Websites, wie YouTube-Videos, Twitter-Status oder Blog-Artikeln.
Wenn Sie bereits Essence 2.xx im Einsatz haben, sollten Sie einen Blick in den Migrationsleitfaden werfen.
composer require essence/essence
Essence ist so konzipiert, dass es wirklich einfach zu verwenden ist. Mit der Hauptklasse der Bibliothek können Sie Informationen in nur wenigen Zeilen abrufen:
$ Essence = new Essence Essence ();
$ Media = $ Essence -> extract ( ' http://www.youtube.com/watch?v=39e3KYAmXK4 ' );
if ( $ Media ) {
// That's all, you're good to go !
}
Dann machen Sie einfach mit den Daten, was Sie wollen:
<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>
Mit Essence interagieren Sie hauptsächlich mit Medienobjekten. Medien sind ein einfacher Container für alle Informationen, die von einer URL abgerufen werden.
Hier sind die Standardeigenschaften, die es bereitstellt:
Diese Eigenschaften wurden aus den OEmbed- und OpenGraph-Spezifikationen gesammelt und in einer einheitlichen Schnittstelle zusammengeführt. Basierend auf solchen Standards sollten diese Eigenschaften einen soliden Ausgangspunkt darstellen.
Es können und werden aber auch „nicht standardmäßige“ Eigenschaften eingestellt.
So können Sie die Medieneigenschaften bearbeiten:
// through dedicated methods
if (! $ Media -> has ( ' foo ' )) {
$ Media -> set ( ' foo ' , ' bar ' );
}
$ value = $ Media -> get ( ' foo ' );
// or directly like a class attribute
$ Media -> customValue = 12 ;
Beachten Sie, dass Essence immer versucht, die html
Eigenschaft zu füllen, wenn sie nicht verfügbar ist.
Die Essence-Klasse bietet einige nützliche Hilfsfunktionen, um sicherzustellen, dass Sie einige Informationen erhalten.
Mit den Methoden crawl()
und crawlUrl()
können Sie extrahierbare URLs von einer Webseite crawlen, entweder direkt von ihrer Quelle oder von ihrer URL (in diesem Fall kümmert sich Essence um das Abrufen der Quelle).
So können Sie beispielsweise die URL aller Videos in einem Blogbeitrag abrufen:
$ 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'
}
Anschließend können Sie Informationen aus allen extrahierten URLs abrufen:
$ 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 kann jede extrahierbare URL in einem Text durch Informationen darüber ersetzen. Standardmäßig wird jede URL durch die html
Eigenschaft des gefundenen Mediums ersetzt.
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 >
Sie können jedoch noch mehr tun, indem Sie einen Rückruf übergeben, um zu steuern, welche Informationen die URL ersetzen:
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 >
Dies macht es einfach, umfangreiche Vorlagen zu erstellen oder sogar eine Template-Engine zu integrieren:
echo $ Essence -> replace ( $ text , function ( $ Media ) use ( $ TwigTemplate ) {
return $ TwigTemplate -> render ( $ Media -> properties ());
});
Es ist möglich, einige Optionen an die Anbieter weiterzugeben.
Beispielsweise akzeptieren OEmbed-Anbieter die Parameter maxwidth
und maxheight
, wie in der OEmbed-Spezifikation angegeben.
$ options = [
' maxwidth ' => 800 ,
' maxheight ' => 600
];
$ Media = $ Essence -> extract ( $ url , $ options );
$ medias = $ Essence -> extractAll ( $ urls , $ options );
$ text = $ Essence -> replace ( $ text , null , $ options );
Andere Anbieter ignorieren einfach die Optionen, die sie nicht abdecken.
Essence unterstützt derzeit 68 spezialisierte Anbieter:
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 die Anbieter OEmbed
und OpenGraph
, mit denen sich beliebige URLs extrahieren lassen.
Sie können diese Anbieter bei der Instanziierung konfigurieren:
$ 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 '
]
]);
Sie können die Standardeinstellungen auch deaktivieren:
$ Essence = new Essence Essence ([
' filters ' => [
' SoundCloud ' => false
]
]);
Die Standardkonfiguration finden Sie im Standard-DI-Container von Essence (siehe folgenden Teil).
Fast alles in Essence kann durch Abhängigkeitsinjektion konfiguriert werden. Unter der Haube verwendet der Konstruktor einen Abhängigkeitsinjektionscontainer, um eine vollständig konfigurierte Instanz von Essence zurückzugeben.
Um das Essence-Verhalten anzupassen, ist es am einfachsten, die Injektionseinstellungen beim Erstellen von Essence zu konfigurieren:
$ 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 ();
})
]);
Die Standardinjektionseinstellungen werden in der Standard-Containerklasse definiert.
Sobald Sie Essence installiert haben, sollten Sie versuchen, ./cli/essence.php
in einem Terminal auszuführen. Mit diesem Skript können Sie Essence schnell testen:
# 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
Wenn Sie daran interessiert sind, Videos einzubetten, sollten Sie einen Blick auf die Multiplayer-Bibliothek werfen. Damit können Sie problemlos anpassbare Einbettungscodes erstellen:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}