]> www.wagner.pp.ru Git - oss/ljdump.git/blob - ljdump.py
65903fda98df8427d0bafee6941339407edf4e7e
[oss/ljdump.git] / ljdump.py
1 import codecs, md5, os, pprint, sys, xml.dom.minidom, xmlrpclib
2 from xml.sax import saxutils
3
4 def dochallenge(params, password):
5     challenge = server.LJ.XMLRPC.getchallenge()
6     params.update({
7         'auth_method': "challenge",
8         'auth_challenge': challenge['challenge'],
9         'auth_response': md5.new(challenge['challenge']+md5.new(password).hexdigest()).hexdigest()
10     })
11     return params
12
13 def dumpelement(f, name, e):
14     f.write("<%s>\n" % name)
15     for k in e.keys():
16         if isinstance(e[k], {}.__class__):
17             dumpelement(f, k, e[k])
18         else:
19             s = unicode(str(e[k]), "UTF-8")
20             f.write("<%s>%s</%s>\n" % (k, saxutils.escape(s), k))
21     f.write("</%s>\n" % name)
22
23 def writedump(itemid, event):
24     f = codecs.open("archive/"+itemid, "w", "UTF-8")
25     f.write("""<?xml version="1.0"?>\n""")
26     dumpelement(f, "event", event)
27     f.close()
28
29 config = xml.dom.minidom.parse("ljdump.config")
30 Username = config.documentElement.getElementsByTagName("username")[0].childNodes[0].data
31 Password = config.documentElement.getElementsByTagName("password")[0].childNodes[0].data
32
33 server = xmlrpclib.ServerProxy("http://livejournal.com/interface/xmlrpc")
34 last = ""
35 while True:
36     r = server.LJ.XMLRPC.syncitems(dochallenge({
37         'username': Username,
38         'ver': 1,
39         'lastsync': last,
40     }, Password))
41     #pprint.pprint(r)
42     if len(r['syncitems']) == 0:
43         break
44     for item in r['syncitems']:
45         #print item['item']
46         if item['item'][0] == 'L':
47             if not os.access("archive/"+item['item'], os.F_OK):
48                 try:
49                     e = server.LJ.XMLRPC.getevents(dochallenge({
50                         'username': Username,
51                         'ver': 1,
52                         'selecttype': "one",
53                         'itemid': item['item'][2:],
54                     }, Password))
55                     writedump(item['item'], e['events'][0])
56                 except xmlrpclib.Fault, x:
57                     print "Error getting item: %s" % item['item']
58                     pprint.pprint(x)
59         last = item['time']