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

<<11/16/01; 1:23:56 AM by JES
	<<This script publishes all of your weblog pages, all of your category pages, and all of your category archive pages. It also publishes your weblog and category rss files.
	<<11/17/01; 12:36:00 AM by JES
		<<Fixed a bug that Lawrence found which caused category archive pages not to be published properly.

if not dialog.confirm ("Publish all of your weblog and category pages?") {
	return (false)};
local (adrblog = radio.weblog.init ());
local (catsTable); new (tableType, @catsTable);
for i = 1 to sizeOf (adrblog^.categories) { //create a date-list for each category, set flDirty for each category
	local (adrcat = @adrblog^.categories[i]);
	local (catname = nameOf (adrcat^));
	catsTable.[catName] = {};
	adrcat^.flDirty = true};

local (datelist = {});
local (day, month, year, hour, minute, second);
local (adrpost);
for adrpost in @adrblog^.posts { //loop over posts, and determine which archive and category-archive days need to be published
	date.get (adrpost^.when, @day, @month, @year, @hour, @minute, @second);
	local (d = date.set (day, month, year, 0, 0, 0));
	if not (datelist contains d) {
		datelist = datelist + d};
	if defined (adrpost^.categories) {
		for i = 1 to sizeOf (adrpost^.categories) {
			if adrpost^.categories[i] {
				local (catname = nameOf (adrpost^.categories[i]));
				if defined (catsTable.[catname]) { //the category still exists
					catsTable.[catname] = catsTable.[catname] + d}}}}};

bundle { //publish the weblog home page
	radio.weblog.publish (adrblog)};
bundle { //publish the weblog RSS
	radio.weblog.publishRss (adrblog)};
bundle { //publish the weblog archive pages
	local (d);
	for d in datelist {
		radio.weblog.publish (adrblog, d:d)}};
bundle { //publish all of the category index pages
	for i = 1 to sizeOf (adrblog^.categories) {
		radio.weblog.publish (adrblog, nameOf (adrblog^.categories[i]))}};
bundle { //publish all of the category archive pages
	local (adrcatdates);
	for adrcatdates in @catsTable {
		local (catname = nameOf (adrcatdates^));
		local (d);
		for d in adrcatdates^ {
			radio.weblog.publish (adrblog, catname, d)}}};

dialog.notify ("Your weblog and category pages have been published.")

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.