用emacs(org2blog)发布cnblogs,可以添加 删除 修改,但是tag 分类有问题
经过修改了org2blog的部分代码之后,就可以再cnblog发布了.
基本的思想是这样
根据http://www.cnblogs.com/atskyline/services/metaweblog.aspx 提供的API,删除掉一些在org2blog代码中一些不可用的代码和参数,因为org2blog是为wordpress设计的. 按照我的方式修改之后,也许支持原来的BLOG可能会有一些问题,这个具体的我就没有测试了.
- 下载安装org-mode的最新版本
具体参见:http://orgmode.org/
- 下载安装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还不是很熟悉,在接下去的几天会再研究看看
我提供一个我已经修改好的代码下载,里面的具体代码可能和上面的说明不是完全一致,但是是可以使用的 https://files.cnblogs.com/atskyline/org2blog.7z
最后,关于版权的问题,我还是不能把几个版权方式弄清楚,如果以上操作涉及到版权问题,我会立即改正 org2blog本身是循序GPLv3.具体可以参见 https://github.com/punchagan/org2blog