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 بخاصية 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 '
]);
}