Monday, November 08, 2010 at 12:00 AM.
scripting2Suite.utilities.createInputFolder
<<Changes <<6/2/10; 4:28:10 PM by DW <<This script loops over a folder structure created by the old scriptingNews.root, where each file contains a day's worth of blog posts. The new format requires that each archived post be in its own OPML file. That's the kind of folder we create. local (sourcefolder = "Macintosh HD:Users:davewiner:Desktop:intoScripting2:dailyArchive:", f); local (destfolder = "Macintosh HD:Users:davewiner:Desktop:intoScripting2:storyArchive:", ct=1, moddate); on hassubs (adrx) { //return true if the outline node has sub-outlines local (adr); for adr in adrx { if nameof (adr^) endswith "outline" { //contains at least one sub return (true)}}; return (false)}; fileloop (f in sourcefolder, infinity) { if f endswith ".opml" { local (s = file.readwholefile (f), xstruct, i); msg (f); xml.compile (s, @xstruct); local (adropml = xml.getaddress (@xstruct, "opml")); local (adrbody = xml.getaddress (adropml, "body")); for i = sizeof (adrbody^) downto 1 { adr = @adrbody^ [i]; if (nameof (adr^) endswith "outline") and hassubs (adr) { local (xstructcopy = xstruct); local (adropmlcopy = xml.getaddress (@xstructcopy, "opml")); local (adrbodycopy = xml.getaddress (adropmlcopy, "body")); bundle { //get the date, if we fail, do it gracefully try { moddate = date (xml.getattributevalue (adr, "created"))} else { moddate = file.modified (f); adr^.["/atts"].created = moddate}}; //very important that every story have a created attribute <<edit (@adr^.["/atts"]) new (tabletype, adrbodycopy); adrbodycopy^.[nameof (adr^)] = adr^; local (fstory = destfolder + string.padwithzeros (ct++, 4) + ".opml"); file.surefilepath (fstory); file.writewholefile (fstory, xml.decompile (@xstructcopy)); file.setcreated (fstory, moddate); file.setmodified (fstory, moddate)}}}}
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.