Tuesday, August 18, 2009 at 7:29 PM.
myTwitterProfileSuite.buildFeed
on buildFeed (feedname) { <<Changes <<5/26/09; 12:19:07 PM by DW <<Created. local (adrdata = myTwitterProfileSuite.init (), xmltext, appname = "myTwitterProfile"); local (adrfeed = myTwitterProfileSuite.initFeed (feedname), lowerfeedname = string.lower (feedname)); bundle { //build xmltext local (indentlevel = 0); on add (s) { xmltext = xmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"}; on encode (s) { if system.environment.isMac { //02/22/2001 JES: convert to Latin text return (xml.entityEncode (latinToMac.macToLatin (s), true))} else { return (xml.entityEncode (s, true))}}; on popXmlDeclaration (s) { local (ixlinefeed = string.patternMatch ("\n", s)); return (string.delete (s, 1, ixlinefeed))}; add ("<?xml version=\"1.0\"?>"); add ("<!-- RSS generated by " + appname + " on " + date.netstandardstring (clock.now ()) + " -->"); add ("<rss version=\"2.0\">"); indentlevel++; add ("<channel>"); indentlevel++; bundle { //add the header elements add ("<title>" + encode (adrfeed^.prefs.rss.channelTitle) + "</title>"); add ("<link>" + encode (adrfeed^.prefs.rss.channelLink) + "</link>"); add ("<description>" + encode (adrfeed^.prefs.rss.channelDescription) + "</description>"); add ("<language>" + encode (adrfeed^.prefs.rss.channelLanguage) + "</language>"); add ("<copyright>" + encode (adrfeed^.prefs.rss.channelCopyright) + "</copyright>"); add ("<lastBuildDate>" + date.netstandardstring (clock.now ()) + "</lastBuildDate>"); add ("<docs>http://blogs.law.harvard.edu/tech/rss</docs>"); add ("<generator>" + appname + "</generator>"); add ("<managingEditor>" + encode (adrfeed^.prefs.rss.channelManagingEditor) + "</managingEditor>"); add ("<webMaster>" + encode (adrfeed^.prefs.rss.channelWebmaster) + "</webMaster>"); add ("<cloud domain=\"rpc.rsscloud.org\" port=\"5337\" path=\"/RPC2\" registerProcedure=\"rssCloud.pleaseNotify\" protocol=\"xml-rpc\" />"); add ("<ttl>" + adrfeed^.prefs.rss.channelTtl + "</ttl>")}; bundle { //add the items on visit (adritem) { if string.lower (adritem^.feed) == lowerfeedname { add ("<item>"); indentlevel++; bundle { //add the title, description myTwitterProfileSuite.getItemTitleDescription (adritem); add ("<title>" + encode (adritem^.title) + "</title>"); add ("<link>" + encode (adritem^.permaLink) + "</link>"); add ("<description>" + encode (adritem^.description) + "</description>")}; bundle { //add the enclosure data if adritem^.type == "podcast" { if defined (adritem^.enclosureUrl) { try { if not defined (adritem^.enclosureType) { myTwitterProfileSuite.getEnclosureData (adritem^.enclosureUrl, @adritem^.enclosureType, @adritem^.enclosureLength)}; add ("<enclosure url=\"" + adritem^.enclosureUrl + "\" type=\"" + adritem^.enclosureType + "\" length=\"" + adritem^.enclosureLength + "\" />")}}}}; add ("<pubDate>" + date.netstandardstring (adritem^.pubdate) + "</pubDate>"); add ("<guid>" + encode (adritem^.permaLink) + "</guid>"); <<scratchpad.opmlxstruct = xstruct add ("</item>"); indentlevel--}}; mainResponder.calendar.visitReverseChronologic (@adrdata^.calendar, @visit)}; <<bundle //add the items <<local (xstruct) <<xml.compile (op.outlinetoxml (@adrprogram^.outline), @xstruct) <<local (adropml = xml.getaddress (@xstruct, "opml")) <<local (adrbody = xml.getaddress (adropml, "body"), adritem) <<for adritem in adrbody <<if nameof (adritem^) contains "outline" <<local (adratts = @adritem^.["/atts"]) <<local (enctype, enclength) <<if podcastBuilderSuite.getEnclosureData (adratts^.url, @enctype, @enclength) <<add ("<item>"); indentlevel++ <<add ("<description>" + adratts^.text + "</description>") <<msg (adratts^.text) <<add ("<pubDate>" + encode (adratts^.created) + "</pubDate>") <<add ("<guid isPermalink=\"false\">" + adratts^.url+ "</guid>") <<add ("<enclosure url=\"" + adratts^.url + "\" type=\"" + enctype + "\" length=\"" + enclength + "\"/>") <<add ("</item>"); indentlevel-- add ("</channel>"); indentlevel--; add ("</rss>"); indentlevel--}; adrfeed^.stats.feedUrl = myTwitterProfileSuite.saveStaticFile (adrdata^.prefs.username, xmltext, feedname + "/rss.xml"); bundle { //ping rssCloud, 8/6/09 by DW local (pingurl); if feedname == "badhair" { pingurl = "http://badhair.us/rss.xml"}; if feedname == "rebootNews" { pingurl = "http://rebootnews.com/rss.xml"}; ["xmlrpc://rpc.rsscloud.org:5337/RPC2"].rssCloud.ping (pingurl)}; return (adrfeed^.stats.feedUrl)}; bundle { //test code webbrowser.openurl (buildFeed ("rebootNews"))} <<webbrowser.openurl (buildFeed ("badhair")) <<wp.newtextobject (xmltext, @scratchpad.rebootnewsxml) <<xml.compile (xmltext, @xstruct) <<scratchpad.rebootnewsxstruct = xstruct
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.