博客转移记(1)——关于metaWeblog接口

本来想直接用网上的博客转移服务,无奈找了好几个,比如http://blogmover.redv.com,但是这家的Blogger写入插件好像坏了…… 又如maikr,这个要注册,而且还是windows程序…… 最后只好自己写一个,就当练练Python。 首先是读取原mblogger.cn上的。这个支持metaWeblog接口,试了一下,非常好用。基于Python这种脚本语言的灵活性,对象的方法能够动态生成(估计差不多就像perl里面有个函数能处理未定义的方法调用一样……),metaWeblog的接口直接就成了Python里面对象的方法。 首先,引用xmlrpclib,这个东西现在Python自带了。 接下来 server_uri = “http://computer.mblogger.cn/henryhu/services/metablogapi.aspx” sp = xmlrpclib.ServerProxy(server_uri) 这样就搞出来一个能够帮你进行xmlrpc调用的对象了。它有.system.listMethods()方法,还有.system.methodHelp(method)方法,不但能知道有哪些方法,还有使用说明…… 这个实在是很好用…… 随后 blogs = sp.blogger.getUsersBlogs(progname, username, password) 得到一个list,里面每个对象是个dict,就是一个blog。 这个dict里面的blogid,之后就用来代表这个blog了。blogName对应的博客标题。 for post in sp.metaWeblog.getRecentPosts(blogid, username, password, POST_LIMIT): 这个是metaWeblog的方法,获取最近的POST_LIMIT个帖子。自然你希望获取全部的话,取个什么99999之类的就行了…… 这个post就是个dict,里面有title(标题),description(内容),link(帖子链接),dateCreated(写作日期),categories(分类)。 前三个都是字符串。第三个就复杂点。 返回的这个格式,应该是XMLRPC的标准格式,但是Blogger不认,Blogger认datetime对象的isoformat()返回的格式。 datetime.datetime.strptime(post[‘dateCreated’].value,”%Y%m%dT%H:%M:%S”)+datetime.timedelta(hours=-8) 这样能够把它转换成datetime对象。之所以要后面减掉8小时,因为这里返回的是本地时间(UTC+8),而Blogger需要的是UTC时间,所以要-8。 categories是个list,每项是个字符串,就是分类。 后来搞了一天不成,第二天想着把Comments也移过来。 这个不是metaWeblog力所能及的了,只好直接抓网页了。 本来想把comment的内容提取出来用Blogger API的comment功能发上去。无奈这个comment功能目前只能用自己的帐号发comment,这个看上去就很不好看。后来想想,干脆直接把网页的评论部分处理一下,附在内容后面,还能保存原有风格,以及发送时间、发送人信息等。 httpold = urllib2.urlopen(post[‘link’]).read() 这样先把网页抓下来。 草稿也是返回的,而草稿会抓来一个错误网页。另一方面,在抓下来的网页中发现错误,我就认为这个是草稿——虽然这个像dirty hack,但是也能用用~ commentpart = comm_exp.search(httpold).groups()[0] newcommentpart = comm_re2.subn(“”,commentpart) 其中 comm_exp = …

Continue reading ‘博客转移记(1)——关于metaWeblog接口’ »

技术blog搬家

其实我有一个技术blog,但是没什么人去……原来架在mblogger.cn上,但是这个地方越来越缺乏管理,用户流失严重,就是懒得搬。话说这个也是我一开始写的blog。这个地方基于.Text平台,提供metaWeblog接口。我打算搬到blogger。在网上找了一下,有现成的博客搬家的地方。但是试了一下,都不能用……比如说,http://blogmover.redv.com/,这个地方能够读出原来的blog,但是写到blogger的模块出问题了……又如maikr,需要登录才能用,而网站挂了,于是注册不了……最后只好自己写一个搬家程序了……既然近期学习python,那么练一下也好。python自带xmlrpclib模块,能够和metaWeblog通讯。尝试了一下,metaWeblog的接口还真好用,不一会儿就能够读出blog了。话说python生产力就是高阿,随便弄一下就好了,有什么问题搜一下也能很快解决。如果…… 如果python不是用空格/缩进表示层次的话,那就更好了!然后去研究写到blogger的方法。这时候我发现,虽然metaWeblog基于blogger API,但是那是老的blogger API……新的Blogger被Google整合到了GData API框架里面,于是巨麻烦无比……Google的人们是不是太聪明了…… 总是觉得自己发明的东西比较好,不用现成的…… 然后弄出麻烦的东西,光了解就要不少时间……还好有python的gdata库,自带了访问blogger服务的样例。但是又有一个问题:貌似Blogger的GData访问方法被GFW掉了……只好改了,用SSL,又耗掉一堆时间……最后,折腾了一大堆,终于是把这个搬家程序写出来了……但是,最后用的时候碰见问题了: status 400Blog has exceeded rate limit or otherwise requires word verificationfor new posts COW! 这可怎么搬家啊……

