饭否消息备份Python脚本

使用API接口备份饭否消息为XML格式,Python3.0。
有人说API只能导出前3200条消息,其实是可以导出所有消息的,只不过用的参数不同而已。
导出为XML的缺点就是数据好大,我5700+消息导出来有10M。
另外还有一个问题就是饭否的bug了,导出的xml如果里面还有特殊unicode字符时会导致解析器抛异常,其实饭否输出的时候应该进行xmlencode一下的。
大概就是这样。下面是代码刷屏,过敏者请勿点击。

 
01.#!/usr/bin/env python
02.# -*- coding: UTF-8 -*-
03.from xml.dom import minidom
04.from urllib import request
05.  
06.#代理设置
07.#request.install_opener(request.build_opener(request.ProxyHandler(
08.#    {"http" : "http://192.168.60.250:8080"}
09.#)));
10.  
11.#用户名
12.user = "bearice";
13.  
14.def loadPage(id=''):
15.    url = "http://api.fanfou.com/statuses/user_timeline.xml?id=%s&;count=60&max_id=%s"%(user,id);
16.    print('LOAD:%s'%url);
17.    f = request.urlopen(url);
18.    dom = minidom.parse(f);
19.    f.close();
20.    return dom;
21.  
22.i=0;
23.children = loadPage().documentElement.getElementsByTagName('status');
24.out = open('fanfou.backup.xml','w',encoding='utf8');
25.out.write('<?xml version="1.0" encoding="utf8"?>\n<statuses>\n');
26.while (not len(children)<60):
27.    if i>0:
28.        children=children[1:];
29.    for st in children:
30.        i+=1;
31.        last=st.getElementsByTagName('id')[0].firstChild.data;
32.        out.write(st.toxml());
33.        out.write('\n');
34.        print("%d:%s"%(i,last));
35.    children = loadPage(last).documentElement.getElementsByTagName('status');
36.out.write('</statuses>\n');
37.out.close();

1 条评论:

不系舟 说...

请问fanfou到底怎么了?