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