22届创新大赛的计算机项目……

一等: 个性化网络消息发布监视器研究与实现:初中 实际上就是定期去抓网页,然后看上面有没有预先指定的文字…… 不过毕竟是初中么。 CoolerSE中文站点搜索引擎:高中 做了个搜索引擎,没问出来比Google/Baidu这种有什么好的。 二等: 特殊符号输入与管理系统:初中 我们在SSKZ做项目的时候,这位同学有时候也在。也就是一个应用吧,用来输入特殊符号。 移动存储设备快速运行及维护系统:高中 基本上就是一个备份软件么。 利用可移动驱动器序列号验证身份:高中 首先,这个东西已经有了。其次,这种东西的序列号是可以改的。另:这个东西的服务器是用Python写的,作者是搜索引擎那个项目的选手。搞Python的也是好同学~ 网络语音实时传输及音量电平计的研究:高中 这位同学说起话来很强,和我说“这个很难的”…… 我问他,QQ、MSN早就有这个了,你这个有什么好。他的理由是:QQ/MSN需要到服务器转发,比较慢,他这个是通过局域网直接传输过去的。他怎么知道QQ/MSN就不会直接传输…… 而且直接传输的技术成本一定低于服务器转发,所以他这个有什么好嚣张的呢…… 而且还不压缩,号称使用了“**缓冲队列”,就是环形队列么…… 基于网络硬盘创建小型网络服务器的实践:高中 网络硬盘原来有个小的ROM,里面有个Linux Kernel和一小部分应用,从而提供网络服务器功能。这位同学改了一下,让那个Kernel能够挂上硬盘后从硬盘继续启动(原来就是网络硬盘服务器,估计原来就能挂)。毕竟是摆弄Linux的好同学么~ 盲人寻物智能语音提示器:高中 就是你吼一声“钥匙”,钥匙那边会有反应。不清楚怎么做语音识别的,毕竟是个单片机么…… 要么是靠某种采样机制,不清楚精确度如何。 三等: 车队管理信息系统开发:高中 也是个应用。 基于文件系统的超级计算模块:初中 我怀疑这位同学不知道虚拟内存这种东西。 计算机局域网抓屏监视系统:高中 定期抓个屏,发出去。我还见过动态传输的…… 还记得去年还是前年的“Google泄漏网络摄像头”事件吧。 乘车刷卡手机:小学 把交通卡的核心剪下来,加个壳插在手机里…… 小学生做这个也不错。 智能自学五子棋下棋算法研究:高中 不清楚怎么会是三等的,按照展板,他用的是极大极小算法,这个是常见的博弈类问题算法,但是他用神经网络进行自主学习,虽然我对他在这样的情况下如何保持效率表示不解,但假如是真的话,怎么说也比那边搞语音传输的强吧…… 一种自动并行处理模型的建立及优化:高中 我不了解这个东西,有几人和我说这个东西是错的,而且据说有个教授到他们展台前面大批了一通。不作评论。 没看见什么实质上的创新,大概学生也只能这样了吧…… 本文仅代表个人观点,不得转载。

packages和ports的区别……

早上要编译gnomevfs,结果libORBits-2.so报告__res_state undefined。。。 很令人奇怪,后来想起来是用packages装的…… 干脆先删掉,然后到ports里面make install clean,再编译gnomevfs,结果就正常了…… 比较没有想法……后来发现packages安装py-libxml也有这个问题,packages装的在python里面没有这个模块…… 还是ports编译安装比较牢靠啊…… 但是ports实在太慢了……Old Blog Link: http://computer.mblogger.cn/henryhu/posts/60582.aspx