在GitHub上搭建了Octopress博客后,我一直在尝试改进或增强一些功能。有一些功能可以在网上找到第三方插件。因为我在GitHub上的博客是刚刚申请,并没有太多人知道我的博客域名。如果希望我自己新写的博客让更多人知道,最好的方式还是能够将链接发到我的新浪微博中。一些插件为octopress提供了新浪微博的share按钮,但这并不是我想要的。也许已经有快速现成的方法支持我想要的功能,但我没有找到。那么何必还去上穷碧落下黄泉的去搜索了,身为一个程序员,这种事情就自己搞定好了。正好可以练手Ruby。经过半天的代码编写和测试,我的这个新浪微博插件就实现了。它主要能够运行rake命令,解析最新博客的标题与URL,再替换weibo-config.yml配置文件中配置的微博模板的内容,并将其发布到新浪微博中。
实现
我最初是在octopress的plugin目录下创建了post_weibo.rb文件。后来发现,当我们执行rake generate时,它事实上会去执行jekyll命令。而该命令则会去遍历plugin目录下的ruby文件,并执行之。这显然不是我希望看到的。我希望在发表的新博客完全就绪时,我再考虑发送通知到新浪微博。于是,我单独建立了一个新的文件夹”_custom”,并将post_weibo.rb文件放进去。
post_weibo.rb文件实现了这个插件的所有功能,主要方法为post_weibo(),如下所示:
|
它使用了faraday来发送post请求到新浪api。发送请求时需要获得access_token。该值可以到新浪申请。具体API说明请查阅开发文档。
post_weibo.rb文件的其余方法皆是为生成微博内容服务的。具体代码可以通过我在github上的repository获得,这里不再赘述。大体思路是通过获得_post目录下创建日期最近的markdown文件,读取该文件,获得title的值。解析文件名,获得博客链接地址的后面部分,至于前面部分(即博客地址),则从_config.yml中获取,然后组装成正确的博客URL。接下来,再从新增的weibo-config.yml中读取配好的template,将title和url替换,并作为status值,交给post请求。
Rake任务
我单独加入了一个Rake任务,这样方便我们执行以发送微博。方法是打开octopress根目录下的Rakefile文件,在合适位置加入如下内容:
desc "Post the title and url of latest blog to Sina Weibo"
task :weibo do
puts "Post the title and url of latest blog to Sina Weibo"
system "ruby _custom/post_weibo.rb"
end
配置
要正确的发送微博,就必须在新增的weibo-config.yml中配置好相关信息。主要需要配置你的access_token与微博模板,如下所示:
access_token: Your access token provided by Sina weibo
post_template: 我在agiledon.github.com上发表了最新博客《%{blog_title}》,请访问链接:%{blog_url}
注意,在配置post_template时,你虽然可以任意修改模板内容,但不能修改我事先留下的两个变量,即%{blog_title}和%{blog_title}。模板内容支持英语、中文和其他语言。
例如,如果你创建了一个新的博客,文件名为2012-12-25-test-demo.markdown,标题为“测试演示”。那么,你所发表的微博内容就应该为:
我在agiledon.github.com上发表了最新博客《测试演示》,请访问链接:http://agiledon.github.com/2012/12/25/test-demo
当然,这里的http://agiledon.github.com取决于你在_config.yml中的url配置。
为了保证你的access_token安全,你可以在.gitignore中加入新增配置weibo-config.yml,从而避免对该配置的提交。这也是我为什么要将weibo-config.yml中的配置信息从_config.yml中独立出来的缘故。
依赖
因为在post_weibo.rb文件中,我使用了一个第三方库faraday来简化发送post请求的ruby代码。为保证rake命令的正确执行,应该在Gemfile文件中加入如下内容:
gem "faraday", "~> 0.8.4"
加入后,在转到octopress根目录下,运行如下命令安装faraday:
bundle install
使用
如果一切配置妥当,当你编写了新的博客并发表到博客上之后,只要你认为一切Ok了,就可以执行命令:
rake weibo
它就会自动将最新博客的标题与URL按照你事先设定的模板内容,发布到你的新浪微博中。一旦发布成功,在控制台下会显示“post successful!”