现在SegmentFault博客做的越(yue)来(lai)越(yue)棒(che),自己的博客也久不更新了,所以想着干脆就把博客搬过来吧,也省得自己去维护它。现在问题来了,如何迁移博客到SF来呢?啊,你不会啊?那我来教你好叻。
- 首先下载安装一个我写的插件,插件下载地址:百度云 | BOX | Github。
-
安装好插件之后打开你的博客并打开浏览器控制台,输入以下代码并回车执行(不懂可以看截图):
(function get(callback) { callback = callback || new Function; try{$.get}catch(e){ var script = document.createElement("script"); script.src = "http://lib.sinaapp.com/js/jquery/2.0.3/jquery-2.0.3.min.js"; script.onload = function() {return get(callback)} document.body.appendChild(script) } $.get("/api/count", function(o){ if(o.status!=200) return console.error("JSON插件错误请检查"); $.get("/api/posts?pageSize=%d".replace("%d", o.data.counts), function(o) { if(o.status == 200) { callback(o.data.map(function(post) { return { title:post.title, text:post.text, tags:post.tag.map(function(t){return t.name}), created:post.created } })) } else console.error("获取文章出错"); }) }) })(function(posts) { var posts = "var posts = "+JSON.stringify(posts); var ta = $("<textarea></textarea>").css({width:"100%", height:"500px"}).val(posts); ta.onfocus = function() {this.select()}; $("body").html("请复制文本框内的所有内容:<br>").append(ta); console.log("恭喜,所有文章内容均已经复制到粘贴板中(此功能仅针对Chrome),如果没有请自行复制页面文本框内的所有内容"); if(copy) copy(posts); })
- 如果代码执行成功的话,控制带会提示你
恭喜,所有文章内容均已经复制到粘贴板中(此功能仅针对Chrome),如果没有请自行复制页面文本框内的所有内容
,如果没有成功会有相应的错误提示。非Chrome浏览器需要自行按照提示复制页面内文本框的内容,Chrome浏览器可跳过此步骤。 -
打开 http://segmentfault.com/write 页面,保证SF账号已登陆。同时开启浏览器控制台,粘贴刚才复制的内容回车执行后复制以下代码继续回车执行:
(function sync(posts) { var bid = $("button[data-bid]").data("bid"); function postArticle(post, i) { getTags(post.tags, function(tags) { $.post("/api/article", {title: post.title, text: post.text, blogId: bid, tags: tags, created: post.created, do: "post", weibo: 0}, function() { console.log("《%title%》已经尝试发布".replace("%title%", post.title)); if(posts.length-1!=i) { setTimeout(function() { postArticle(posts[i+1], i+1); }, 4000); } else return console.log("文章已经全部同步成功,但不保证中间有遗漏。本功能由 公子 倾情制作,有问题欢迎反馈交流。"); }); }) } function getTags(tags,callback){ if(tags.length==0) return callback(['1040000000089836']); var res = []; (function q(tag, i) { $.get("/api/tag?do=search&q="+tag, function(o) { if(!o.status && o.data.length>0) { res.push(o.data[0].id); } if(tags.length-i!=1) q(tags[i+1], i+1); else { if(res.length == 0) res = ['1040000000089836']; callback(res); } },'json'); })(tags[0], 0) } console.log("总共有 %d 篇文章需要发布,正在进入发布通道...".replace("%d", posts.length)); return postArticle(posts[0], 0); })(posts)
- 至此你的文章已经全部同步过来了,有问题欢迎留言。
注:
- 以上代码仅在Firefox和Chrome浏览器中测试过,其他浏览器不保证无BUG。
- 由于SegmentFault的文章标签必须是SF标签云中存在的(不存在的需要自己创建),为减少麻烦,文章中不存在的标签我就直接过滤掉了。
- 由于SegmentFault有Spam检测机制,所以我将文章发布时间调整在4秒一篇,如果文章数过多的同学还请耐心等待一下。
- 以上代码仅仅只是纯粹将你的文章内容搬家过来,不保证你的文章在SF中解析正常。
SegmentFault搬家系列文章:
敬请期待下一篇:《公子教你快速把Jekyll博客搬家到SegmentFault》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。