e;<X84$y{#@enabledlog8* Arial 3 |N4LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") 671 \em t~ c hmPr    descriptionLPings blo.gs with a standard ping, docseachPostenabledmethodxmlrpc methodNameweblogUpdates.pingnameblo.gsparams $Arial 3P3PwKLANDwin TEXTposttitle TEXTposturlpath/portresponseReadersafetyserver ping.blo.gsVArial f2FJF$BcBc flerrormessage Succeeded.J* Arial |N0LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") Bcl ]fnBcw ~  P     descriptionMPings blo.gs with an extended ping, docseachPostenabledlastPingmethodxmlrpc methodNameweblogUpdates.extendedPingnameblo.gs extendedparams EArial }}@wKLANDwin TEXTblogtitle TEXTblogurl TEXTposturl TEXTrssurlpath/portresponseresponseReaderFsafetyserver ping.blo.gsVArial 2_M* Arial |N0LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") !71 3<D KU `v {; @OPT co v } description#Pings syndic8 with a standard ping.eachPostenabledmethodxmlrpc methodNameweblogUpdates.pingnamesyndic8params $Arial 66[~LANDwin TEXTposttitle TEXTposturlpath /xmlrpc.phpportresponseReader safetyserverping.syndic8.com!ZV$BcBc flerrormessageThanks for pinging Syndic8Z* Arial |N0LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") Bcq 3<DBcM T^ i x }P     description#Ping syndic8 with an extended ping.eachPostenabledlastPingmethodxmlrpc methodNameweblogUpdates.extendedPingnamesyndic8 extendedparams EArial 66 [~LANDwin TEXTblogtitle TEXTblogurl TEXTposturl TEXTrssurlpath /xmlrpc.phpportresponse responseReaderLsafetyserverping.syndic8.comSO$BcBc flerrormessageThanks for the pingS* Arial |N0LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") |Bcs oxBc  P     description_Ping the Technorati service, docs.eachPostenabledlastPingmethodxmlrpc methodNameweblogUpdates.pingname Technoratiparams $Arial SSdwKLANDwin TEXTposttitle TEXTposturlpath /rpc/pingportresponseresponseReadersafetyserverrpc.technorati.comVArial 2{ B>$BcBc flerrormessageOKB* Arial |N)LANDwinon responseReader (adrService) if defined (adrService^.lastPing) local (response = adrService^.lastPing + ": ") if defined (adrService^.response.message) response = response + adrService^.response.message else return (adrService^.name + " has never run") Bc} mv~Bc | P     description]Ping the Yahoo RSS service. docseachPostenabledlastPingmethodxmlrpc methodNameweblogUpdates.pingnameYahooparams $Arial #e#e/wKLANDwin TEXTposttitle TEXTposturlpath/RPC2portresponseresponseReadersafetyserverapi.my.yahoo.comL|B^  #/ 7C T` kw }blo.gsTblo.gs extendedsyndic8 syndic8 extended technoratiYahoo~ .7? FP [_ dho P    descriptionService description goes here.eachPostenabledmethodxmlrpc methodNamenameparams Arial JJwKLANDwin pathportsafetyserveryu.y{6  ' 7prefsXservices9serviceTemplate"yzvVy{6  &A M y{ authorPatrick Ritchie authorEmailflashblade@videotron.ca descriptionWelcome to MASTER PING!

\r") add ("

Prefs

") add ("
\r") add ("\r") add ("Check this box to enable the Master Ping Tool.

\r") add ("

Check this box to enable logging.

\r") add ("

\r") add ("
\r") add ("") add ("\r") add ("\r") for adrService in adrServices add ("") add ("
Service NameDescriptionEnabled?
" + adrService^.name + "" + adrService^.description + "

Last Reponse: ") if defined (adrService^.responseReader) add (callScript (@adrService^.responseReader, {adrService})) else add ("No response reader installed") add ("

\r") add ("

\r") return (htmlText) $ZArial ƒȉ wKLANDwinCreate a blank service from the service template 13/07/04; 5:12:06 PM by PR Initial check-in, script prompts user for the service name and creates it local (adrResponse = @masterPingData.tempResponse) if dialog.ask ("Please enter the name of the service:", adrResponse) local (adrServices = @masterPingData.services) local (adrServiceTemplate = @masterPingData.serviceTemplate) if defined (adrServices^.[adrResponse^]) dialog.alert ("Error, Service: " + adrResponse^ + " already exists") else new (tableType, @adrServices^.[adrResponse^]) adrService = @adrServices^.[adrResponse^] adrService^ = adrServiceTemplate^ adrService^.name = adrResponse^ delete (adrResponse) Arial }0}UFwKLANDwinMaster Ping Add Service 34p6a1TArial ]\p Arial y{ywBLANDwinThis script returns a string which appears in the Status Center on the Radio UserLand home page. return ("Pinging the blogoshere.") *.UArial MM|D# LANDwinon upstreamCallback (filelist, justSpawn=true) The guts of the Master Ping Tool, runs through the filelist looking for valid home pages, categories and posts, if at least one is found we proceed to call the enabled services 21/07/04; 10:26:31 AM by PR typo fix 19/07/04; 3:43:59 PM by PR fixed a logging bug, the tool was logging even when we didn't do anything 14/07/04; 9:15:27 AM by PR added support for dtEnd in the main post loop, lots of minor bug fixes, categories and eachPost are now properly supported 13/07/04; 5:15:37 PM by PR Intitial check-in, works great so far! if justSpawn thread.callScript (string (this), {filelist, false}) return local (adrPrefs = @masterPingData.prefs) if adrPrefs^.enabled local (adrBlog = radio.weblog.init ()) local (adrPosts = @adrBlog^.posts) local (flHomePage = false, flArchive = false, flCategory = false, adrThePosts, adrCategories, ctstart = clock.ticks()) for f in filelist local (adrTable, x) radio.file.getfileattributes (f, @adrtable) if adrTable^.title == "index.txt" if defined (adrTable^.flHomePage) if (adrTable^.flHomePage) flHomePage = true if defined (adrTable^.flArchivePage) flArchive = adrTable^.flArchivePage if flArchive // we have a valid post page local (dtStart = adrtable^.archiveDate) bundle // the following was written by Simon Fell in pingback.upstreamed // dtStart isn't in standard date format its in yyyy/mm/dd, we need to convert it local ( yy = string.nthField ( dtStart, "/", 1 ), mm = string.nthField(dtStart, "/", 2), dd = string.nthField(dtStart,"/",3)) dtStart = date.set ( dd, mm, yy, 00, 00, 00 ) local (dtEnd = date.tomorrow (dtStart)) new (tableType, @adrThePosts) new (tableType, @adrCategories) for x = sizeOf (adrPosts^) downto 1 // run through all the posts until their date is later than this archive date local (adrPost = @adrPosts^ [x], url) on addPost (category = "") if url contains adrTable^.archiveDate if !defined (adrThePosts.[url]) new (tableType, @adrThePosts.[url]) local (adrNewPost = @adrThePosts.[url]) adrNewPost^ = adrPost^ if category != "" flCategory = true if defined (adrBlog^.categories.[category]) local (adrCategory = @adrBlog^.categories.[category]) if adrCategory^.flRenderHtml if !defined (adrCategories.[category]) new (tableType, @adrCategories.[category]) local (adrMyCategory = @adrCategories.[category]) adrMyCategory^.url = adrCategory^.htmlUrl adrMyCategory^.rssurl = adrCategory^.rssUrl adrMyCategory^.title = adrCategory^.displayName if adrPost^.when < dtStart break; if adrPost^.when < dtEnd if sizeOf (adrPost^.categories) > 0 for adrCategory in @adrPost^.categories local (catname = nameOf (adrCategory^)) if radio.weblog.getUrlForPost (adrPost, @url, catname) addPost (catname) if radio.weblog.getUrlForPost (adrPost, @url) addPost () local (adrServices = @masterPingData.services, logtext="") for adrService in adrServices if adrService^.enabled local (flContinue = true) if defined (adrService^.safety) && defined (adrService^.lastPing) if (clock.now () - adrService^.lastPing) < (adrService^.safety * 60) flContinue = false if !flHomePage && !flCategory && !(adrService^.eachPost && flArchive) flContinue = false if flContinue on ping (type = "home", adrPost = nil) local (params = {}, blogtitle, blogurl, posturl, posttitle , rssurl) case type "home" blogtitle = adrBlog^.prefs.title blogurl = radio.weblog.getUrl () posttitle = adrBlog^.prefs.title posturl = radio.weblog.getUrl () rssurl= radio.weblog.getRssUrl(adrBlog) "post" if adrPost != nil blogtitle = adrBlog^.prefs.title blogurl = radio.weblog.getUrl () posturl = nameOf (adrPost^) if defined (adrPost^.title) posttitle = adrPost^.title rssurl= radio.weblog.getRssUrl(adrBlog) "category" rssurl = adrPost^.rssurl blogtitle = adrPost^.title posttitle = adrPost^.title blogurl = adrPost^.url posturl = adrPost^.url case adrService^.method "xmlrpc" for i = 1 to sizeOf (adrService^.params) case adrService^.params[i] "blogtitle" params[i] = blogtitle "blogurl" params[i] = blogurl "posturl" params[i] = posturl "posttitle" params[i] = posttitle "rssurl" params[i] = rssurl other params[i] = adrService^.params[i] masterPingSuite.xmlrpc (adrService, params) "customscript" callscript (string((@adrService^.customscript)), {blogtitle, blogurl, posturl, posttitle, rssurl}) if flHomePage ping ("home") if flCategory for adrCategory in @adrCategories ping ("category", adrCategory) if adrService^.eachPost && flArchive for adrPost in @adrThePosts ping ("post", adrPost) if adrPrefs^.log logtext = logtext + adrService^.name + ", " if adrPrefs^.log && logtext != "" logtext = string.mid(logtext, 0, sizeOf (logtext)-2) radio.log.add (masterPingInfo.name, "Pinged the following services: " + logtext, ctstart) return (true) Test code local (f = {"K:\\Program Files\\Radio UserLand\\www\\categories\\todayInHistory\\2004\\01\\15.txt"}) upstreamCallback (f, false) xArial g6(|}LANDwinon xmlrpc (adrService, params) Generic xml-rpc call for the Master Ping Suite 13/07/04; 5:13:04 PM by PR Uses the service parameters to make an xml-rpc ping local (server, rpcpath, methodName, port) server = adrService^.server rpcpath = adrService^.path methodName = adrService^.methodName port = adrService^.port try adrService^.response = xml.rpc (server, port, methodName, @params, rpcPath:rpcpath, flDebug:false) else if !defined (adrService^.response) new (tableType, @adrService^.response) adrService^.response.message = tryError adrService^.lastPing = clock.now () bundle // debug code adrService^.debugParams = params return (true) xmlrpc (@masterPingData.services.bitacoles, {"Windows", "http://www.caballe.com/categories/windows/"}) Vy{g  !- 6B GS gs background% callbacks'homePage(menu7sstatusCenterMessage7upstreamCallback9xmlrpcR )Arial yywBLANDwinon index () masterPingSuite.homePage () 07Ÿ indexWVVerdana ??8 Y`y{z]  *6 JV jv masterPingDatamasterPingInfoWmasterPingNodeTypes masterPingResponder"masterPingRpcHandlers#DmasterPingSoapHandlers#pmasterPingSuiteVmasterPingWebsiteXVvRArial " y{BcuwKLANDwinmasterPingData prefs services blo.gs blo.gs extended description eachPost enabled lastPing method methodName name params path port response responseReader safety server syndic8 syndic8 extended technorati Yahoo description eachPost enabled lastPing method methodName name params path port response responseReader safety server serviceTemplate masterPingInfo author authorEmail description homePageUrl name releaseDate version masterPingNodeTypes masterPingResponder masterPingRpcHandlers masterPingSoapHandlers masterPingSuite background callbacks homePage menu statusCenterMessage upstreamCallback xmlrpc masterPingWebsite rprprprkrkrprprprprprprprprprprprprprprkrkrkrkr(r(r(r(r(r(r(r(r(r(r(r(r(r(rprpr8jr8jr8jr8jr8jr8jr8jrprprprprpr`ir`ir`ir`ir`ir`ir`irp Y9^SArial MS Sans Serif 2  Times New Roman! @NArial 1]Arial MS Sans Serif