Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.radio.backup.backupOneMonth
on backupOneMonth (year, month, adrblog = radio.weblog.init ()) { <<Changes <<3/13/03; 12:47:23 PM by JES <<Convert wptext objects to strings before attempting to do entity-encoding. <<11/27/02; 8:53:32 PM by JES <<Add sourceTime in a try block in case there's some bad data in the post table. <<11/26/02; 3:39:55 PM by JES <<Use file.writeWholeFile instead of file.writeTextFile to save the RSS file. Fixes a problem on MacOS where the file would mistakenly be re-written even though nothing in the month has changed. <<11/14/02; 12:55:25 PM by DW <<Optimize so we only write the file if it changed. This means that we must not write a <lastBuildDate> or a comment at the head of the file indicating when it was last built because these will be seen as a change. If these ever are brought back, you'll be upstreaming a lot more than you have to every time you do a full backup. <<11/14/02; 11:31:23 AM by DW <<Add support for radioWeblogPost, implement <radioWeblogPost:flNotOnHomePage>. <<11/12/02; 3:47:10 PM by DW <<Created. local (pc = file.getpathchar ()); local (f = user.radio.backup.prefs.folder + "posts" + pc + year + pc + string.padwithzeros (month, 2) + ".xml"); local (xmltext = "", 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 (string (s)), true))} else { return (xml.entityEncode (string (s), true))}}; add ("<?xml version=\"1.0\"?>"); <<add ("<!-- RSS generated by " + frontier.getProgramName () + " on " + clock.now () + " -->") add ("<rss version=\"2.0\" xmlns:radioWeblogPost=\"http://backend.userland.com/radioWeblogPostModule\">"); indentlevel++; add ("<channel>"); indentlevel++; add ("<title>" + encode (adrblog^.prefs.title) + "</title>"); add ("<link>" + encode (radio.weblog.getUrl (adrblog)) + "</link>"); add ("<description>" + encode (adrblog^.prefs.description) + "</description>"); <<add ("<lastBuildDate>" + date.netstandardstring (clock.now ()) + "</lastBuildDate>") add ("<docs>http://backend.userland.com/rss</docs>"); add ("<generator>" + frontier.getProgramName () + "</generator>"); bundle { //add the items for the indicated month local (i, adrpost, day, postmonth, postyear, hour, minute, second); for i = sizeof (adrblog^.posts) downto 1 { adrpost = @adrblog^.posts [i]; date.get (adrpost^.when, @day, @postmonth, @postyear, @hour, @minute, @second); if (postmonth == month) and (postyear == year) { add ("<item>"); indentlevel++; if defined (adrpost^.title) { if sizeOf (adrpost^.title) > 0 { add ("<title>" + encode (adrpost^.title) + "</title>")}}; if defined (adrpost^.link) { add ("<link>" + encode (adrpost^.link) + "</link>")}; add ("<description>" + encode (string (adrpost^.text)) + "</description>"); add ("<pubDate>" + date.netStandardString (adrpost^.when) + "</pubDate>"); if defined (adrpost^.sourceName) and defined (adrpost^.sourceUrl) { add ("<source url=\"" + encode (adrpost^.sourceUrl) + "\">" + encode (adrpost^.sourceName) + "</source>")}; if defined (adrpost^.sourceTime) { try {add ("<radioWeblogPost:sourceTime>" + date.netstandardstring (adrpost^.sourceTime) + "</radioWeblogPost:sourceTime>") }}; if defined (adrpost^.enclosure) { with adrpost^.enclosure { if defined (error) { add ("<radioWeblogPost:enclosureError url=\"" + encode (url) + "\" error=\"" + encode (error) + "\"/>")} else { add ("<enclosure url=\"" + encode (url) + "\" length=\"" + length + "\" type=\"" + type + "\"/>")}}}; if defined (adrpost^.categories) { local (adr); for adr in @adrpost^.categories { add ("<category>" + encode (nameof (adr^)) + "</category>")}}; if defined (adrpost^.flNotOnHomePage) { //11/14/02 by DW if adrpost^.flNotOnHomePage { add ("<radioWeblogPost:flNotOnHomePage/>")}}; add ("<radioWeblogPost:id>" + number (nameof (adrpost^)) + "</radioWeblogPost:id>"); add ("</item>"); indentlevel--}}}; add ("</channel>"); indentlevel--; add ("</rss>"); indentlevel--; bundle { //write the file but only if it changed local (flwrite = true); file.surefilepath (f); if file.exists (f) { if string (file.readwholefile (f)) == xmltext { flwrite = false}}; if flwrite { file.writewholefile (f, xmltext)}}} <<bundle //test code <<backupOneMonth (2001, 6)
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.