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