posts - 24,  comments - 62,  trackbacks - 0

Livespace要在明年关闭了,搭建了micolog在google app engine,方便以后自己挣腾。上次用生拙的C#写个live space到livespace的博客迁移工具,使用metaweblog接口,见 Live Spaces新旧空间迁移方法 。上次使用getRecentPosts函数依次取得最近的一篇,然后存档后发表后,删除。这次通过正则表达式分析网页内容,获取到postid后,再使有getPost接口获取文章,再进行发表,而且这次使用python写成的。

metaweblog的内容不再叙述,其实这个协议写得真不怎么样,没有检索文章的接口,要让人硬生生地从网页中分析出postid来。因此解析postid是这个迁移工具的重要内容。

#获取www.cppblog.com样式的postid列表
def getCppblogId(blog):
url='http://www.cppblog.com/'+blog['user']+'/default.html?page=1&OnlyTitle=1'
urlfile = urllib.urlopen(url)
html = urlfile.read()
#获取存档页码数
pattern = re.compile(r'http://www.cppblog.com/'+blog['user']+'/default.html\?page=(\d+)&OnlyTitle=1')
pages = [1]
pages += pattern.findall(html)

ids=[]
for p in pages:
url= 'http://www.cppblog.com/'+blog['user']+'/default.html?page='+str(p)+'&OnlyTitle=1'
urlfile = urllib.urlopen(url)
html = urlfile.read()
pattern = re.compile(r'http://www.cppblog.com/'+blog['user']+'/admin/EditPosts.aspx\?postid=(\d+)')
id = pattern.findall(html)
ids += id
return ids

利用存档页面得到总共页数(或许页数多了或有问题,未验证),然后在每页解析出postid,cppblog较简单

def getLivespaceId(blog):
ids=[]
url=blog['user']+'.spaces.live.com/blog/'
i=0
while True:
url='http://'+url
urlfile = urllib.urlopen(url)
html = urlfile.read()
#print html
pattern = re.compile(r'entrycns!'+'([a-zA-Z0-9!]*)')
id = pattern.findall(html)
ids += id
pattern = re.compile(blog['user']+'.{1,50}pagedir=Next[^"]*')
urls = pattern.findall(html)
i=i+1
if len(urls) ==0:
break
url = unescape(urls[0])
return ids

live space没有总共的页数,只能一直next下去,发现没有next按钮了就停止,在每页再解析出postid来,unescape是自定义函数,目的是将html编码转换为像!等符号。

在迁移post时出现未micolog中定义的目录(category)会出错,因此迁移工具里如果碰到未定义过的类别,会自动舍弃掉。因此在使用 时需要在micolog里定义原先blog的类别,以致不会出现目录丢失的现象。此迁移工具在python2.5下完成,只要在源码中修改中开头的 srcBlog和dstBlog定义里的用户名,密码,webapi即可使用。源码中还实现BlogXML类,用于存档为xml格式,但未用于主程序中。

迁移工具源码
posted on 2010-11-08 20:55 len 阅读(1568) 评论(0)  编辑 收藏 引用 所属分类: IT技术

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(4)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