Запретить Google Feed API использовать кэшированный канал
Я использую Google Feed JSAPI для чтения / анализа канала. Проблема в том, что при изменении канала предыдущие записи становятся недействительными (ссылки и изображения не работают), поэтому я не могу загрузить кэшированную версию канала. Я думал, что при загрузке канала будет возможность не использовать кэшированную версию, но я ее не вижу. Мое решение состоит в том, чтобы добавить переменную (t) в конец URL фида, чтобы он был "уникальным", но это кажется хакерским (но это работает). Кто-нибудь знает лучший способ сделать это?
function onLoad() {
// Create a feed instance that will grab feed feed.
var feed = new google.feeds.Feed(feedLocation+"&t="+new Date().getTime());
// Request the results in XML (so that we can parse out all the info
feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
//must set this - if you don't, it defaults to 4
feed.setNumEntries(50);
// Calling load sends the request off. It requires a callback function.
feed.load(feedLoaded);
}
2 ответа
Этот ответ может прийти поздно, но я наткнулся на этот пост и получил решение, используя pxpgraphics
комментарий. Для тех, кому нужно сделать кеш недействительным, это сделает это. Обратите внимание, что этот пример кода извлекает другие данные из RSS-канала; изменить для ваших нужд.
google.load("feeds", "1");
function initialize() {
var feedLocation = "http://feeds.bbci.co.uk/news/rss.xml";
/* Use the randomNum and the time to invalidate the Google cache and
fetch the latest articles.
*/
var randomNum = Math.floor((Math.random() * 10000) + 1);
var url = feedLocation + "?&t=" + new Date().getTime() + randomNum;
var feed = new google.feeds.Feed(url);
feed.setNumEntries(1000);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var div = document.createElement("div");
div.appendChild(document.createTextNode(entry.title));
div.innerHTML += "<br>" + entry.publishedDate;
div.innerHTML += "<br>" + entry.content;
container.appendChild(div);
}
}
});
}
google.setOnLoadCallback(initialize);
Этот код предполагает, что у вас есть это DIV
на странице:
<div id="feed"></div>
Пытаться feed.includeHistoricalEntries();
Это может решить вашу проблему.