虽然Micolog提供了从WordPress文件导入日志的功能,但WordPress到Micolog的转换总不是那么完美,简单的来说,表现有二:
1,如果item中包含<title>*******.jpg</title>字样,导入自动中段。我也不知道为什么WordPress导出的xml文件中会存在这么怪的内容,又不是日志,纳闷。
2,图片无法导入。如果你日志搬家,从WordPress转换到Micolog,那么原来的图片怎么办?要么以静态文件形式上传到GAE,并建立好相应的路径,但如果文件太多,肯定会担心超过1000文件的限制。最好的办法当然是按照Micolog的格式,将所有图片导入到GAE的数据库中。
今天我们就来解决这两个问题,按照我的需求,用python写了一段code,运行后就可以将WordPress完美导入Micolog。我们先来将具体操作,然后讲原理。具体操作如下:
0,备份你的所有的WordPress的文件到本地(本工具主要用到上传的文件)。进入WordPress的后台,将所有日志导出为wordpress.xml。这两个在后面需要用到,所以在开始前请先处理完毕。
1,编辑app.yaml文件,配置remote_api路径,如下:(具体路径可以自行修改)。(当然,这里还包括了micolog的上传等,请自行解决,如果已经上传了micolog的,请初始化数据,并进入数据库中将除了blog数据外的所有数据删除。)
- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin
2,下载我的WordPress2Micolog.py文件,编辑该文件中的几个参数为自己的参数:
#这是应用程序ID
app_id='myappid'
#如果是本地处理,则将host改成你自己的url路径,如果直接在appengine上处理,则使用appspot.com
host = '127.0.0.1:8080'
#host = '%s.appspot.com' % app_id
#remote_api的路径
remoteurl='/remote_api'
#原有Wordpress的URL
wpurl = 'http://share.sharesh.cn'
#本地Wordpress的路径
wppath = 'E:\\PHPnow\\htdocs\\blog'
#WordPress.xml文件所在目录
xmlpath = 'E:\\PHPnow\\htdocs\\blog'
3,运行WordPress2Micolog.py文件(建议使用python2.5自带的IDLE运行,如果有错误还能看到具体问题所在),等待。此步骤主要是上传所有图片,并根据wordpress.xml文件生成micolog.xml文件,micolog.xml文件中图片的路径已经是micolog的路径了。
4,进入micolog后台,导入,选择刚才生成的micolog.xml文件,直接导入即可。补充几句:建议使用FireFox导入,不要使用IE导入;如果中途发生中断,则是GAE超时,在micolog.xml文件中找到导入的最后一个记录的item,将catalog、tag和已经导入的item项目全部删除,留下没有导入的item项目,保存文件,再次导入,直到完成即可。完成后建议在micolog后台的工具中重新建立一下文章链接。
下面说说思路:
看了整个流程也基本明白我的思路了吧,其实重要之处在于WordPress2Micolog.py,这个文件的作用是什么呢?主要完成三件事情:1,将xml文件中多余的item项目删除,以保证上传到micolog中没有问题;2,根据xml文件中的img和a,将所有图片上传到数据库;3,根据已经上传了的图片修正xml文件中的img的src和a的href路径。
所以我分成了两个function,第一个function就是wordpress到临时文件,将无效的item删除,并将所有图片上传到数据库中,第二个function是根据数据库中的图片生成新的有效的图片链接,并最终生成xml文件。
不过,工具也有问题的地方,由于我没有png和bmp等图片格式,所以我只判断了jpg格式的文件,在item的判断中仅仅判断了jpg,而在上传到数据库的时候呢,又是直接将类型定义为了image/jpeg。另外就是数据库中的name我设置成了原始的图片url,而不是jpg的名称。总的来说并不影响,如果你的情况特殊,那么请按照代码自行修改即可。
顺便测试了一下micolog导出wordpress的功能,发现wordpress完全可以通过,只是,图片和wordpress2micolog一样,无法直接下载并更新链接,看来以后我要是micolog导出到wordpress的话,还需要再写一个工具,my god。
一直没有发表日志,今天终于写上一篇来充充数。py的code写的很菜,如果看到我写的python觉得很好笑,请给出一定的指点,但确实让我这样的小菜菜也花了我不少时间,所以感叹,写code真是一件痛苦的事情那。
最后说一下我测试通过的情况,提供给大家作参考:wordpress.xml:1.75M;post:144;jpg file:799;micolog.xml:486K。本地测试通过,用时大概而是多分钟。而正式上传到GAE的过程中,失败了好几次,不过好在我分成了两个function,所以wp2temp的function完成以后如果temp2micolog的function失败,那么把wp2temp的function注释掉,让其直接进入到temp2micolog的function即可。这里需要说明的是,如果wp2temp的function中途失败,请务必到数据库中将所有的图片删除掉,不过删除后不知道为什么数据库竟然占着空间不变小,郁闷,这个就下次再考虑吧,但也看来,我的程序还是需要改进的,至少能够断点续传吧。最终的测试结果是:上传799个图片花费40分钟;重写micolog.xml花费60分钟。总共花费100分钟,够让人晕的,看来还真要改进改进。
最后的最后:感谢step1
RoverTang@罗孚传说
E-mail:65985498[at]qq.com
微博/微信:rovertang