Monday, November 08, 2010 at 12:00 AM.


	<<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.