Wednesday, December 15, 2010 at 1:09 AM.
river2Suite.myRss.buildRss
on buildRss () {
<<Changes
<<12/14/10; 11:54:15 AM by DW
<<Don't set the RSS url, we're making it a preference, not a stat.
<<12/14/10; 11:44:08 AM by DW
<<Use adrdata^.myRss.prefs.s3Path.
<<12/29/09; 7:20:38 PM by DW
<<Created.
local (adrdata = river2suite.init (), rsstext = "", now = clock.now (), maxitems = 25, rssUrl);
bundle { //build rsstext
local (indentlevel = 0);
on add (s) {
rsstext = rsstext + string.filledstring ("\t", indentlevel) + s + "\r"};
on encode (s) {
if system.environment.isMac {
return (xml.entityEncode (latinToMac.macToLatin (s), true))}
else {
return (xml.entityEncode (s, true))}};
add ("<?xml version=\"1.0\"?>");
add ("<rss version=\"2.0\">"); indentlevel++;
add ("<channel>"); indentlevel++;
bundle { //add header elements
add ("<title>" + encode (adrdata^.myRss.feed.title) + "</title>");
add ("<link>" + encode (adrdata^.myRss.feed.link) + "</link>");
add ("<description>" + encode (adrdata^.myRss.feed.description) + "</description>");
add ("<language>" + encode (adrdata^.myRss.feed.language) + "</language>");
add ("<pubDate>" + date.netstandardstring (now) + "</pubDate>");
add ("<lastBuildDate>" + date.netstandardstring (now) + "</lastBuildDate>");
add ("<generator>" + frontier.getprogramname () + "</generator>");
with adrdata^.myRss.feed.cloud {
add ("<cloud domain=\"" + server + "\" port=\"" + port + "\" path=\"" + path + "\" registerProcedure=\"" + registerProcedure + "\" protocol=\"" + protocol + "\" />")}};
bundle { //add items
on visit (adritem) {
add ("<item>"); indentlevel++;
add ("<title>" + encode (adritem^.text) + "</title>");
add ("<pubDate>" + date.netstandardstring (adritem^.when) + "</pubDate>");
add ("<guid isPermalink=\"false\">" + adritem^.guid + "</guid>");
add ("</item>"); indentlevel--};
mainresponder.calendar.visitReverseChronologic (@adrdata^.myRss.calendar, @visit)};
add ("</channel>"); indentlevel--;
add ("</rss>"); indentlevel--};
bundle { //save it to S3
s3.init ();
<<local (bucket = user.s3.accounts.default.defaultBucket)
<<rssUrl = s3.newobject ("/" + bucket + "/myRss/rss.xml", rsstext)
s3.newobject (adrdata^.myRss.prefs.s3Path, rsstext);
adrdata^.myRss.stats.ctSaves++;
adrdata^.myRss.stats.whenLastSave = now};
<<adrdata^.myRss.stats.rssUrl = rssUrl
return (rssUrl)};
bundle { //test code
webbrowser.openurl (buildRss ())}
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.