« Groovy 1.6.6 is Out | Main | DevCentral Article on Anonymous Human Authentication »

11/29/2009

Bling v0.5 Released - Now with Sitemap Pings!

This release of Bling introduces a new feature: Sitemap Pings. Five search engine services are included: Ask, Bing, Google, Moreover, and Yahoo!.  In addition to the groovy xmlrpc module that has been required for this script to work since it was first released, I've also included the HTTPBuilder module, which is used to send the sitemap pings to each search engine.

A new variable has been added to the script: sitemapURL.  You will need to replace the default text between the quotes with the fully-qualified path to your own site's sitemap.xml file.  You do not need to worry about url-encoding the URL path—bling does that for you.  For example, mine is located at http://blog.techstacks.com/sitemap.xml. The Wikipedia article I link to above contains background on Sitemaps or you can go directly to the sitemaps.org website to view the actual protocol.

No changes have been made to the services that bling sends xmlrpc pings to in this release.  A future release will probably end up removing some additional services that have been failing for me every time I run this tool. 

Source code is below.  The main bling page has been updated and this version has been posted to the download site.

#!/usr/bin/env groovy

import groovy.net.xmlrpc.*
import groovy.util.slurpersupport.GPathResult
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.URLENC

// You'll want to make this next section your own
def blogTitle = "YOUR_BLOG_TITLE_HERE"
def blogURL = "YOUR_BLOG_URL_HERE"
// New in Bling version 0.5:
// URL for Sitemap Pings
def sitemapURL = "YOUR_BLOG_SITEMAP_URL_HERE"

// Set up a map (hash) of popular rpc endpoints
// It is too bad for my syntax highlighter, but some of 
// the blogs containing periods in their names necessitated
// placing them in quotes.  

def trackbacks = [
  Google:'http://blogsearch.google.com/ping/RPC2',
  Weblogs:'http://rpc.weblogs.com/RPC2',
  FeedBurner:'http://ping.feedburner.com/',
  Moreover:'http://api.moreover.com/RPC2',
  Syndic8:'http://ping.syndic8.com/xmlrpc.php' ,
  BlogRolling:'http://rpc.blogrolling.com/pinger/',
  NewsGator:'http://services.newsgator.com/ngws/xmlrpcping.aspx',
  Bloglines:'http://www.bloglines.com/ping',
  'Blo.gs':'http://ping.blo.gs/',
  BlogCatalog:'http://rpc.blogcatalog.com/',
  PubSub:'http://xping.pubsub.com/ping/',
  'MyBlog.jp':'http://ping.myblog.jp/',
  Goo:'http://blog.goo.ne.jp/XMLRPC',
  BlogPeople:'http://www.blogpeople.net/servlet/weblogUpdates',
  Twingly:'http://rpc.twingly.com/',
  Spinn3r:'http://rpc.spinn3r.com/open/RPC2',
  PostRank:'http://api.postrank.com/v2/ping',
  WasaLive:'http://www.wasalive.com/ping/',
  BlogBuzzMachine:'http://rpc.blogbuzzmachine.com/RPC2',
  IceRocket:'http://rpc.icerocket.com:10080/',
  FeedBlitz:'http://www.feedblitz.com/f/f.fbz?XmlPing'
  ]

def searchengines = [
  Ask:'http://submissions.ask.com/ping?sitemap=',
  Bing:'http://www.bing.com/webmaster/ping.aspx?siteMap=',
  Google:'http://www.google.com/webmasters/tools/ping?sitemap=',
  Yahoo:'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=Bling&url=',
  Moreover:'http://api.moreover.com/ping?u='
  ]

// Set up canned responses to make the outputted responses nicer.
// Previously, the output used the literal response from the endpoint
// which did not look all that nice in a terminal window.
def weal = "Thanks for the ping!"
def woe = "PING ATTEMPT FAILED."

// Here is the section responsible for iterating through each ping
// url in the trackbacks map.

println "====XMLRPC PING RESULTS===="

trackbacks.each {
  try{
    def url = it.value
    def proxy = new XMLRPCServerProxy(url)
    response = proxy.weblogUpdates.ping(blogTitle, blogURL)
      response.data instanceof GPathResult

    if (!response.flerror)
        println "  ${it.key}".padRight(25) + "${weal}"
      else
        println "  ${it.key}".padRight(25) + "${woe}"

    }catch(ConnectException ex) {
      println "  ${it.key}".padRight(25) + "${woe}"     
    }catch(IOException ex){
      println "  ${it.key}".padRight(25) + "${woe}"
    }
}
println "==========================="
println "\n"
println "====SITEMAP PING RESULTS==="

searchengines.each {
    def url = it.value + sitemapURL
    def http = new HTTPBuilder( url )
      http.request( GET, URLENC ) { req ->
        headers.'User-Agent' = 'Bling/0.5'
        headers.'Referer' = 'http://blog.techstacks.com/bling.html'

      response.success = { resp, html ->
        println " ${it.key}".padRight(25) + "${weal}"
      }
      response.failure = { resp, html ->
        println " ${it.key}".padRight(25) + "${woe}"
      }
  }
}

println "==========================="

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a01156fbc6fe6970c012875ed5c83970c

Listed below are links to weblogs that reference Bling v0.5 Released - Now with Sitemap Pings!:

Comments