#!/usr/bin/python """Feed Ping for various engines Takes a list of rss files as arguments (parses them for urls) """ import optparse import os import urllib try: import cElementTree except ImportError: import xml.etree.cElementTree as cElementTree def ping_one(ping_base, name, url, changesURL): """ping a weblogs.com style service""" # TODO: set a user-agent restargs = urllib.urlencode(dict(name=name, url=url, changesURL=changesURL)) uo = urllib.URLopener() u = uo.open(ping_base, data=restargs) return u.read() if __name__ == "__main__": parser = optparse.OptionParser(usage=__doc__) parser.add_option("--google", action="store_true") parser.add_option("--weblogs", "--verisign", action="store_true") parser.add_option("--debug", action="store_true") options, args = parser.parse_args() for rssfile in args: rsstree = cElementTree.parse(rssfile) blogurl = rsstree.find("channel/link").text # url is where the reference page is; assume html->rss... rssurl = blogurl.replace(".html", ".rss", 1) base = os.path.basename(rssurl) # eww assert base == os.path.basename(rssfile) blogname = rsstree.find("channel/title").text if options.debug: print "pinging", rssurl, blogurl, blogname if options.google: print "google...", google_ping_url = "http://blogsearch.google.com/ping" print ping_one(google_ping_url, blogname, blogurl, rssurl) if options.weblogs: print "verisign...", # see http://www.weblogs.com/api.html weblogs_ping_url = "http://rpc.weblogs.com/pingSiteForm" print ping_one(weblogs_ping_url, blogname, blogurl, rssurl)