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 (посилання) на фід, який потрібно отримати.

Приклади

0

#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>';
	}
}
?>
0

#2 Відключення кешу або зміна часу життя

Щоб керувати кешем для функції fetch_rss() потрібно використовувати 2 константи:

define('MAGPIE_CACHE_ON', 0); // Вимкнути кеш
define('MAGPIE_CACHE_AGE', 3600) // змінити час життя до 1 години

Визначати ці константи можна у файлі конфігу wp-config.php .

нотатки

  • Пакет: External
  • Головний пакет: MagpieRSS

список змін

З версії 1.5.0Введено.

Код : 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()

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *