FETCH_RSS() в WordPress: работа с RSS-лентой и кешированием

FETCH_RSS() │ WP 1.5.0

Функция FETCH_RSS() позволяет получить RSS-ленту с указанного URL и распарсить её. Она создает объект класса MagpieRSS.

Эта функция используется для получения RSS-ленты в формате объекта Magpie, с которым удобно работать (см. классы RSSCache и MagpieRSS). Также функция кеширует результат запроса.

Существует похожая функция fetch_feed(), которая создает тот же объект ленты по URL, но работает на основе класса SimplePie. Функция fetch_feed() более новая и была представлена в версии 2.8. Рекомендуется использовать именно fetch_feed() вместо этой функции.

Хуки

В данной функции хук не предусмотрен.

Возвращаемое значение

Функция возвращает объект MagpieRSS в случае успеха или false в случае ошибки.

Использование

fetch_rss( $url );
  • $url (строка) — обязательный параметр, URL для получения ленты.

Примеры использования

Пример 1: Получение 5 последних записей с RSS-ленты

items, 0, 5);
if (empty($rss_items)) {
    echo 'нет записей';
} else {
    foreach ($rss_items as $item) {
        echo '

' . $item['title'] . '

'; } } ?>

Пример 2: Отключение кеша или изменение его времени жизни

Чтобы изменить параметры кеширования функции fetch_rss(), используйте следующие константы:

define('MAGPIE_CACHE_ON', 0); // Отключить кеш
define('MAGPIE_CACHE_AGE', 3600); // Изменить время жизни кеша на 1 час

Эти константы можно определить в файле wp-config.php.

Заметки

  • Пакет: Внешний
  • Подпакет: MagpieRSS

Изменения

  • С версии 1.5.0 — функция была введена.

Код функции FETCH_RSS()

function fetch_rss($url) {
    // инициализируем константы
    init();

    if (!isset($url)) {
        return false; // ошибка: функция вызвана без URL
    }

    // если кеш отключен
    if (!MAGPIE_CACHE_ON) {
        $resp = _fetch_remote_file($url);
        if (is_success($resp->status)) {
            return _response_to_rss($resp);
        } else {
            return false; // ошибка: не удалось получить $url и кеш выключен
        }
    }

    // если кеш включен
    $cache = new RSSCache(MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE);

    $cache_status = 0; // ответ проверки кеша
    $request_headers = array(); // HTTP заголовки для запроса
    $rss = 0; // распарсенный RSS объект

    if (!$cache->ERROR) {
        // проверяем кеш
        $cache_status = $cache->check_cache($url);
    }

    // если объект в кеше и он свежий, возвращаем его
    if ($cache_status == 'HIT') {
        $rss = $cache->get($url);
        if (isset($rss) && $rss) {
            $rss->from_cache = 1;
            return $rss;
        }
    }

    // если кеш устарел, пытаемся получить свежую версию
    if ($cache_status == 'STALE') {
        $rss = $cache->get($url);
        if (isset($rss->etag) && $rss->last_modified) {
            $request_headers['If-None-Match'] = $rss->etag;
            $request_headers['If-Last-Modified'] = $rss->last_modified;
        }
    }

    $resp = _fetch_remote_file($url, $request_headers);

    if (isset($resp) && $resp) {
        if ($resp->status == '304') {
            // мы имеем самую последнюю версию
            $cache->set($url, $rss);
            return $rss;
        } elseif (is_success($resp->status)) {
            $rss = _response_to_rss($resp);
            if ($rss) {
                $cache->set($url, $rss);
                return $rss;
            }
        } else {
            return false; // ошибка: не удалось получить $url
        }
    } else {
        return false; // не удалось получить файл RSS по неизвестным причинам
    }

    return false; // если все попытки не удались
}

Связанные функции

  • add_feed() — добавляет новую ленту.
  • bloginfo_rss() — возвращает информацию о блоге в формате RSS.
  • fetch_feed() — используется для получения RSS-лент.
  • get_comment_link() — получает ссылку на комментарии.
  • get_the_content_feed() — получает содержимое в формате RSS.
  • post_comments_feed_link() — генерирует ссылку на ленту комментариев.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *