Bling v0.4 Released - Blog Ping Tool
I'm releasing an updated version of bling today. Written in groovy, the changes and additions made in this version are as follows:
- Added 2 Additional Services: BlogBuzzMachine and FeedBlitz.
- IceRocket is no longer managed separately since using the same XML-RPC calls that everything else uses also now seems to work for IceRocket. Right now, the section of the script that contained the separate IceRocket calls has been commented out and will be removed entirely in the net release.
- As mentioned above in the version 3.0 section, WeBlogALot has been removed. In the time since version 3.0 was released, I never got a successful ping.
- The spooky and primitive output format utilizing whitespace and tabs has been replaced with padded output. Thanks again to Mr.Haki for publishing his post about Padding Strings in Groovy.
- Finally, fixed a potential bug in the
!response.flerror
section, where!response
was actually set as!resp
.
The main bling page provides all the documentation and the main downloads page has been updated. Source is below.
#!/usr/bin/env groovy import groovy.net.xmlrpc.* import groovy.util.slurpersupport.GPathResult // You'll want to make this next section your own def blogTitle = "YOUR_BLOG_TITLE_HERE" def blogURL = "YOUR_BLOG_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/', Technorati:'http://rpc.technorati.com/rpc/ping' , 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', ] // 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 "====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 "===================="