« Nice Java Enterprise Edition 6 Platform Overview | Main | Groovy 1.7 Released »

12/22/2009

Bling v0.6 Released

A few weeks ago, Feedburner pings began throwing an exception:  "Request Throttled. Try again later" so this new release of Bling removes Feedburner from the list of XMLRPC services.

It also seemed that shortly after introducing BlogBuzzMachine into Bling's list, they decided to throw an exception that they should only be pinged using Feedburner's Pingshot service. So, if you are a user of Feedburner, like I am, and you enable the Pingshot service, you will be sending notifications out to BlogBuzzMachine. Therefore, BlogBuzzMachine has been removed.

So, the number of services currently receiving pings via Bling is at 19 along with the 5 search engines getting sitemap pings.

There is one new feature included in this release. A "debug" command-line option has been added. If you pass a -d or --debug (for POSIX compliance!) argument to bling, failed pings will include the reason for the failure from the xmlrpc service.

The main bling page has been updated and you can grab a copy from the downloads page. Please let me know of any problems in the comments. Thanks for taking a look and using it!

#!/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

def cli = new CliBuilder(usage: 'bling [-d,--debug]')
  cli.d(longOpt:'debug', required:false, type: GString, 'Run with verbose error messages')

def opt =  cli.parse(args)
  if (!opt) return

// You'll want to make this next section your own
def blogTitle = "YOUR_BLOG_TITLE_HERE"
def blogURL = "YOUR_BLOG_URL_HERE"
// def feedURL = "YOUR_BLOG_FEED_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',
  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/',
  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 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(20) + "${weal}"
      else if (!opt.d)
        println "  ${it.key}".padRight(20) + "${woe}"
      else 
        println "  ${it.key}".padRight(20) + "${woe} - Reason: ${response.message}"

    }catch(ConnectException ex) {
      println "  ${it.key}".padRight(20) + "${woe}"     
    }catch(IOException ex){
      println "  ${it.key}".padRight(20) + "${woe}"
    }
}
println "==========================="
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.6'
        headers.'Referer' = 'http://blog.techstacks.com/bling.html'

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

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

TrackBack

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

Listed below are links to weblogs that reference Bling v0.6 Released:

Comments