#! /usr/bin/python2.5 import xmlrpclib import getpass import sys import os import time import md5 from datetime import datetime protocol_version = 1 def updatePost(ljserver, entry, password, username): challenge = ljserver.LJ.XMLRPC.getchallenge() request = {} request.update(entry) request['auth_method'] = 'challenge' request['auth_challenge'] = challenge['challenge'] request['auth_response'] = md5.new(challenge['challenge'] + md5.new(password).hexdigest()).hexdigest() request['username'] = username request['itemid'] = entry['itemid'] if 'security' in event and (request['security'] != 'usemask' or request['allowmask'] != 0): return request['security'] = 'usemask' request['allowmask'] = 1 request['ver'] = 1 ljserver.LJ.XMLRPC.editevent(request) if __name__=="__main__": if len(sys.argv) > 1: # Somebody has passed an argument # Handle arguments here. for arg in sys.argv[1:]: if arg== "-h" or arg == "--help": # Do help stuff here pass # Get user login info print "First we need to get your LJ login information." print "For security reasons, these values cannot be passed as parameters." username = raw_input("LJ Username: ") password = getpass.getpass("LJ password: ") lastdate = datetime.now() # Begin endless loop. We check every minute if we should post something. ljserver = xmlrpclib.Server("http://livejournal.com/interface/xmlrpc", encoding="utf-8") while(True): # Here's where we start doing stuff # Get our challenge from the LJ server challenge = ljserver.LJ.XMLRPC.getchallenge() # Create our response request= {} request['auth_method'] = 'challenge' request['auth_challenge'] = challenge['challenge'] request['auth_response'] = md5.new(challenge['challenge'] + md5.new(password).hexdigest()).hexdigest() request['selecttype'] = 'lastn' request['howmany'] = 50 print lastdate.strftime("%Y-%m-%d %H:%M:%S") request['beforedate'] = lastdate.strftime("%Y-%m-%d %H:%M:%S") request['lineendings'] = 'unix' request['username'] = username request['ver'] = protocol_version try: result = ljserver.LJ.XMLRPC.getevents(request) except xmlrpclib.Fault, e: if e.faultCode == 208: protocol_version ^= 1 request['ver'] = protocol_version challenge = ljserver.LJ.XMLRPC.getchallenge() request['auth_challenge'] = challenge['challenge'] request['auth_response'] = md5.new(challenge['challenge'] + md5.new(password).hexdigest()).hexdigest() result = ljserver.LJ.XMLRPC.getevents(request) else: raise e if not result: break for event in result['events']: print event newdate = datetime.strptime(event['eventtime'], "%Y-%m-%d %H:%M:%S") if newdate < lastdate: lastdate = newdate if 'security' not in event or event['security'] == 'usemask' and event['allowmask'] == 0: updatePost(ljserver, event, password, username)