摘要:点点博客备份XML通过DiandianToWordpress-beta.sh(文末给出)搬家Wordpress博客

本人曾使用过点点轻博客,也深知像点点博客,Lofter博客导出的XML文件不能直接导入到wordpress博客中的烦恼

当时也没什么办法,只能指望官方良心,别莫名其妙的关闭博客,最近接触shell,研究了大概两三天的时间,最浪费时间的就是精简wordpress的XML文件,因为导出的XML文档很多标签,而有些标签去掉,则会导致导入时失败,所以很消耗时间,不过最终还是搞定了搬家的问题

首先说一下这个shell脚本的特点,因为是一个shell尝试,所以转化仅仅是最基本的,大神路过轻吐槽

  • 可以把点点“文字”导入(其它类型暂时不可)
  • 可以保留标签
  • 可以保留文章日期(精确到天,但发布时间都为20:00:00)
  • 图片可以正确显示(依然保存在点点,不过生成ImagsURL列表可批量下载保存到本地)
  • 文章ID不可保存(无损搬家看来有点难)

后面会解释为什么有些没有实现

如果你需要解决眼下的燃眉之急,可以直接到文章后面复制脚本并使用,不过建议看看博主的探索过程,以便今后遇到同类问题能快速解决


首先介绍下基础知识

(1)XML文件

简单来说,就是一种“可视话”的数据保存文档,没有样式,通过嵌套的标签来存储数据,你可以使用任何文本编辑器来查看它的内容,各种程序也可方便的使用其中的数据。你可以花十多分钟来看看教程(W3school),看看前面的基础就足以应付后来的工作了

点点备份的XML文件标签及数据结构和Wordpress博客备份的不一样,所以互相的不能识别,不能导入,我们做的工作很简单,就是把标签进行转换,然后就能成功导入Wordpress博客

(2)SHELL脚本

本文假设你知道shell脚本并且已经会执行脚本

那么多的标签,如果手工改动,相信是件可怕的事情,即使是使用编辑器的全局替换,相信也是件浪费时间的事儿

那么作为批处理,SHELL的强大就无与伦比了。

(3)点点和wordpress的XML备份文件结构

点点博客XML文件Tag和结构(点击放大)

Wordpress博客XML文件Tag和结构(点击放大)

简单的说明下特点,点点博客的Post标签中保存文章,而Wordpress是item标签,类似的还需要替换一些标签,结构不同的地方体现在图片的保存,点点博客的图片单独保存在Images中,文中的图片保存的是ID,而后根据ID到images里找对应的URL,转化得到图片地址,而wordpress中的文章直接保存的就是图片URL。由于博主刚接触shell,了解的也是最基本的,但是感觉应该可以通过脚本自动转化,所以尝试探索。


解释下未实现的功能

博主的shell水平,简单的说,连简单的替换都需要通过搜索引擎才能写的出来。有两句话关于shell的话,很有意思。

  • Where there is a shell, there is a way
  • 一句shell代码等同于百句C语言代码

有点夸张,不过确实说明了shell的强大。说这么多关于shell的,其实没别的意思,因为后面的脚本是四处拼凑,请教他人才整理出来的,所以懂shell的人看见一定会受不了一些实现方式,编码风格等等,现在我也没那实力更改,所以就只能这样了

之所以分享出来,一是可以给需要的人使用,二是因为这是自己第一次用shell解决实际问题,很高兴,值得纪念

而文章的标题“(一)”也代表博主会通过不断的探索,后续写出高效的代码,实现更多的功能。

在此解释一下几个功能无法实现的原因:

  • 由于时间精力有限,没能对比“图片”,“声音”的格式,后续更新会补上的
  • 时间无法显示发布时间是因为点点保存时间用的是一串数字“1390136672987”分析了一阵,才弄明白前十位“1390136672”是从1970-01-01年开始到日志发布的秒数,经过转化是2014-01-19后面的三位一定是表示小时和分钟了,但是由于当时的主要精力没放在这,而且算了半天也没搞懂后三位是怎么表示的,所以只得把时间缺省为20:00:00,这也是无奈之举
  • 运行脚本可以生成图片链接表,可供下载,不过下载回来的图片是经过点点压缩的尺寸。不是原图,以后会添加原图下载的
  • 点点文章的格式是http://域名/post/2014-01-28/40060879713,后边的“40060879713”就是文章ID,wordpress默认的链接是/?p=ID所以最开始我是打算把ID信息也转化,搬到wordpress不会出现搜索引擎收录访问不了的情况,但是由于点点的ID数字过大,导致导入到数据库中的话,会溢出,破坏数据库。所以我不知道如何处理。知道的朋友一定要相告哦!

该交代的都交代了,下面是脚本


关于脚本的使用和说明

DiandianToWordpress-beta.sh文件保存的是shell程序
[toggle title="点击展开DiandianToWordpress-beta.sh"]

