7

现在SegmentFault博客做的越(yue)来(lai)越(yue)棒(che),自己的博客也久不更新了,所以想着干脆就把博客搬过来吧,也省得自己去维护它。现在问题来了,如何迁移博客到SF来呢?啊,你不会啊?那我来教你好叻。

  1. 首先下载安装一个我写的插件,插件下载地址:百度云 | BOX | Github
  2. 安装好插件之后打开你的博客并打开浏览器控制台,输入以下代码并回车执行(不懂可以看截图):

       (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 Demo
Firefox Demo

  1. 如果代码执行成功的话,控制带会提示你恭喜,所有文章内容均已经复制到粘贴板中(此功能仅针对Chrome),如果没有请自行复制页面文本框内的所有内容,如果没有成功会有相应的错误提示。非Chrome浏览器需要自行按照提示复制页面内文本框的内容,Chrome浏览器可跳过此步骤。
  2. 打开 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 Demo

  1. 至此你的文章已经全部同步过来了,有问题欢迎留言。

注:

  1. 以上代码仅在Firefox和Chrome浏览器中测试过,其他浏览器不保证无BUG。
  2. 由于SegmentFault的文章标签必须是SF标签云中存在的(不存在的需要自己创建),为减少麻烦,文章中不存在的标签我就直接过滤掉了。
  3. 由于SegmentFault有Spam检测机制,所以我将文章发布时间调整在4秒一篇,如果文章数过多的同学还请耐心等待一下。
  4. 以上代码仅仅只是纯粹将你的文章内容搬家过来,不保证你的文章在SF中解析正常。

SegmentFault搬家系列文章

敬请期待下一篇:《公子教你快速把Jekyll博客搬家到SegmentFault》


公子
36.6k 声望7.5k 粉丝

额米那个陀佛,无量那个天尊!