#!/usr/local/bin/python import sys import httplib import urllib import hashlib import base64 global host, port, method, action, headers, username, password, subject, text, pickeyword host = "www.livejournal.com" port = 80 method = "POST" action = "/update.bml" headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} text_file = "" # file with post's text def getfromlist(strlist, s): for i in range(len(strlist)): if strlist[i].find(s) != -1: return strlist[i] return None def getinputfieldval(searchstr, resp): data = resp foundstr = None lines = data.split("\n") for line in lines: if line.find(searchstr) != -1: list = line.split() tmp = getfromlist(list, "value") if tmp == None: return None else: foundstr = tmp.split('=')[1].strip("""'""") return foundstr def mkchalresp(chal, passwd): hash1 = hashlib.md5(passwd) hash2 = hashlib.md5(chal + hash1.hexdigest()) return hash2.hexdigest() def usage(): scriptpath = sys.argv[0].split("/") scriptname = scriptpath[len(scriptpath) - 1] print "usage: %s -u user -p password [-s subject] [-k userpic_keyword]\n\tThe text of the post is read from stdin.\n" % scriptname exit() def procargs(): global username, password, subject, pickeyword, text_file for i in range(1, len(sys.argv)): if sys.argv[i] == "-h" or sys.argv[i] == "--help": usage() elif sys.argv[i] == "-u": i += 1 username = sys.argv[i] elif sys.argv[i] == "-p": i += 1 password = sys.argv[i] elif sys.argv[i] == "-s": i += 1 subject = sys.argv[i] elif sys.argv[i] == "-k": i += 1 pickeyword = sys.argv[i] else: text_file = sys.argv[i] def prepare(): global username, password, subject, text, text_file if username == "" or password == "": print "prepare(): error, username or password not supplied" usage() if text_file: f = open(text_file, "r") text = f.read() f.close() else: text = sys.stdin.read() def post(user, passwd, subj, text, pickeyword): conn = httplib.HTTPConnection(host, port) if not conn: print "post(): error, couldn't connect to LJ" exit() conn.request("POST", action) resp = conn.getresponse() response = resp.read() chal = getinputfieldval("id='login_chal'", response) lj_form_auth = getinputfieldval("name=\"lj_form_auth\"", response) chalresp = mkchalresp(chal, passwd) params = urllib.urlencode({"user" : user, "password" : "", "subject" : subj, "event" : text, "prop_picture_keyword" : pickeyword, "event_format" : "preformatted", "response" : chalresp, "chal" : chal, "lj_form_auth" : lj_form_auth}) conn.request(method, action, params, headers) resp = conn.getresponse() ### MAIN ### username = "" password = "" subject = "" text = "" pickeyword = "" procargs() prepare() post(username, password, subject, text, pickeyword)