[shell]
#!/bin/bash

cp diandian_backup.xml diandian.xml
#分割原始文件
sed -n '/<Images>/,/<\/Images>/p' diandian.xml > IDtoSrc.txt
cp IDtoSrc.txt ImagesURL.txt
sed -i '/<Images>/,/<\/Images>/d' diandian.xml

#处理IDtoSrc.txt格式
sed -i '1d;$d' IDtoSrc.txt
sed -i '/<Image>/d' IDtoSrc.txt
sed -i '/<\/Image>/d' IDtoSrc.txt
sed -i 's/\s\s\s\s\s\s\s\s\s\s\s\s//' IDtoSrc.txt
sed -i ':label;N;s/\n/=/;t label' IDtoSrc.txt
sed -i 's/<Id>//;s/<\/Id>=<Url>/=/g;s/<\/Url>=<Id>/\n/g' IDtoSrc.txt
sed -i 's/<\/Url>//g' IDtoSrc.txt

#根据IDtoSrc.txt内容替换图片正确地址
awk 'NR==FNR{split($0,a,"=");b[a[1]]=a[2];next}{for(i in b){gsub(i,b[i],$0)};print $0}' IDtoSrc.txt diandian.xml > tmp.txt
sed -i 's/libdd/papaapp/g' tmp.txt
sed -i 's/id=/src=/g' tmp.txt

#保存图片链接到ImagesURL.txt
cat ImagesURL.txt | grep "<Url>" > I.txt
sed -i 's/\s\s\s\s\s\s\s\s\s\s\s\s//' I.txt
mv I.txt ImagesURL.txt
sed -i 's/<Url>//g;s/<\/Url>//g' ImagesURL.txt

#复制点点博客中的有用数据到f.txt中
#复制wordpress头到点点XML中
cat WP-head.txt  > f.txt
echo "<channel>" >> f.txt
#复制<BlogInfo>并修改
sed -n '/<BlogInfo>/,/<\/BlogInfo>/p' tmp.txt >> f.txt
sed -i '/<BlogInfo>/d;/\/BlogInfo/d' f.txt
sed -i 's/BlogName/title/g' f.txt
sed -i '/<BlogUrl>/d' f.txt
sed -i 's/BlogDesc/description/g' f.txt
sed -i '/<BlogPic>/d' f.txt
echo "<wp:wxr_version>1.2</wp:wxr_version>" >> f.txt

sed -n '/<Posts>/,/<\/Posts>/p' tmp.txt >> f.txt
sed -i '/<Posts>/d;/\/Posts/d' f.txt
sed -i 's/<Post>/<item>/g;s/<\/Post>/<\/item>/g' f.txt

#处理item内数据
sed -i '/<Author>/a\<dc:creator>admin<\/dc:creator>' f.txt #查找并在下行添加数据
sed -i '/<Author>/d' f.txt
awk -F'[<>]' '/<CreateTime>/{$0=sprintf("<%s>%s<%s>",$2,strftime("%F",substr($3,1,10)),$4)}1' f.txt > f.xml
mv f.xml f.txt
sed -i 's/<CreateTime>/<wp:post_date>/g' f.txt
sed -i 's/<\/CreateTime>/\ 20:00:00<\/wp:post_date>/g' f.txt
sed -i '/<ModifiedCreateTime>/d' f.txt
sed -i '/<Id>/d' f.txt
sed -i '/<PostType>/a\<wp:post_type>post<\/wp:post_type>' f.txt
sed -i '/<PostType>/d' f.txt
sed -i '/<PostId>/d' f.txt
sed -i '/<wp:post_type>/a\<wp:status>publish<\/wp:status>' f.txt
sed -i '/<Privacy>/d' f.txt
sed -i '/<Source>/d' f.txt
awk -F'[<>]' '/<Tag>/{"echo -n \042"$3"\042 | od -An -tx1 -w30 | tr \047 \047 %" | getline s;printf "<category domain=\"post_tag\" nicename=\"%s\"><![CDATA[%s]]></category>",s,$3}1' f.txt > f.xml
mv f.xml f.txt

#Tag标签更改后原标签不能删除,不知为何,就现这样吧,不影响导入
sed -i '/<Tags>/d;/<\/Tags>/d' f.txt
sed -i '/<CreativeCommonsSetting>/,/<\/CreativeCommonsSetting>/d' f.txt
sed -i 's/Title/title/g' f.txt
sed -i 's/<Text>/<content:encoded><\!\[CDATA\[/g' f.txt
sed -i 's/<\/Text>/\]\]><\/content:encoded>/g' f.txt

#替换符号
#sed -i '/<content:encoded>/s/&gt\;/\>/g' f.txt
#sed -i '/<content:encoded>/s/&lt\;/\</g' f.txt

