Essence เป็นไลบรารี PHP ที่เรียบง่ายสำหรับดึงข้อมูลสื่อจากเว็บไซต์ เช่น วิดีโอ YouTube สถานะ Twitter หรือบทความในบล็อก
หากคุณใช้ 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 นั้น ตามค่าเริ่มต้น 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 ();
})
]);
การตั้งค่าการฉีดเริ่มต้นถูกกำหนดไว้ในคลาสคอนเทนเนอร์มาตรฐาน
เมื่อคุณติดตั้ง Essence แล้ว คุณควรลองเรียกใช้ ./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 lib ช่วยให้คุณสร้างโค้ดฝังที่ปรับแต่งได้แบบไม่ลำบาก:
$ Multiplayer = new Multiplayer Multiplayer ();
if ( $ Media -> type === ' video ' ) {
echo $ Multiplayer -> html ( $ Media -> url , [
' autoPlay ' => true ,
' highlightColor ' => ' BADA55 '
]);
}