feed-io adalah perpustakaan PHP yang dibuat untuk menggunakan dan menyajikan feed berita. Ini fitur:
Pustaka ini sangat dapat diperluas dan dirancang untuk beradaptasi dengan banyak situasi, jadi jika Anda tidak menemukan solusi melalui dokumentasi, silakan bertanya dalam diskusi.
Gunakan Komposer untuk menambahkan feed-io ke dalam persyaratan proyek Anda:
composer require debril/feed-io
umpan-io | PHP |
---|---|
4.x | 7.1+ |
5.0 | 8.0+ |
6.0 | 8.1+ |
feed-io 4 memerlukan PHP 7.1+, feed-io 5 memerlukan PHP 8.0+. Semua versi bergantung pada psr/log
dan klien HTTP apa pun yang sesuai dengan PSR-18. Untuk terus menggunakan, Anda mungkin memerlukan php-http/guzzle7-adapter
. itu menyarankan monolog
untuk logging. Monolog bukan satu-satunya perpustakaan yang cocok untuk menangani log feed-io, Anda dapat menggunakan perpustakaan apa pun yang sesuai dengan PSR/Log.
Misalkan Anda menginstal feed-io menggunakan Composer, Anda dapat menggunakan klien baris perintahnya untuk membaca feed dari terminal Anda:
./vendor/bin/feedio read http://php.net/feed.atom
feed-io dirancang untuk membaca feed di internet dan mempublikasikan feed Anda sendiri. Kelas utamanya adalah FeedIo :
// create a simple FeedIo instance, e.g. with the Symfony HTTP Client
$ client = new FeedIo Adapter Http Client ( new Symfony Component HttpClient HttplugClient ());
$ feedIo = FeedIo FeedIo ( $ client );
// read a feed
$ result = $ feedIo -> read ( $ url );
// get title
$ feedTitle = $ result -> getFeed ()-> getTitle ();
// iterate through items
foreach ( $ result -> getFeed () as $ item ) {
echo $ item -> getTitle ();
}
Jika Anda hanya perlu mendapatkan item baru sejak terakhir kali Anda menggunakan feed, gunakan metode getItemsSince()
hasilnya:
// read a feed and specify the `$modifiedSince` limit to fetch only items newer than this date
$ result = $ feedIo -> read ( $ url , $ feed , $ modifiedSince );
// iterate through new items
foreach ( $ result -> getItemsSince () as $ item ) {
echo $ item -> getTitle ();
}
Anda juga dapat menggabungkan beberapa filter untuk mengecualikan item sesuai kebutuhan Anda:
// read a feed
$ result = $ feedIo -> read ( $ url , $ feed , $ modifiedSince );
// remove items older than `$modifiedSince`
$ since = new FeedIo Filter Since ( $ result -> getModifiedSince ());
// Your own filter
$ database = new Acme Filter Database ();
$ chain = new Chain ();
$ chain
-> add ( $ since )
-> add ( $ database );
// iterate through new items
foreach ( $ result -> getFilteredItems ( $ chain ) as $ item ) {
echo $ item -> getTitle ();
}
Untuk menghemat bandwidth, feed-io memperkirakan waktu berikutnya akan relevan untuk membaca feed dan mendapatkan item baru darinya.
$ nextUpdate = $ result -> getNextUpdate ();
echo " computed next update: { $ nextUpdate -> format ( DATE_ATOM )}" ;
// you may need to access the statistics
$ updateStats = $ result -> getUpdateStats ();
echo " average interval in seconds: { $ updateStats -> getAverageInterval ()}" ;
feed-io menghitung waktu pembaruan berikutnya dengan terlebih dahulu mendeteksi apakah feed aktif dalam 7 hari terakhir dan jika tidak, kami menganggapnya mengantuk. Tanggal pembaruan berikutnya untuk feed mengantuk disetel ke hari berikutnya pada waktu yang sama. Jika feed tidak mengantuk, kami menggunakan interval rata-rata dan interval median dengan menambahkan interval tersebut ke tanggal terakhir feed diubah dan membandingkan hasilnya dengan waktu saat ini. Jika hasilnya di masa mendatang, maka dikembalikan sebagai waktu pembaruan berikutnya. Jika tidak ada satupun yang terjadi di masa mendatang, kami menganggap feed akan segera diperbarui, sehingga waktu pembaruan berikutnya adalah satu jam lebih lambat dari saat penghitungan.
Harap dicatat: penundaan tetap untuk feed yang mengantuk dan tertutup untuk diperbarui dapat diatur melalui Result::getNextUpdate()
, lihat Hasil untuk detail lebih lanjut.
Halaman web dapat merujuk ke satu atau lebih feed di headernya, feed-io menyediakan cara untuk menemukannya :
// create a simple FeedIo instance, e.g. with the Symfony HTTP Client
$ client = new FeedIo Adapter Http Client ( new Symfony Component HttpClient HttplugClient ());
$ feedIo = FeedIo FeedIo ( $ client );
$ feeds = $ feedIo -> discover ( $ url );
foreach ( $ feeds as $ feed ) {
echo " discovered feed : { $ feed }" ;
}
Atau Anda dapat menggunakan baris perintah feed-io:
./vendor/bin/feedio discover https://a-website.org
Anda akan mendapatkan semua feed yang ditemukan di output.
// build the feed
$ feed = new FeedIo Feed ;
$ feed -> setTitle ( ' ... ' );
// convert it into Atom
$ atomString = $ feedIo -> toAtom ( $ feed );
// or ...
$ atomString = $ feedIo -> format ( $ feed , ' atom ' );
$ feed = new FeedIo Feed ;
$ feed -> setTitle ( ' ... ' );
$ styleSheet = new StyleSheet ( ' http://url-of-the-xsl-stylesheet.xsl ' );
$ feed -> setStyleSheet ( $ styleSheet );
// build the feed
$ feed = new FeedIo Feed ;
$ feed -> setTitle ( ' ... ' );
$ item = $ feed -> newItem ();
// add namespaces
$ feed -> setNS (
' itunes ' , //namespace
' http://www.itunes.com/dtds/podcast-1.0.dtd ' //dtd for the namespace
);
$ feed -> set ( ' itunes,title ' , ' Sample Title ' ); //OR any other element defined in the namespace.
$ item -> addElement ( ' itunes:category ' , ' Education ' );
// build the media
$ media = new FeedIo Feed Item Media
$ media -> setUrl ( ' http://yourdomain.tld/medias/some-podcast.mp3 ' );
$ media -> setType ( ' audio/mpeg ' );
// add it to the item
$ item -> addMedia ( $ media );
$ feed -> add ( $ item );
Anda dapat mengubah FeedIoFeedInstance
langsung menjadi respons valid PSR-7 menggunakan FeedIoFeedIo::getPsrResponse()
:
$ feed = new FeedIo Feed ;
// feed the beast ...
$ item = new FeedIo Feed Item ;
$ item -> set . . .
$ feed -> add ( $ item );
$ atomResponse = $ feedIo -> getPsrResponse ( $ feed , ' atom ' );
$ jsonResponse = $ feedIo -> getPsrResponse ( $ feed , ' json ' );
Untuk membuat instance FeedIo baru, Anda hanya perlu memasukkan dua dependensi:
// first dependency : the HTTP client
// here we use Guzzle as a dependency for the client
$ guzzle = new GuzzleHttp Client ();
// Guzzle is wrapped in this adapter which is a FeedIoAdapterClientInterface implementation
$ client = new FeedIo Adapter Guzzle Client ( $ guzzle );
// second dependency : a PSR-3 logger
$ logger = new Psr Log NullLogger ();
// now create FeedIo's instance
$ feedIo = new FeedIo FeedIo ( $ client , $ logger );
Contoh lain dengan Monolog yang dikonfigurasi untuk menulis pada output standar:
// create a simple FeedIo instance, e.g. with the Symfony HTTP Client
$ client = new FeedIo Adapter Http Client ( new Symfony Component HttpClient HttplugClient ());
$ logger = new Monolog Logger ( ' default ' , [ new Monolog Handler StreamHandler ( ' php://stdout ' )]);
$ feedIo = FeedIo FeedIo ( $ client , $ logger );
Anda dapat memasukkan Logger apa pun yang Anda inginkan selama ia mengimplementasikan PsrLogLoggerInterface
. Monolog bisa, tapi itu bukan satu-satunya perpustakaan: https://packagist.org/providers/psr/log-implementation
use FeedIo FeedIo ;
use FeedIo Adapter Guzzle Client ;
use GuzzleHttp Client as GuzzleClient ;
use Custom Logger ;
$ client = new Client ( new GuzzleClient ());
$ logger = new Logger ();
$ feedIo = new FeedIo ( $ client , $ logger );
Sejak 6.0 ada adaptor HTTP umum yang membungkus klien HTTP yang mendukung PST-18.
use CustomPsr18 Client as CustomClient ;
$ client = new Custom Adapter Http Client( new CustomClient ())
$ logger = new Psr Log NullLogger ();
$ feedIo = new FeedIo FeedIo ( $ client , $ logger );
Pabrik sudah tidak digunakan lagi di feed-io 5.2 dan dihapus di 6.0. Buat instance fasad secara langsung dan teruskan klien HTTP dan antarmuka logger yang diinginkan.
Terkadang Anda harus mengonsumsi feed yang zona waktunya tidak ada pada tanggalnya. Dalam beberapa kasus penggunaan, Anda mungkin perlu menentukan zona waktu feed untuk mendapatkan nilai yang akurat, sehingga feed-io menawarkan solusi untuk hal tersebut :
$ feedIo -> getDateTimeBuilder ()-> setFeedTimezone ( new DateTimeZone ( $ feedTimezone ));
$ result = $ feedIo -> read ( $ feedUrl );
$ feedIo -> getDateTimeBuilder ()-> resetFeedTimezone ();
Jangan lupa menyetel ulang feedTimezone
setelah mengambil hasilnya, atau Anda akan mendapatkan semua feed berada di zona waktu yang sama.
Sebagian besar kode feed-io ditulis menggunakan PHP Storm milik Jetbrains.