Biaobiaoqi的博客

octopress第三方插件:博文同步工具syncPost

| Comments

为了增加外链等考虑,独立博客往往有将博文同步到其他博客社区的需求。自己人肉黏贴的方式笨拙、重复,对于程序猿而言,着实不可取。

我在 github 上找到了 syncPost 这个针对 octopress 的第三方工具,能够通过一些论坛提供的 metaWeblog 服务实现 octopress 最新一篇博文的同步提交。

这大概就是我要找的东西吧。不过,其中有些细节并不是我想要的:

  • 1.在本地配置文件存储论坛账户的密码。虽然可以设置为 ignore 不提交到 git 代码库中,但这也并不安全。
  • 2.只能同步最新的一篇博客,没有整体的博文搬家功能。
  • 3.先比其他的 octopress 插件,原来版本的代码结构难于维护,比如有自己单独的配置文件,而不是使用全局的_config.yml(在那个版本中大概是为了不把明文密码提交到版本库中),比如 ruby 文件单独在一个_custom文件夹下等

基于这些点,我 fork 了 huangbowen 大哥的代码,定制成了它现在的样子

功能

通过 rake 的方式实现同步功能:

  • 1.同步所有 octopress 的博文到目标博客。 (rake sync_all_posts)
  • 2.同步最新一篇博文到目标博客。(rake sync_lates_post)

开发

这个 octopress 插件的结构很简单:

  • 安装nokogirimetaweblog两个 gem。前者实现对 octopress 生成的 html 页面的解析,找到对应的博文。提供了客户端发起 MetaWeblog 请求的功能。
  • 在全局配置文件_config.yml中配置了目标博客 MetaWeblog 的服务地址、用户的账号信息。
  • octopress/plugins/sync_*.rb 三个文件则是代码实现。其中 sync_post.rb 中包含了 post 类,是主要的逻辑代码所在,sync_all_posts.rb 和 sync_latest_post.rb 则是对前者的调用。
  • 修改了 octopress 的 Rakefile,通过 rake 的方式实现功能。

下一步

希望能进一步完善这个插件,现在考虑到的有:

  • 增加同步所有博文功能中,对目标博客中已有博文的查重功能。即对于已经同步过去的博客,不再发送请求,或者实现编辑功能的同步功能。由于站点的 MetaWeblog 服务大多对请求有时限控制,同步过程中可能出现中断,此时部分博文已经同步过去,而部分没有,这种情况下,暂时没有好的解决方式。
  • 测试其他有 MetaWeblog 服务的博客站点(现在仅测试了 cnblog)。
  • cnblog 的博文显示中,似乎不支持 octopress 的代码块样式。 (注:原作者 huangbowen 大哥已经解释了是 css 样式的问题)

欢迎感兴趣的朋友参与到这个 repo 中来:)