Saturday, April 02, 2011 at 9:21 PM.
rssToBlogSuite.saveIfNewOrChanged
on saveIfNewOrChanged (adrblog, adrpost) {
<<Changes
<<12/24/10; 3:12:42 PM by DW
<<Created.
local (title="", link="", description="", struct, now = clock.now (), startticks = clock.ticks ());
rssToBlogSuite.initPost (adrpost);
bundle { //set up title, etc
on decode (s) {
return (xml.entitydecode (s, flAlphaEntities:true))};
on getval (name, adrval) {
try {
adrval^ = decode (xml.getvalue (@adrpost^.itemdata, name))}};
getval ("title", @title);
getval ("link", @link);
getval ("description", @description);
<<
<<bundle //add a prefix to the description
<<local (url = link)
<<getval ("linkFull", @url)
<<local (ul = string.urlsplit (url))
<<local (domain = string.lower (ul [2]))
<<if domain beginswith "www."
<<domain = string.delete (domain, 1, 4)
<<description = "<a href=\"" + link + "\">From " + domain + "</a>. " + description
};
on savePreviousValues () {
new (tabletype, @adrpost^.stats.previousValues);
adrpost^.stats.previousValues.title = title;
adrpost^.stats.previousValues.link = link;
adrpost^.stats.previousValues.description = description;
adrpost^.stats.ctSaves++;
adrpost^.stats.whenLastSave = now;
adrblog^.stats.ctSaves++;
adrblog^.stats.whenLastSave = now};
on setupRpcData (adrdata) {
new (tabletype, @rpcdata);
local (ul = string.urlsplit (adrblog^.prefs.params.url));
rpcdata.server = ul [2];
rpcdata.port = 80;
rpcdata.rpcPath = "/" + ul [3]};
on logit (operation) {
local (titleforlog, storylink = "story", s);
if title == "" {
titleforlog = description}
else {
titleforlog = title};
titleforlog = string.trimwhitespace (titleforlog);
if titleforlog [sizeof (titleforlog)] == "." {
titleforlog = string.delete (titleforlog, sizeof (titleforlog), 1)};
if link != "" {
storylink = "<a href=\"" + link + "\">" + storylink + "</a>"};
<<Saved story, "Apache plus Dropbox = Hello World," to a WordPress blog.
s = "Saved " + storylink + ", \"" + titleforlog + "\" to a <a href=\"" + adrblog^.prefs.urlBlogHome + "\">" + adrblog^.prefs.params.blogType + " blog</a>.";
log2.add (rssToBlogInfo.name, operation, s, startticks)};
try {
local (bodytext = rssToBlogSuite.postToText (adrblog, adrpost));
new (tabletype, @struct);
case string.lower (adrblog^.prefs.params.blogType) {
"wordpress" {
if adrpost^.stats.postID == nil {
local (rpcdata);
setupRpcData (@rpcdata);
adrpost^.stats.postID = metaweblog.newPost (title, link, bodytext, @struct, adrblog^.prefs.params.username, adrblog^.prefs.params.password, adrblog^.prefs.params.blogID, adrdata:@rpcdata);
adrblog^.stats.whenLastPost = now; //2/27/11 by DW
savePreviousValues ();
logit ("New")}
else {
local (flchanged = true);
if title == adrpost^.stats.previousValues.title {
if link == adrpost^.stats.previousValues.link {
if description == adrpost^.stats.previousValues.description {
flchanged = false}}};
if flchanged {
local (rpcdata);
setupRpcData (@rpcdata);
metaweblog.editpost (title, link, bodytext, @struct, adrpost^.stats.postID, adrblog^.prefs.params.username, adrblog^.prefs.params.password, adrblog^.prefs.params.blogID, true, @rpcdata);
savePreviousValues ();
logit ("Update")}}};
"tumblr" {
local (idpost = nil, operation = "New Post");
if defined (adrpost^.stats.postID) {
idpost = adrpost^.stats.postID;
operation = "Edit Post"};
adrpost^.stats.postID = tumblr.newpost (title, description, adrblog^.prefs.params.username, adrblog^.prefs.params.password, idPost:idpost, pubdate:timecreated (adrpost), group:adrblog^.prefs.params.domain);
logit (operation)}}}
else {
local (now = clock.now ());
adrpost^.stats.ctErrors++;
adrpost^.stats.whenLastError = now;
adrpost^.stats.lastError = tryerror;
adrblog^.stats.ctErrors++;
adrblog^.stats.whenLastError = now;
log2.add (rssToBlogInfo.name, "Error", adrpost^.stats.lastError, startticks)}};
bundle { //test code
<<saveIfNewOrChanged (@config.rssToBlog.blogs.scripting, @config.rssToBlog.blogs.scripting.calendar.["2011"].["03"].["10"].["00025"])
saveIfNewOrChanged (@config.rssToBlog.blogs.["linkblog.xml"], @config.rssToBlog.blogs.["linkblog.xml"].calendar.["2011"].["03"].["10"].["00066"])}
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.