#!/usr/bin/python

import xmlrpclib
import urllib2
import os

from hashlib import md5

feed_url = '<Your feed url>'
blog_url = '<Your blog url>'
blog_name = '<Your blog name>'
hash_file_path = os.path.expanduser("~/.blogger/")

def main():
    req = urllib2.Request(feed_url)
    response = urllib2.urlopen(req)
    feed = response.read()
    hash_file_name = hash_file_path + md5(blog_url).hexdigest()

    if os.path.exists(hash_file_name):
        hash_file = open(hash_file_name, "r+")
        last_digest = hash_file.read(os.path.getsize(hash_file_name))
    else:
        hash_file = open(hash_file_name, "w")
        last_digest = ''

    curr_digest = md5(feed).hexdigest()

    if curr_digest != last_digest:
        ping = Ping(blog_name, blog_url)
        responses = ping.ping_all(['icerocket','technorati','google'])
        hash_file.write(curr_digest)

    hash_file.close()

class Ping:
    def __init__(self, blog_name, blog_url):
        self.blog_name = blog_name
        self.blog_url = blog_url

    def ping_all(self, down_stream_services):
        responses = []

        for down_stream_service in down_stream_services:
            method = eval('self._' + down_stream_service)
            responses.append(method.__call__())

        return responses

    def _icerocket(self):
        server = xmlrpclib.ServerProxy('http://rpc.icerocket.com:10080')
        response = server.ping(self.blog_name, self.blog_url)
        # print "Icerocket response : " + str(response)
        return response

    def _technorati(self):
        server = xmlrpclib.ServerProxy('http://rpc.technorati.com/rpc/ping')
        response = server.weblogUpdates.ping(self.blog_name, self.blog_url)
        # print "Technorati response : " + str(response)
        return response

    def _google(self):
        server = xmlrpclib.ServerProxy('http://blogsearch.google.com/ping/RPC2')
        response = server.weblogUpdates.ping(self.blog_name, self.blog_url)
        # print "Google blog search response : " + str(response)
        return response

main()
