1. 程式人生 > >Deepin15和20使用命令列快捷鍵滑鼠右鍵釋出部落格至部落格園和為知筆記

Deepin15和20使用命令列快捷鍵滑鼠右鍵釋出部落格至部落格園和為知筆記

> 本部落格具備很強的推廣性,不限於博主使用的這些作業系統和部落格平臺 [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,