Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Flickr.readFeed
on readFeed (url, adrflchanged=nil) {
<<Changes
<<9/30/07; 9:51:00 AM by DW
<<Created.
<<We respect the Last-Modified header, keeping a cache of the feed text, to conserve bandwidth. If the caller wants to know if there was a change, pass in the address of a boolean in flchanged,
local (urllist = string.urlsplit (url), startticks = clock.ticks ());
Flickr.init (); //sets up system.temp.flickrglue
local (adrcache = @system.temp.flickrglue.feedCache);
if not defined (adrcache^) {
new (tabletype, adrcache)};
adrcache = @adrcache^.[url];
if defined (adrcache^) {
try {
local (headers);
local (s = string.httpResultSplit (tcp.httpClient ("HEAD", server:urllist [2], path:urllist [3], flMessages:false, ctFollowRedirects:3), @headers));
<<scratchpad.headers = headers
if date (headers.["Last-Modified"]) == adrcache^.lastModifiedHeader {
adrcache^.ctRefs++;
adrcache^.ctTicksLastRead = clock.ticks () - startticks;
if adrflchanged != nil {
adrflchanged^ = false};
return (adrcache^.xmltext)}}};
if not defined (adrcache^) {
local (headers);
new (tabletype, adrcache)};
adrcache^.ctRefs = 0;
adrcache^.xmltext = string.httpResultSplit (tcp.httpClient ("GET", server:urllist [2], path:urllist [3], flMessages:false, ctFollowRedirects:3), @headers);
adrcache^.lastModifiedHeader = date (headers.["Last-Modified"]);
adrcache^.ctTicksLastRead = clock.ticks () - startticks;
if adrflchanged != nil {
adrflchanged^ = true};
return (adrcache^.xmltext)};
bundle { //test code
local (adruser);
for adruser in @twitterGramData.users {
if defined (adruser^.flickrToTwitter.rssUrl) {
msg (nameof (adruser^));
readFeed (adruser^.flickrToTwitter.rssUrl)}};
return;
readFeed (twitterGramData.users.davewiner.flickrToTwitter.rssUrl)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.