Mathematica在WordPress搬家中的运用。。
标题想了半天,也不知道用什么好。。就这样了。。
其实之前在搬家过来第一篇博文中提到过这么一回事,说要写一篇,然后最近写Euler Project写傻了,把这事给忘了。。orz。。。
其实也就屁大点事,旧博客那边很多资源(歌&图片那些)都是中文命名的,尤其很多图表我都是在Matlab里面生成,然后QQ截图的,所以一般图片名称就是“QQ截图20131021213122.png”这种,然后用了个方法把旧站那边的图片爬下来后,传上这边的Wordpress,居然失败了一片,研究了一下,发现 WordPress里面URL不能有中文,囧,考虑到图片超多,1200+张,不可能自己手改,于是乎,就随手写了个Mathematica小段代码,功能就是找出文章中所有旧站的URL,先将其重命名,比如说是:QQ截图20131021213122.png就变成QQjietu20131021213122.png,然后再将博文中所有的URL链接改了,比如说将
kylen314.blog.com/files/2013/10/QQ截图20131021213122.png
变成:
kylen314.com/wp-content/uploads/2013/10/QQjietu20131021213122.png
首先转换拼音就是用很久之前写过的这个文件;然后利用txt的查找替换功能将其改成下面这个样子,这样很适合用Mathematica的Table导入:
阿啊 a 哎哀唉埃挨皑癌矮蔼艾爱隘碍 ai 安氨鞍俺岸按案胺暗 an 肮昂盎 ang 凹敖熬翱袄傲奥澳懊 ao 八巴叭扒吧芭疤捌笆拔跋把靶坝爸罢霸 ba 白百佰柏摆败拜稗 bai 扳班般颁斑搬板版办半伴扮拌绊瓣 ban ...
然后就是下面这段接口读取这个文件来翻译:
pinyin = Import["pinyin.txt", "Table", CharacterEncoding -> "CP936"]; findpinyin[hanzi_, pinyin_] := Block[{}, k = Select[pinyin, Length[StringCases[#[[1]], hanzi]] >= 1 &]; If[Length[k] != 0, k[[1, 2]], hanzi] ] fanyi[str_, pinyin_] := StringJoin[findpinyin[#, pinyin] & /@ Characters[str]]
调用fanyi这个函数就可以把“截图”变成“jietu”了;
然后接下来我一直干的事情就是把要转换的博文的html复制到一个文件ori_blog.txt中,用Mathematica读取:
blogtext = Import["ori_blog.txt", "text", CharacterEncoding -> "CP936"];
然后用正则表达式找出这里面的URL:
pictxt = Union[StringCases[blogtext, RegularExpression[ "http://kylen314.blog.com/files/((?!http://).)+?\\.(jpg|gif|png|\jpeg|bmp|mp3)"]], SameTest -> (StringMatchQ[#1, #2] &)]
然后在我爬下来的全部图片歌曲里面,将这片文章里面用到的资源,也就是上一行的返回结果,复制出来到一个叫做pic的文件夹,当然这中间还包括拼音重命名的过程:
CopyFile["F:\\建站图片\\" <> #, "pic\\"<>fanyi[#, pinyin]] & /@ (Last[#] & /@ (StringSplit[#, "/"] & /@ pictxt));
然后就可以直接把这部分图片和歌曲上传到博客里面去了;这样就保证了这一些东西的URL里面年份和月份和旧博客那边一样;
之后就是替换博文里面所有的URL:
newblog = StringReplace[blogtext, Function[kk, Thread[kk -> Table[StringCases[kk[[i]], "http://kylen314.blog.com/files/" ~~ (year:DigitCharacter..) ~~ "/" ~~ (month : DigitCharacter ..) ~~ ___ -> "http://kylen314.com/wp-content/uploads/" ~~ year ~~ "/" ~~ month ~~ "/"] <> fanyi[#,pinyin] &@(Last[#] &@(StringSplit[#, "/"] &@kk[[i]])), {i,1, Length@kk}]]][pictxt]];
反正上面代码乱七八糟一堆,所做的事情就是利用正则表达式提取出年月日,文件名等信息,然后构造出各个URL的替换规则{A1->B1,A2->B2,…}之类的,然后直接调用StringReplace替换掉原博文就是了;
唯一一点需要注意的是,以前的博客里面有一些Mathematica识别不了的字符,比如α之类的,这种需要专门再转一下:
反正就是再运行一下下面这个语句:
newblog = StringReplace[newblog, {"ꆰ" -> "\"", "ꆱ" -> "\""}];
可能上面的非法字符在这篇文章里面看不清,在Mathematica里面这个符号是这样子的:
嘛,最后一步就是将博文导出到新的文件中,复制到Wordpress里面就是了:
Export["new blog.txt", newblog, CharacterEncoding -> "UTF-8"];
嘛,这篇算给我水玩了,可以睡觉了~
其实这个方法根本不实用,因为好像真正会的人,估计会有别的方法,比如直接操作数据库(风险略大,而且我不懂),或者将来(或现在)有插件;
就算都不是,那么大部分人也不会选择用Mathematica这么蛋碎的方法来搞这个。。。虽然思路上完全可以用任何一门别的语言来完成。。。
所以这个方法算是。。。永远都不会有人再用得到了吧。。。【至少我不希望我会再用这段代码。。。】
【完】
本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com
然后最后是想表达博客移植还是文件名转换?
就是博客搬家的时候把文件名转换后替换掉原有的。。。
自从博客搬家出现中文名图片不能读取的问题(文件名乱码)后就再也不敢上传中文名文件了
搬了之后肯定不敢再用了。。虽然经常还是会脑子短路没仔细检查就传上来了。。
呵呵呵 ,其实也就是太麻烦了
是很麻烦的说,但是我到现在也没有找到什么好方法。
嗯,就搬家不喜欢
主要是以前那种博客虽然是基于wordpress,但是你要搬家只能导出一个xml文件。。。现在的话,搬家还是相对比较便捷的。。
可以转数据库的吧
以前在blog.com那种地方搭的博客,不行的,export只有xml文件。。其实xml也没啥问题。。反正wordpress可以导入,只是上面说的那个中文名问题还有需要另外想办法把资源爬下来而已。。
那倒是
全站镜像,自然所有的资源都下来了
好强大。不过我记得有专门的插件的
你是指中文支持?
中文本身就支持:http://test.leniy.org/?attachment_id=5594我是指的自动把资源的中文名变成拼音的插件。我记得之前看到过,你可以去搜搜
URL本身支持带中文的?!!我查过好象不行。。为了一劳永逸我已经全部改了;以后也是乖乖用英文。。插件不想装太多。。而且我直觉上觉得这个插件不难,搞不好可以自己写代码实现。。
你是说url啊,这个是不支持的,但是中文名的附件支持,就如我上面提供的那个附件一样。另外批量转换插件的话,用一次卸载就可以了
唉,之前刚刚搬站,问题多多,只能用自己能想得到做得出的方法来实现。。反正以后应该不会有这个问题了。。
恩,这种问题也只会出现一次
能用ascii实现的,不用utf8,能用utf8实现的,不用GB2312
转换不难,麻烦的是汉字到拼音的对应表。所以有现成的就不用自己写了
我的博客启用了23个插件,里面只有6个是我自己写的,剩下的全部是别人的
这个应该是移植,不过使用的方式蛮高洋次的
因为不懂别的方法。。
真够折腾的
是折腾。。。但是我也没找到什么好方法。。到现在也还没有。。。
没搬过家,也不敢搬
还是外面一个图床好,搬家完全不用更改哦
以前那个博客是在blog.com上面的,虽然他平台是wp,但是实际上他提供给用户的只有一个wp-admin的登录入口,ftp啊数据库啊什么的全都没有,所以图床不好弄,而且搬家图片资源还要自己导出。。
嗯。。我倒是买的VPS,全部自己设定。。
嗯,用虚拟主机或VPS的搬家就基本不会有啥问题了,ftp和数据库一导出,啥都解决。【以前不懂,觉得用免费的平台写博客挺方便的啊。。根本没想到将来自己会想买主机做博客和搬家这种事。。。
嗯,我以前也是博客大巴,最后发现各种麻烦啊!