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.