3

上篇讲了Typecho博客搬家到SegmentFault上来,然后很多人就不答应了,非吐槽说为啥世界第一博客程序WordPress的教程没有!迫于压(wu)力(liao),特别放出WordPress迁移教程给大家。

  1. 首先下载安装并启用 JSON API 插件,在后台直接搜索JSON API第一个安装即可。
  2. 安装好插件之后打开你的博客并打开浏览器控制台,输入以下代码并回车执行:

    (function get(callback) {
    var posts = [];
    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)
    }
    (function g(page){
     $.get("?json=1&paged="+page, function(o){
       posts = posts.concat(o.posts.map(function(post){
         return {
             title: post.title,
             text: post.content,
             created: created: parseInt((new Date(post.date.split(" ")[0])).getTime()/1000),,
             tags: post.tags
         }
       }));
       if(page<o.pages) g(page+1);
       else callback(posts);
     });
    })(1)
    })(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);
    })

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(['1040000000089914']);
       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 = ['1040000000089914'];
                   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 粉丝

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