Monday, April 04, 2011 at 1:06 AM.
rssCloudWebsite.pleaseNotify
on pleaseNotify () {
<<Changes
<<10/2/09; 3:10:18 PM by DW
<<Pass flDiffDomain to rssCloudSuite.pleaseNotify.
<<9/13/09; 8:58:10 AM by DW
<<Add support for optional domain parameter.
<<8/11/09; 10:01:52 AM by DW
<<If the request body is empty, try to get the params from the searchargs.
<<8/11/09; 9:55:11 AM by DW
<<Only respond to POST requests.
<<8/11/09; 9:34:23 AM by DW
<<Check the parameters to make sure they're all there, and if not, provide a more intelligent error message.
<<7/20/09; 1:57:31 PM by DW
<<Created. A page to receive notify requests via http-post. This is the REST interface.
<<Params we expect: notifyProcedure, port, path, protocol, url1, url2, ... urlN.
<<They identify the routine we're to call back when the urls change.
local (pta = html.getpagetableaddress (), returnstring = "");
<<scratchpad.pleaseNotifyParams = pta^
on setreturnstring (fl, msgstring) {
<<bundle //old code, before factoring 7/23/09 by DW
<<local (xmltext = "", indentlevel = 0)
<<on add (s)
<<xmltext = xmltext + string.filledstring ("\t", indentlevel) + s + "\r"
<<on encode (s)
<<if system.environment.isMac
<<return (xml.entityEncode (latinToMac.macToLatin (s), true))
<<else
<<return (xml.entityEncode (s, true))
<<add ("<?xml version=\"1.0\"?>")
<<add ("<notifyResult success=\"" + fl + "\" msg=\"" + encode (msgstring) + "\" />")
<<returnstring = xmltext
returnstring = rssCloudSuite.restReturnSuccess (fl, msgstring, "notifyResult")};
try {
if pta^.method == "POST" {
local (args, adr, i, client, flDiffDomain);
new (tabletype, @args);
local (paramstring = pta^.requestbody);
if sizeof (paramstring) == 0 {
paramstring = pta^.searchargs};
webserver.parseargs (paramstring, @args);
local (urllist = {});
for adr in @args {
if string.lower (nameof (adr^)) beginswith "url" {
urllist = urllist + string.urldecode (adr^)}};
bundle { //check params, 8/11/09 by DW
local (s = "");
if not defined (args.notifyProcedure) {
s = s + "notifyProcedure, "};
if not defined (args.port) {
s = s + "port, "};
if not defined (args.path) {
s = s + "path, "};
if not defined (args.protocol) {
s = s + "protocol, "};
if sizeof (s) > 0 {
s = string.delete (s, sizeof (s) - 1, 2);
scripterror ("The following parameters were missing from the request body: " + s + ".")}};
bundle { //set client, 9/13/09 by DW
if defined (args.domain) {
client = args.domain;
<<scratchpad.domainNotifyParams = pta^
flDiffDomain = true}
else {
client = pta^.client;
flDiffDomain = false}};
rssCloudSuite.pleaseNotify (args.notifyProcedure, args.port, args.path, args.protocol, urllist, client, flDiffDomain);
setreturnstring (true, "Thanks for the registration. It worked. When the feed updates we'll notify you. Don't forget to re-register after 24 hours, your subscription will expire in 25. Keep on truckin!")}
else {
scriptError ("Request must be POST.")}}
else {
setreturnstring (false, tryerror)};
rssCloudSuite.setupXmlReturn ();
return (returnstring)};
bundle { //test code
html.setpagetableaddress (@scratchpad.domainNotifyParams);
pleaseNotify ()}
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.