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

scripting2Suite.oldstuff.getStories

on getStories (username, adrstories, maxstories=15) {
	<<Changes
		<<5/29/10; 12:53:04 PM by DW
			<<Rebuilt for scripting2.root.
		<<9/6/07; 7:12:56 PM by DW
			<<Core routine for building the home page, RSS feed, story list include.
	local (adrdata = scripting2Suite.initUser (username), adrday, archivedate, adrout, ix = 1);
	local (adrcal = scripting2Suite.loadOpmlArchive (username));
	new (tabletype, adrstories);
	scripting2Suite.getMostRecentDay (username, @adrday, @archivedate);
	loop {
		if sizeof (adrstories^) >= maxstories {
			break};
		if defined (adrday^.f) { //there is an outline for that day
			scripting2Suite.initArchiveDay (adrday);
			if not defined (adrday^.xstruct) {
				xml.compile (adrday^.opml, @adrday^.xstruct)};
			local (adropml = xml.getaddress (@adrday^.xstruct, "opml"));
			local (adrbody = xml.getaddress (adropml, "body"));
			for adrout in adrbody {
				if nameof (adrout^) endswith "outline" {
					local (adrstory = @adrstories^.[string.padwithzeros (ix++, 4)], enclosureUrl = "");
					new (tabletype, adrstory);
					adrstory^.title = adrout^.["/atts"].text;
					bundle { //set when
						try {
							adrstory^.when = date (adrout^.["/atts"].created)}
						else {
							adrstory^.when = archivedate}};
					bundle { //get the story body
						local (adrsubout, s = "");
						for adrsubout in adrout {
							if nameof (adrsubout^) endswith "outline" {
								s = s + xml.entitydecode (adrsubout^.["/atts"].text, flAlphaEntities:true) + "<br><br>\r";
								try { //3/5/08 by DW, set enclosureUrl
									if adrsubout^.["/atts"].type == "link" {
										enclosureUrl = adrsubout^.["/atts"].url}}}};
						adrstory^.body = s};
					bundle { //set the enclosure, 3/5/08 by DW
						try {
							if enclosureUrl != "" {
								local (urllist = string.urlsplit (enclosureUrl), headheaders, t);
								local (s = tcp.httpClient ("HEAD", server:urllist [2], path:urllist [3], timeOutTicks:60*30, flmessages:false, ctFollowRedirects:5));
								new (tabletype, @headheaders);
								webserver.util.parseHeaders (s, @headheaders);
								scratchpad.headheaders = headheaders;
								new (tabletype, @t);
								t.url = enclosureUrl;
								t.length = headheaders.["Content-length"];
								t.type = headheaders.["Content-Type"];
								adrstory^.enclosure = t}}};
								<<add ("<enclosure url=\"" + url + "\" length=\"" + headheaders.["Content-length"] + "\" type=\"" + headheaders.["Content-Type"] + "\" />")
					if sizeof (adrstories^) >= maxstories {
						break}}}};
		archivedate = date.yesterday (archivedate);
		adrday = mainresponder.calendar.getDayAddress (adrcal, archivedate, false)}};
bundle { //test code
	local (tc = clock.ticks ());
	getStories ("davewiner", @scratchpad.recentStories, 10);
	dialog.alert (clock.ticks () - tc);
	edit (@scratchpad.recentStories)}



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.