[2017-08-31]如何使用ruby同步markdown博文到博客园
這兩天折騰了一下用ruby通過MetaWeblog接口把本博客同步到博客園,特此記錄。
MetaWeblog
MetaWeblog是一個專門關于博客的協(xié)議標準,通過xmlrpc,很簡單的定義了新增、編輯、刪除三個基本接口。
在博客園設置頁簽的最下方,保存按鈕之前有每個用戶的MetaWeblog接口地址:
MetaWeblog訪問地址: http://rpc.cnblogs.com/metaweblog/personball打開這個接口地址,可以看到接口文檔。
那么通過什么方式調用這個服務呢?
最好是腳本語言,這畢竟不是開發(fā)項目,用需要編譯生成的靜態(tài)語言有點小題大做。
如果你熟悉Python,或許也可以找到MetaWeblog的客戶端庫,下面介紹通過Ruby版MetaWeblog客戶端進行XmlRpc調用。
通過Ruby腳本調用metaWeblog.newPost
準備工作:
對了,我這里是Mac系統(tǒng)。下面先講幾個注意點,具體操作放最后。
Tip1 發(fā)布頻率
博客園的MetaWeblog接口對博文發(fā)布頻率做了限制,發(fā)布間隔太短會遇到提示:
30秒內只能發(fā)布1篇博文,請稍候發(fā)布間隔30秒還是很容易觸發(fā),建議發(fā)布間隔60秒。
Tip2 發(fā)布Markdown
發(fā)布Markdown內容要求Post結構中的categories設成[Markdown],注意categories要求是數(shù)組,具體請看接口文檔中struct Post一欄。
Tip3 擴展MetaWeblog中的Post對象
你找到的MetaWeblog客戶端很可能是通用的,所以不會針對博客園的接口做適配,肯定需要針對Post對象做擴展。
博客園MetaWeblog接口Post結構中的title是文章標題,description是文章內容,這兩個都是必填項。
如果遇到異常提示,必須思考下是不是博客園服務器端拋出來的。
本博客的同步腳本
完整代碼見:
cnblogs_post.rb
post_sync.rb
其中cnblogs_post.rb是針對博客園接口的擴展,主要加了個:categories,去掉了原先MetaWeblog::Post定義的:link。
:dateCreated雖然加了,但是目前博客園不使用接口傳進去的值,而用服務器接收時間作為發(fā)布時間。需要修改的話,必須到后臺編輯文章頁面,展開最下方的其他選項,勾選修改發(fā)布時間。(我嫌麻煩,直接title上加日期前綴了)
post_sync.rb主要是單篇文章同步用腳本,處理了幾個問題:
Yaml配置文件
post_sync.yml范例:
target: http://rpc.cnblogs.com/metaweblog/personball source: http://personball.com username: yourUserName password: yourPWD配置文件一定記得不要推送到github上,.gitignore中必須指定忽略post_sync.yml。
批量調用
首先post_sync.rb必須設置成可執(zhí)行:
chmod u+x post_sync.rb然后使用bash腳本批量調用,
批量調用腳本參考batch_sync.sh
這個腳本可以通過find命令遍歷_posts目錄自動生成:
find _posts/*|xargs -n 1 echo ./post_sync.rb >> batch_sync.sh對了,其中sleep 55s這是通過vscode多行編輯插入的。
最后,強烈建議程序員一定要多玩玩命令行。
git add . git commit -a git push && ./post_sync.rb _posts/2017-08-31-how-to-sync-post-to-cnblogs-with-ruby.mdGo!
轉載于:https://www.cnblogs.com/personball/p/7460622.html
總結
以上是生活随笔為你收集整理的[2017-08-31]如何使用ruby同步markdown博文到博客园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到很久不联系的同学代表什么
- 下一篇: 做梦梦到龙鱼预示什么