fetch_rss() │ WP 1.5.0 Отримує та розбирає RSS за вказаним URL на RSS. Створює об’єкт класу MagpieRSS.
Функція потрібна, щоб отримати RSS-фід у вигляді Magpie об’єкта, з яким потім зручно працювати ( див. класи RSSCache{} та MagpieRSS{} ). Також функція кешує результат запиту.
Аналогічна функція fetch_feed() , яка створює такий самий об’єкт фіда URL тільки працює з класом SimplePie. fetch_feed() новіший і введений з версії 2.8. Рекомендовано використовувати fetch_feed() замість цієї функції.
Хуків немає.
Повертає MagpieRSS|false
. false при невдачі, об’єкт MagpieRSS якщо вдалося отримати фід.
Використання fetch_rss($url);
$url
(рядок) (обов’язковий)
URL (посилання) на фід, який потрібно отримати. Приклади #1 Отримаємо перші 5 записів із фіда сайту http://example.com/feed/ <?php
include_once(ABSPATH . WPINC . '/rss.php');
$rss = fetch_rss('http://example.com/feed/');
$rss_items = array_slice($rss->items, 0, 5);
if ( empty($rss_items) ) {
echo 'немає записів';
} else {
foreach ( $rss_items as $item ) {
echo '<p><a href="' . $item['link'] . '">' . $item['title'] . '</a></p>';
}
}
?> #2 Відключення кешу або зміна часу життя Щоб керувати кешем для функції fetch_rss() потрібно використовувати 2 константи:
define('MAGPIE_CACHE_ON', 0); // Вимкнути кеш
define('MAGPIE_CACHE_AGE', 3600) // змінити час життя до 1 години Визначати ці константи можна у файлі конфігу wp-config.php .
Додати свій приклад
нотатки Пакет: External Головний пакет: MagpieRSS список змін Код : fetch_rss() fetch rss WP 6.0.2 function fetch_rss ($url) {
// initialize constants
init();
if ( !isset($url) ) {
// error("fetch_rss called without a url");
return false;
}
// if cache is disabled
if ( !MAGPIE_CACHE_ON ) {
// fetch file, and parse it
$resp = _fetch_remote_file($url);
if ( is_success( $resp->status ) ) {
return _response_to_rss($resp);
}
else {
// error("Failed to fetch $url and cache is off");
return false;
}
}
// else cache is ON
else {
// Flow
// 1. check cache
// 2. if there is a hit, make sure it's fresh
// 3. if cached obj fails freshness check, fetch remote
// 4. if remote fails, return stale object, or error
$cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE );
if (MAGPIE_DEBUG and $cache->ERROR) {
debug($cache->ERROR, E_USER_WARNING);
}
$ cache_status = 0; // response of check_cache
$request_headers = array(); // HTTP headers to send with fetch
$ rss = 0; // parsed RSS об'єкт
$errormsg = 0; // errors, if any
if (!$cache->ERROR) {
// return cache HIT, MISS, or STALE
$cache_status = $cache->check_cache($url);
}
// if object cached, and cache is fresh, return cached obj
if ( $cache_status == 'HIT' ) {
$ rss = $ cache-> get ($ url);
if ( isset($rss) and $rss ) {
$rss->from_cache = 1;
if ( MAGPIE_DEBUG > 1) {
debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
}
return $rss;
}
}
// else attempt a conditional get
// Set up headers
if ( $cache_status == 'STALE' ) {
$ rss = $ cache-> get ($ url);
if ( isset($rss->etag) and $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) and $resp) {
if ($resp->status == '304') {
// we have the most current copy
if ( MAGPIE_DEBUG > 1) {
debug("Got 304 for $url");
}
// reset cache on 304 (at minutillo insistent prodding)
$cache->set($url, $rss);
return $rss;
}
elseif ( is_success( $resp->status ) ) {
$ rss = _response_to_rss ($ Resp);
if ($ rss) {
if (MAGPIE_DEBUG > 1) {
debug("Fetch successful");
}
// add object to cache
$ cache-> set ($ url, $ rss);
return $rss;
}
}
else {
$errormsg = "Failed to fetch $url. ";
if ( $resp->error ) {
# compensate for Snoopy's annoying habbit to tacking
# on 'n'
$http_error = substr($resp->error, 0, -2);
$errormsg .= "(HTTP Error: $http_error)";
}
else {
$errormsg .= "(HTTP Response: " . $resp->response_code .')';
}
}
}
else {
$errormsg = "Unable to retrieve RSS file for unknown reasons.";
}
// else fetch failed
// attempt to return cached object
if ($rss) {
if (MAGPIE_DEBUG) {
debug("Returning STALE object for $url");
}
return $rss;
}
// else we totally failed
// error ($ errormsg);
return false;
} // end if ( !MAGPIE_CACHE_ON ) {
} // end fetch_rss() Зв’язані функції