echo "</channel>" >> f.txt
echo "</rss>" >> f.txt

mv tmp.txt c.xml
mv f.txt finish.xml
[/shell]

[/toggle]
WP-head.txt保存的是wordpress的XML文件相关说明,没有则会保存
[toggle title="展开WP-head.txt"]

[code]
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
[/code]

[/toggle]

使用方法:你需要在linux下操作,把主shell和WP-head.txt(名称不可变)内容复制并保存在本地

然后把点点的XML备份文件改名为diandian_backup.xml放在同一文件夹

运行主shell,会自动生成三个文件,IDtoSrc.txt,ImagesURL.txt,finish.xml

IDtoSrc.txt 的内容是点点文章图片ID对应的URL转化

ImagesURL.txt 的内容是点点文章图片的URL,可方便批量下载,再次提示(是经点点压缩后的)

finish.xml 就是转化后的文件了,快导入到博客看看效果吧~^_^

这就是前些天的探索和实践了,一不小心就写了这么多,有些复杂的内容转换,一条命令就可以搞定,不尽感叹shell的强大。

SHELL!I COME!

[探索]点点轻博客搬家到WordPress(一)的更多相关文章

  1. chanme的博客搬家了!

    一直以来都想自己租一台服务器,买个域名做一个自己的博客,但是由于时间和知识的关系,以前还不太知道怎么搭一个博客.终于我在上个礼拜成功的迈出了建站的第一步,然后陆陆续续的也将一些后续的步骤做好了.所以今 ...

  2. 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy

    目录 目录 前文列表 扩展阅读 Flask-Admin BaseView 基础管理页面 ModelView 实现效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写 ...

  3. 博客搬家了,欢迎访问 http://blog.csdn.net/yinpengxiang/

    博客搬家了,欢迎访问 http://blog.csdn.net/yinpengxiang/

  4. 博客搬家啦。请访问我的新底盘www.boyipark.com

    博客搬家啦.请访问我的新底盘 www.boyipark.com

  5. 博客搬家到CSDN:http://blog.csdn.net/yeweiouyang

    博客搬家到CSDN:http://blog.csdn.net/yeweiouyang

  6. 博客搬家 https://hanwang945.github.io/

    博客搬家 https://hanwang945.github.io/

  7. 博客搬家一下到CSDN

    博客搬家一下到CSDN:http://blog.csdn.net/weixin_33409246

  8. 博客搬家了,新域名dinphy.wang

    博客搬家了,新域名      dinphy.wang 博客搬家了,新域名      www.dinphy.wang 博客搬家了,新域名      dinphy.wang 博客搬家了,新域名     w ...

  9. 全球最大轻博客APP确认被苹果下架!

    读 苹果确认了App Store下架轻博客应用Tumblr,主要原因是,该应用没有很好的过滤掉一些成人内容(成人内容多到夸张),这严重影响了未成年人. 事实上,iPhone和iPad版Tumblr应用 ...

随机推荐

  1. Unity项目优化--开发项目的小经验

    原文地址:http://blog.csdn.net/liang_704959721/article/details/8548619 我们主要使用 3dsmax2010 进行制作,输出 FBX的类型导入 ...

  2. ABP项目中的使用AutoMapper

    AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMa ...

  3. remine chart2安装

    http://blog.csdn.net/kufeiyun/article/details/9213911

  4. NPOI以及在ASP.NET MVC中的使用

    NPOI以及在ASP.NET MVC中的使用 1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些 ...

  5. Android项目外接高德地图代码混淆注意事项

    如今好多项目中都加入了第三方jar包,可是最大的问题就是打包的时候代码混淆报错,下面是高德地图混淆报错解决方式: 在proguard-project.txt中加入例如以下代码: -libraryjar ...

  6. hdu 4864 Task---2014 Multi-University Training Contest 1

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others)    M ...

  7. Android 4.4(KitKat)表格管理子系统 - 骨架

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/37737439 窗体管理系统是Android中的主要子系统之中的一个.它涉及到App中组件的 ...

  8. Oracle 修改字符集

    出现ORA-12899,是字符集引起的,中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,而源dmp文件字符集是ZHS16GBK库里倒出来的数据,现在要导入到目标字符集为UTF-8的库里,所 ...

  9. 运营商网络採用SDN所面临的挑战(一)

    运营商网络採用SDN所面临的挑战(一) Babak Samimi 将数据平面.控制平面与管理平面分隔开来所实现的软件定义网络(SDN)改善了OPEX及CAPEX,而且使得网络资源的集中调配和管理成为可 ...

  10. PeopleRank从社交网络中发现个体价值

    阅读导读: 1.什么是PeopleRank? 2.PeopleRank和PageRank有什么差别? 3.PR分析微博数据时,怎样对微博单个账号评分? 4.R语言怎样递归计算矩阵特征值? 5.怎样计算 ...