zoukankan      html  css  js  c++  java
  • [探索]点点轻博客搬家到WordPress(一)

    摘要:点点博客备份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和结构(点击放大) DianDianxml Wordpress博客XML文件Tag和结构(点击放大) WordpressXML 简单的说明下特点,点点博客的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/ssssssssssss//' IDtoSrc.txt sed -i ':label;N;s/ /=/;t label' IDtoSrc.txt sed -i 's/<Id>//;s/</Id>=<Url>/=/g;s/</Url>=<Id>/ /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/ssssssssssss//' 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 42"$3"42 | od -An -tx1 -w30 | tr 47 47 %" | 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!
  • 相关阅读:
    火狐 http://localhost:8080自动跳转到http://www.localhost.com:8080
    Windows下搭建PHP开发环境
    对帝国cms、dedecms、phpcms等负载测试总结
    System.ExecutionEngineException: Attempting to JIT compile method System.Linq.Enumerable
    SQLCMD Mode: give it one more chance
    transition状态下Mecanim动画的跳转
    Lua库-bit32库
    C语言输入输出函数总结
    Lua库-table
    Lua中的数据结构
  • 原文地址:https://www.cnblogs.com/ishell/p/4240134.html
Copyright © 2011-2022 走看看