Deepin15和20使用命令列快捷鍵滑鼠右鍵釋出部落格至部落格園和為知筆記
阿新 • • 發佈:2020-04-28
> 本部落格具備很強的推廣性,不限於博主使用的這些作業系統和部落格平臺
[TOC]
# 1. 引言
在win10系統上,本人比較喜歡用為知筆記創作markdown部落格,並通過其“分享到部落格”的功能,釋出部落格到部落格園。最近比較喜歡用Deepin系統作為主力作業系統,平時自己一些學習和實踐的內容,很希望通過部落格的方法釋出出去,並儲存在個人筆記中。
但是為知筆記的Linux客戶端勸退了我,同時又不希望使用部落格園自帶編輯器。因此花了點時間,做了一個替代方案,就是這篇部落格的主要內容了。
主要的思路分為兩步:創作,釋出。通過什麼方式創作,和怎樣釋出。
# 2. 創作
在Linux下建立markdown文件,是非常容易的。比如在deepin系統,你可以通過以下三種方式:
1. vim編輯器
2. typora編輯器
3. vscode編輯器
vim 是自帶編輯器,不比多說,適用於習慣vim操作的使用者,比如我自己。建立markdown時,只要使用markdown語法就可以了。網上有很多vim支援markdown語法或者markdown(實時預覽)的外掛,估計配置比較複雜吧,我本人也不推薦配置vim實時預覽markdown的方式。比較推薦瀏覽器外掛開啟本地.md檔案進行預覽的方式。推薦一個markdown priview plus的谷歌外掛,但是樣式不太好,可以自己載入別的樣式。
vscode編輯器能夠很好地支援vim外掛,支援markdown及其預覽的外掛。也是非常不錯的選擇。
最後我選擇了typora編輯器。它即可預覽你所創作的文件,可選多種樣式,能夠支援側邊欄和大綱,像極了一款本地筆記本。如果配上就堅果雲的同步,相簿等,更像一款雲筆記了。具體的功能這裡不多說,有興趣的同學可以自己去摸索。
> 本篇就是通過typora編輯創作。讓人專注於內容編排。唯一不足的可能就是不支援vim編輯器。
綜上,選擇創作的方式,目的是建立一篇markdown格式的文件,這很容易實現。
重要的是創作完成之後,該如何釋出出去。且看下文。
# 3. 釋出
本篇部落格主要想介紹3種釋出方式,2種釋出物件,涉及deepin系統的兩個作業系統版本。
## 3.1 釋出物件
部落格園,為知筆記是我比較喜歡的組合。也許網友們有更多的其他選擇,比如CSDN,開源中國,51CTO,掘金,簡書,個人部落格等。比較方面有有道雲筆記,印象筆記,onenote,螞蟻筆記等。
其實看懂了這篇部落格,很容易主動學習和動手操作,應用到別的平臺。希望大家有所收穫。
> 很多東西我自己有很多都是現學現賣的,面向搜尋引擎的程式設計......
確定了釋出物件,就需要了解如何不登入就可以釋出了。這要得益於這些平臺開放API功能。
### 3.1.1 部落格園的開放API
**API在哪裡**
要使用部落格園的API釋出自己的部落格,需要在自己部落格裡面設定允許這樣的操作。
具體的設定地方,在自己部落格後臺管理-設定-最後幾行,有**允許MetaWeblog部落格客戶端訪問的勾選項**。
同時也可以看到MetaWeblog的訪問地址(因人而異),點選這個url,就可以看到提供的api介面了。
**如何使用API**
Deepin系統呼叫這些API很方便,因為Deepin自帶了Python3。
Python3如果需要使用這些API,需要import一個庫,xmlrpc.client庫。如果系統沒有這個庫,可以先安裝。
```shell
sudo apt-get install python3-pip
sudo pip3 install xmlrpc.client
```
如果Python3 能夠匯入這個xmlrpc.client的話,基本上就成功一大半了。
下面的工作,就是程式設計了,可以先參考[這篇CSDN部落格](https://blog.csdn.net/shajunxing/article/details/79553472)
**編寫釋出程式**
已經萬事具備了 ,只需要建立釋出腳步。下面是我的程式碼,我把它命名為send_to_cnblogs.py
```python
#!/usr/bin/python3
# 本指令碼傳送部落格至www.cnblogs.com
import sys
import xmlrpc.client
class MyCnblogsAPI():
def __init__(self):
self.cnblogs_api = xmlrpc.client.ServerProxy("https://rpc.cnblogs.com/metaweblog/你的部落格地址")
self.user = '部落格園登入使用者名稱'
self.password = '部落格園登入使用者密碼'
self.blogid = self.__get_user_info()[0].get('blogid')
def __get_user_info(self):
return self.cnblogs_api.blogger.getUsersBlogs('',self.user,self.password)
def get_all_blogs(self):
"""
獲取全部文章
"""
blog_id_title = {}
allblogs = self.cnblogs_api.metaWeblog.getRecentPosts(self.blogid,self.user,self.password,0)
for b in allblogs:
blog_id_title.update({b.get('title'):b.get('postid')})
return blog_id_title
def get_post_id(self,post_name):
"""
通過指定的部落格名字獲取對應的postid
"""
return self.get_all_blogs().get(post_name)
def edit_post(self,blog_path):
"""
重新編輯和釋出
"""
post_name = blog_path.split('/')[-1].split('.')[0]
post_id = self.get_post_id(post_name)
with open(blog_path,'r') as blog:
blog_content = blog.read()
post_info = {
'title':post_name,
'description':blog_content,
'categories':['[]','[Markdown]'],#預設不釋出到部落格園首頁候選區,預設markdown
}
if post_id:
print("文章已經存在,更新!")
self.cnblogs_api.metaWeblog.editPost(post_id,self.user,self.password,post_info,True)
else:
print("沒有這篇文章,新建!")
self.cnblogs_api.metaWeblog.newPost(self.blogid,self.user,self.password,post_info,True)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("未指定文章")
sys.exit(0)
markdown_file = str(sys.argv[1:][0])#這部分未做更加詳細的解析,請留意
my_blog = MyCnblogsAPI()
my_blog.edit_post(markdown_file)
```
上面的程式碼主要實現了通過引數指定要釋出markdown檔案,釋出該markdown檔案內容到部落格園的功能。
這個使用,只要在終端執行`python3 send_to_cnblogs.py xxx.md`就可把xxx發不到部落格園了。
### 3.1.2 為知筆記的開放API
**API在哪裡**
為知筆記的API地址[在這裡](https://www.wiz.cn/wapp/pages/book/bb8f0f10-48ca-11ea-b27a-ef51fb9d4bb4/700c0ba0-48cb-11ea-a61a-d3d58d67def9)
官方很貼心地給出了優秀的示例程式碼,按照他們給的程式碼,很容易實現對自己為知筆記的操作。
**如何使用API**
該API是需要用js實現互動的。本人js零基礎,只能面向搜尋引擎程式設計了。
首先閱讀一下為知筆記API快速入手(實際上我們只是釋出文章,也不需要太過複雜的功能),從快速入手的程式碼,很容易就上手了。
> 沒上手也沒關係,我的程式碼改改就行。要改的很少很少,主要是環境部署.....
**編寫釋出程式**
Deepin也很容易使用nodejs,如果沒有安裝,命令列執行安裝就行。
在Deepin 15.11 上,執行`sudo apt-get install node npm`
在Deepin V20上,執行`sudo apt-get install nodejs npm`
暫時不需要關注node的版本
下來看看我的程式碼段,我命名為send_to_wiz.js
```javascript
//注意:如果下面三個包沒有的話,deepin命令列執行npm install xxx即可。有包管理器就是方便。
var fs = require("fs")
var program = require("commander")
var linerByLine = require("n-readlines")
const axios = require('axios');
const AS_URL = 'https://as.wiz.cn';
//這裡主要是通過命令列指定檔案,因為要整合到deepin的檔案管理器右鍵。它的右鍵實際就是用檔名做引數,呼叫你的命令。
program
.option('-f,