Feed-io는 뉴스 피드를 사용하고 제공하기 위해 구축된 PHP 라이브러리입니다. 특징:
이 라이브러리는 확장성이 뛰어나고 다양한 상황에 적응하도록 설계되었으므로 문서를 통해 해결책을 찾지 못한 경우 자유롭게 토론을 통해 문의하세요.
Composer를 사용하여 프로젝트 요구 사항에 Feed-io를 추가하세요.
composer require debril/feed-io
피드-IO | PHP |
---|---|
4.x | 7.1+ |
5.0 | 8.0+ |
6.0 | 8.1+ |
Feed-io 4에는 PHP 7.1 이상이 필요하고, Feed-io 5에는 PHP 8.0 이상이 필요합니다. 모든 버전은 psr/log
및 PSR-18 호환 HTTP 클라이언트를 사용합니다. 계속 사용하려면 php-http/guzzle7-adapter
필요할 수 있습니다. 로깅을 위한 monolog
제안합니다. Monolog는 Feed-io의 로그를 처리하는 데 적합한 유일한 라이브러리가 아니며 대신 PSR/Log 호환 라이브러리를 사용할 수 있습니다.
Composer를 사용하여 Feed-io를 설치했다고 가정하고 해당 명령줄 클라이언트를 사용하여 터미널에서 피드를 읽을 수 있습니다.
./vendor/bin/feedio read http://php.net/feed.atom
Feed-io는 인터넷에서 피드를 읽고 자신의 피드를 게시하도록 설계되었습니다. 주요 클래스는 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 ();
}
마지막으로 피드를 사용한 이후 새 항목만 가져와야 하는 경우 결과의 getItemsSince()
메서드를 사용하세요.
// 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 ();
}
필요에 따라 여러 필터를 혼합하여 항목을 제외할 수도 있습니다.
// 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 ();
}
대역폭을 절약하기 위해 Feed-io는 다음 번에 피드를 읽고 피드에서 새 항목을 가져오는 것이 관련될 것이라고 추정합니다.
$ 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는 지난 7일 동안 피드가 활성화되었는지 먼저 감지하고 그렇지 않은 경우 졸린 것으로 간주하여 다음 업데이트 시간을 계산합니다. 슬리피피드의 다음 업데이트 날짜는 동시에 다음 날로 설정됩니다. 피드가 졸리지 않으면 피드의 마지막 수정 날짜에 해당 간격을 추가하여 평균 간격과 중앙 간격을 사용하고 결과를 현재 시간과 비교합니다. 결과가 미래인 경우 다음 업데이트 시간으로 반환됩니다. 그 중 미래의 것이 없다면 피드가 곧 업데이트될 것이라고 생각했기 때문에 다음 업데이트 시간은 계산 시점으로부터 1시간 후입니다.
참고: 업데이트된 피드가 중단되고 닫히는 고정 지연은 Result::getNextUpdate()
인수를 통해 설정할 수 있습니다. 자세한 내용은 결과를 참조하세요.
웹페이지는 헤더에서 하나 이상의 피드를 참조할 수 있으며, Feed-io는 이를 검색하는 방법을 제공합니다.
// 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 }" ;
}
또는 Feed-io의 명령줄을 사용할 수 있습니다.
./vendor/bin/feedio discover https://a-website.org
검색된 모든 피드가 출력됩니다.
// 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 );
FeedIoFeedIo::getPsrResponse()
사용하여 FeedIoFeedInstance
PSR-7 유효한 응답으로 직접 전환할 수 있습니다.
$ 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 ' );
새로운 FeedIo 인스턴스를 생성하려면 두 가지 종속성만 주입하면 됩니다.
// 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 );
표준 출력에 쓰도록 구성된 Monolog의 또 다른 예:
// 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 );
PsrLogLoggerInterface
구현하는 한 원하는 모든 Logger를 삽입할 수 있습니다. Monolog는 가능하지만 이것이 유일한 라이브러리는 아닙니다: 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 );
6.0부터는 PST-18 호환 HTTP 클라이언트를 래핑하는 일반 HTTP 어댑터가 있습니다.
use CustomPsr18 Client as CustomClient ;
$ client = new Custom Adapter Http Client( new CustomClient ())
$ logger = new Psr Log NullLogger ();
$ feedIo = new FeedIo FeedIo ( $ client , $ logger );
팩토리는 Feed-io 5.2에서 더 이상 사용되지 않으며 6.0에서 제거되었습니다. Facade를 직접 인스턴스화하고 원하는 HTTP 클라이언트 및 로거 인터페이스를 전달합니다.
날짜에 시간대가 누락된 피드를 사용해야 하는 경우가 있습니다. 일부 사용 사례에서는 정확한 값을 얻기 위해 피드의 시간대를 지정해야 할 수 있으므로 Feed-io는 이에 대한 해결 방법을 제공합니다.
$ feedIo -> getDateTimeBuilder ()-> setFeedTimezone ( new DateTimeZone ( $ feedTimezone ));
$ result = $ feedIo -> read ( $ feedUrl );
$ feedIo -> getDateTimeBuilder ()-> resetFeedTimezone ();
결과를 가져온 후 feedTimezone
재설정하는 것을 잊지 마십시오. 그렇지 않으면 모든 피드가 동일한 시간대에 위치하게 됩니다.
대부분의 Feed-io 코드는 Jetbrains에서 제공하는 PHP Storm을 사용하여 작성되었습니다.