2012-11-15 10 views
9

Używam Google Feed JSAPI do odczytu/analizowania kanału. Problem polega na tym, że po zmianie kanału poprzednie wpisy stają się nieważne (linki i obrazy nie działają), więc nie mogę załadować buforowanej wersji kanału. Pomyślałem, że podczas ładowania kanału nie będzie opcji, aby nie używać wersji buforowanej, ale jej nie widzę. Moim rozwiązaniem jest dodanie zmiennej (t) na końcu adresu URL, aby było "unikalne", ale wydaje się, że jest hacky (ale działa). Ktoś wie lepszy sposób na zrobienie tego?Zapobieganie używaniu interfejsu API kanału Google do buforowania

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); 
    } 
+0

znaleźliście rozwiązanie? Problem polega na tym, że serwer dostarczający kanał używa buforowania na podstawie adresu URL kanału. Więc jeśli dodaję losowy ciąg do ciągu zapytania tego URL, to nie tylko obejdzie pamięć podręczną Google, ale także serwer. Chyba muszę zmodyfikować serwer, aby dodać specjalny * zewnętrzny bypass cache * parametru, który zostanie zignorowany podczas wewnętrznego buforowania. – feklee

+0

Nie, nie ma rozwiązania innego niż to, co wspomniałem w moim pytaniu - dodawanie w czasie jako parametru "losowego". Działa, po prostu nie tak czysty, jak bym chciał. –

+6

Teraz robię to samo, dodając coś takiego: ''bypass_cache =' + Math.floor (Date.now()/refreshIntervalInMs)' – feklee

Odpowiedz

0

Spróbuj feed.includeHistoricalEntries(); To może rozwiązać twój problem.

+0

(BTW, zachowaj poezję Vogon!) –

+0

Z dokumentacji API, to nie brzmi tak, jakby to zrobiło, czego potrzebuję. W rzeczywistości wygląda na to, że chcę dontIncludeHistoricalEntries(). Spróbuję jednak i zobaczymy. RE: Vogon Poetry - I will! :) http://myvogonpoetry.com jest moim blogiem :) –

+1

Oh ok, przepraszam. Więc chcesz "unieważnić" pamięć podręczną. Może pytanie o URL z losowym parametrem? –

2

Ta odpowiedź może pojawić się późno, ale natknąłem się na to stanowisko i otrzymałem rozwiązanie z komentarzem pxpgraphics. Dla tych, którzy muszą unieważnić pamięć podręczną, zrobi to. Zauważ, że ten przykład kodu pobiera inne dane z kanału RSS; modyfikować do swoich potrzeb.

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

Kod ten zakłada, że ​​masz to DIV na stronie:

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

To działa, ale nie jest to lepsze niż to, co robiłem z "new Date(). GetTime()". Miałem nadzieję na coś bardziej eleganckiego, które nie wymagałoby sczepiania się na "losowym" parametrze i faktycznie korzystałem z pamięci podręcznej. Jak dotąd rozwiązanie @feklee proponowane przy użyciu refreshIntervalInMs jest najbliższe temu, co chciałem. –

+0

Masz rację. Szkoda, że ​​nie ma wbudowanego sposobu, aby poinformować Google, że nie ma go w pamięci podręcznej. Może wolą w ten sposób, ponieważ prawdopodobnie wymaga to mniej pracy dla swoich serwerów. – Alex

Powiązane problemy