用emacs(org2blog)发布cnblogs

用emacs(org2blog)发布cnblogs,可以添加 删除 修改,但是tag 分类有问题

经过修改了org2blog的部分代码之后,就可以再cnblog发布了.

基本的思想是这样

根据http://www.cnblogs.com/atskyline/services/metaweblog.aspx 提供的API,删除掉一些在org2blog代码中一些不可用的代码和参数,因为org2blog是为wordpress设计的. 按照我的方式修改之后,也许支持原来的BLOG可能会有一些问题,这个具体的我就没有测试了.

  1. 下载安装org-mode的最新版本

具体参见:http://orgmode.org/

  1. 下载安装org2blog

具体参见:https://github.com/punchagan/org2blog

3.修改org2blog.el

把320到333行的内容删去,因为这两个变量需要的方法cnblogs不支持

org2blog/wp-tags-list
(mapcar (lambda (tag) (cdr (assoc "slug" tag)))
          (wp-get-tags org2blog/wp-server-xmlrpc-url
                       org2blog/wp-server-userid
                     org2blog/wp-server-pass
                       org2blog/wp-server-blogid))
org2blog/wp-pages-list
(mapcar (lambda (pg)
          (cons (cdr (assoc "page_title" pg))
                (cdr (assoc "page_id" pg))))
          (wp-get-pagelist org2blog/wp-server-xmlrpc-url
                           org2blog/wp-server-userid
                           org2blog/wp-server-pass
                           org2blog/wp-server-blogid)))

这样之后就可以使用org2blog/wp-login了

另外710行的 (org2blog/wp-create-categories (cdr (assoc "categories" post))) 也要删掉,也是因为cnblogs不支持 到这里还是不能使用org2blog/wp-post-buffer-and-publish 因为POST出去的信息结构式有问题的.还需要修改metaweblog.el

4.修改metaweblog.el

修改metaweblog-new-post函数 把95行到115行的内容删掉,因为里面的几个字段都不在cnblogsAPI的post结构中 这里值得一提的是那个dateCreated字段cnblogsAPI里面没有说这个字段是可选的, 但是用原本的方法又是不可用的,我神奇的发现把它删掉之后,cnblogs会自动使用当前时间. 请求高人指教这个什么用.另外在这段代码的下方有一段和catelogies有关的, 也许是这里的数组形式和cnblogs的不太一样,所以指定catelogies也是不可用的.暂时不清楚怎么修改

(member nil
        (name nil "mt_excerpt")
        (value nil ,post-excerpt))
(member nil
        (name nil "wp_slug")
        (value nil ,post-permalink))
(member nil
        (name nil "dateCreated")
        (dateTime.iso8601 nil ,post-date))
,(when post-tags
   `(member nil
            (name nil "mt_keywords")
            (value nil
                   (array
                    nil
                    ,(append
                      '(data nil)
                      (mapcar
                       (lambda(f)
                         `(value nil (string nil ,f)))
                       post-tags))))))

这样就可以完成org2blog/wp-post-buffer-and-publish操作了(要先登入)

同样的修改也针对metaweblog-edit-post函数来一次,这样就可以进行文章的修改了. 把308行到332(原行数)内容删除掉就可以

(member nil
        (name nil "mt_excerpt")
        (value nil ,post-excerpt))
(member nil
        (name nil "wp_slug")
        (value nil ,post-permalink))
(member nil
        (name nil "dateCreated")
        (dateTime.iso8601 nil ,post-date))
,(when post-tags
   `(member nil
            (name nil "mt_keywords")
            (value nil
                   (array
                    nil
                    ,(append
                      '(data nil)
                      (mapcar
                       (lambda(f)
                         `(value nil (string nil ,f)))
                       post-tags))))))

最后还有一个和删除文章有关的东西 在metaweblog-delete-post函数内 把360行的nil修改为"",或者任意字符串后就可以进行删除操作了. cnblogs似乎字段都不允许为空值..

5.配置org2blog

一下给出我的配置文件,没有什么特别的,当中的一些参数要改成自己环境的, 我修改了一下template因为不能设置tag和categories,其实日期也是不能应用到网上的,但是…先留着吧. 另外关于options的东西,我不是很清楚具体是做什么的,就暂时没有进行修改

(add-to-list 'load-path
              "~/.emacs.d/mylisp/org2blog")

(require 'org2blog-autoloads)

(setq org2blog/wp-blog-alist
    '(("atskyline-cnblog"
       :url "http://www.cnblogs.com/atskyline/services/metaweblog.aspx"
       :username "atskyline"
      )))

 (setq org2blog/wp-buffer-template
 "#+DATE: %s
 #+OPTIONS: toc:nil num:nil todo:nil pri:nil tags:nil ^:nil TeX:nil
 #+TITLE: 
 \n")

6.使用过程

可以直接使用org2blog/wp-new-entry 新建一个文章(过程会提示你登入,不然手动用org2blog/wp-login登入也可以) 写完文章后最好在本地保存一份,方便以后修改删除. 写完后,使用org2blog/wp-post-buffer-and-publish就可以发布了. 以后需要修改,在本地修改后也是使用org2blog/wp-post-buffer-and-publish更新. (千万不要改PISTID) 如果想删除文章的话,就是用org2blog/wp-delete-entry (这个删除是指删除网上的文章,本地的文件不会被删除)

7.已知的问题

因为cnblogs没有提供createCategories,tag的方法所以就没办法新建分类和使用标签了 另外可能是因为我设置不好dateTime和array的原因,所以我暂时没办法自定义时间和目录,希望等高手修改 刚刚又发现一个坑爹的问题,就是正文里面千万不要出现 #+TITLE: 单独一行的而且在行首的情况,不然会被认为说标题为空,就算文章开头已经指定了标题也没用,加src包围也没有用, 解决方法是在行首加一个空格

8.接下来的事

说实话,我对org-mode还不是很熟悉,在接下去的几天会再研究看看

我提供一个我已经修改好的代码下载,里面的具体代码可能和上面的说明不是完全一致,但是是可以使用的 http://files.cnblogs.com/atskyline/org2blog.7z

最后,关于版权的问题,我还是不能把几个版权方式弄清楚,如果以上操作涉及到版权问题,我会立即改正 org2blog本身是循序GPLv3.具体可以参见 https://github.com/punchagan/org2blog

你可能感兴趣的:(emacs)