RSS i SimplePie

SimplePie RSS parser

Google Reader nie jest dostępne już prawie dwa miesiące, a na rynku pojawiło się sporo rozwiązań, które skutecznie wypełniły lub nadal wypełniają lukę pozostawioną przez ten największy jak do tej pory serwis. Niektóre rozwiązania starają się bardzo przypominać rozwiązanie od wujka Google, inne z kolei zmieniają nieco nasze przyzwyczajenia i udostępniają nam nowatorskie interfejsy. Nie chcę jednak pisać o obecnych rozwiązaniach, a o możliwości stworzenia własnego.

SimplePie

Narzędzie, które pozwoli nam konsumować kanały RSS oraz w łatwy sposób wyświetlać treści się tam znajdujące nazywa się SimplePie. Budowane i rozwijane w duchu Open Source na Github, zainstalowane może być za pomocą wspominanego już wielokrotnie tutaj Composera (SimplePie Packagist).

Podstawy

Zakładając, że mamy już zainstalowane SimplePie poprzez Composer, możemy przystąpić do wyboru pierwszego kanału RSS, który będziemy chcieli sparsować i wyświetlić. Posłużę się oczywiście swoim kanałem blogowym i pokażę Wam przykład, gdzie stworzę nowy obiekt SimplePie, ustawię adres URL kanału RSS (set_feed_url()) oraz zainicjalizuję nasz RSS reader poprzez wywołanie metody init() na obiekcie $feed.

<?php

require_once 'vendor/autoload.php';

$url = 'http://mrzepinski.pl/feed';
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->init();

UWAGA: SimplePie może rzucić wyjątkiem Warning: ./cache is not writeable. Wystarczy w takim wypadku utworzyć folder cache i w przypadku środowiska [L]inux nadać mu odpowiednie uprawnienia (chmod 755 cache).

Tym samym – jeżeli URL, który podaliśmy jest dostępny i jest to kanał RSS / Atom – możemy wykonywać kolejne metody, które pozwolą pobrać dane z kanału RSS.

...
echo '<h1>'.$feed->get_title().'</h1>';
echo '<p>'.$feed->get_description().'</p>';

Dzięki metodom get_title() oraz get_description() pobierzemy odpowiednio tytuł oraz opis naszego kanału RSS.

Jako, że kanały RSS posiadają standard, który zapewnia, że format XML kanału musi być zawsze taki sam, możemy bez problemu pobierać także konkretne informacje o poszczególnych obiektach, które udostępniane są przez RSS. Pobranie pierwszego obiektu wyglądać może następująco:

...
$item = $feed->get_item(0);
echo '<p>Title: <a href="'.$item->get_link().'">'.$item->get_title().'</a></p>';
echo '<p>Author: '.$item->get_author()->get_name().'</p>';
echo '<p>Date: '.$item->get_date('Y-m-d H:i:s').'</p>';
echo $item->get_content(true);

Ważnym czynnikiem jest także ilość dostępnych elementów. Taką informację osiągniemy poprzez wywołanie metody get_item_quantity() w następujący sposób:

...
$itemQty = $feed->get_item_quantity();
for ($i = 0; $i < $itemQty; $i++) {
    ...
}

Rozwiązanie to nie pozwoli nam jednak na paginację pobieranych wyników. Dużo łatwiej będzie nam to osiągnąć poprzez wykorzystanie metody get_items(), która jako pierwszy argument przyjmuje tak zwany offset, (miejsce od którego chcemy zacząć pobierać kolejne elementy), a jako drugi liczbę elementów do pobrania.

...
foreach ($feed->get_items(10, 10) as $item) {
    ...
}

Podsumowanie

Tym samym zbudowaliśmy prosty czytnik RSS. Nie było to specjalnie trudne prawda? Pełną dokumentację dostępnych klas oraz metod znajdziecie w oficjalnym API opisującym wszystkie dostępne funkcje. Do Was należy pobudzenie swojej kreatywności oraz realizacja własnego projektu.