2012-11-15 9 views
9

Ich verwende die zum Lesen/Parsen eines Feeds. Das Problem ist, wenn der Feed ändert, werden die vorherigen Einträge ungültig (Verknüpfungen und Bilder funktionieren nicht), so kann ich nicht eine zwischengespeicherte Version des Feeds laden. Ich dachte, es gäbe eine Option beim Laden des Feeds, um die zwischengespeicherte Version nicht zu verwenden, aber ich sehe keine. Meine Lösung besteht darin, eine Variable (t) am Ende der Feed-URL hinzuzufügen, so dass sie "einzigartig" ist, aber das scheint hacky zu sein (aber es funktioniert). Wer kennt einen besseren Weg?Verhindern, dass die Google Feed-API den zwischengespeicherten Feed verwendet

+0

Haben Sie gefunden, eine Lösung? Das Problem hierbei ist, dass der Server, der den Feed bereitstellt, Caching basierend auf der URL des Feeds verwendet. Wenn ich also der Abfragezeichenfolge der URL eine zufällige Zeichenfolge hinzufüge, wird dadurch nicht nur das Caching von Google, sondern auch das des Servers umgangen. Ich denke, ich muss den Server ändern, um einen speziellen * externen Cache * -Parameter hinzuzufügen, der beim internen Caching ignoriert wird. – feklee

+0

Nein, keine andere Lösung als das, was ich in meiner Frage erwähnt habe - Hinzufügen der Zeit als "zufälliger" Parameter. Es funktioniert, nur nicht so sauber wie ich es möchte. –

+6

Ich mache das gleiche jetzt auch und füge etwas hinzu wie: ''? Bypass_cache =' + Math.floor (Date.now()/refreshIntervalInMs)' – feklee

Antwort

0

versuchen feed.includeHistoricalEntries(); Es könnte Ihr Problem lösen.

+0

(BTW, halten Sie die Vogon Poesie gehen!) –

+0

Von der API-Dokumentation, das klingt nicht wie es tun wird, was ich brauche. In der Tat klingt es wie ich dontIncludeHistoricalEntries() will. Ich werde es versuchen und sehen. RE: Vogon Poesie - ich werde! :) http://myvogonpoetry.com ist mein Blog :) –

+1

Oh ok, sorry. Sie möchten also den Cache "ungültig machen". Vielleicht fragen Sie nach der URL mit einem zufälligen Parameter? –

2

Diese Antwort könnte spät kommen, aber ich stieß auf diesen Beitrag und bekam die Lösung mit pxpgraphics Kommentar. Für diejenigen, die den Cache ungültig machen müssen, wird dies tun. Beachten Sie, dass dieses Codebeispiel andere Daten aus dem RSS-Feed abruft. Modifizieren Sie für Ihre Bedürfnisse.

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); 

Dieser Code setzt voraus, dass diese DIV auf der Seite haben:

<div id="feed"></div> 
+0

Das funktioniert, aber es ist nicht besser als das, was ich mit "new Date(). GetTime()" gemacht habe. Ich hatte auf etwas Eleganteres gehofft, das nicht auf einen "zufälligen" Parameter angewiesen war und tatsächlich den Cache benutzt hat. Bisher hat die Lösung @feklee vorgeschlagen, refreshIntervalInMs am nächsten zu dem zu verwenden, was ich wollte. –

+0

Sie haben Recht. Ich wünschte, es gäbe eine eingebaute Möglichkeit, Google mitzuteilen, dass es nicht zwischengespeichert werden soll. Vielleicht bevorzugen sie diesen Weg, da sie wahrscheinlich weniger Arbeit für ihre Server benötigen. – Alex