deepin终端下发送博文至博客园
1. 概述
DeepinV20版本提供了更加友好的右键扩展功能,这里给深度的开发人员点赞。
本人也随便折腾了一下,内容见这篇博客
但是本人回到了Deepin15.11,想使用同样的方式拓展右键的时候,发现不太可行。无奈只能变通一下,使用命令或者快捷键发送。
2. 正文
命令行发送博客很简单。
第一步就是创作博客。打造博客创作环境,见我的这篇博客
第二步就是发送博客。Deepin 20可以右键发送,Deepin 15.11 只能够命令行或者快捷键了。
Deepin 提供了比较好的环境,首先是Python,安装xmlrpc.client模块,就可以轻松愉快的继续了。
2.1 这里是关于博客园API的学习
博客园的API文档在:https://rpc.cnblogs.com/metaweblog/你的博客地址名。
如果不知道"你的博客地址名",可以随便点开自己的一篇博客就能看到。或者在自己的博客后台-管理,里面可以看到。
必须要注意的是,自己的博客需要设置"允许MetaWblog博客客户端访问",这个在你自己的博客后台-管理-最后几行可以设置。
提供的API接口有以下几个:
- blogger.deletePost
- blogger.getUsersBlogs
- metaWeblog.editPost
- metaWeblog.getCategories
- metaWeblog.getPost
- metaWeblog.getRecentPosts
- metaWeblog.newMediaObject
- metaWeblog.newpost
- wp.newCategory
本篇博客主要介绍三个方法
metaWeblog.getUsersBlogs
功能:获取用户信息
参数:[appkey,username,password]
说明:appKey可以为空;username和password就是用户密码
metaWeblog.editPost
功能:编辑已经存在的文章
参数:[postid,username,password,post,publish]
说明:postid是文章ID,username和password是用户名和密码,post为文章内容,plublist为布尔值(确认发送与否)
metaWeblog.newPost
功能:发送一篇新的博客
参数:[blogid,username,password,post,publist]
说明:blogid是个人的blogid,username和password是用户名密码,post为文章内容,publist为布尔值(确认发送与否)
2.2 我的代码
#!/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):
"""
获取全部文章的title和postid
"""
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,post_name):
"""
编辑和发布,没有文章新建,有文章更新
"""
post_id = self.get_post_id(post_name)
markdown_file = str(post_name) + '.md'
with open(markdown_file,'r') as blog:
blog_content = blog.read()
post_info = {
'title':post_name,
'description':blog_content,
'categories':['[]','[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 = sys.argv[1]
blog_title = markdown_file.split('.')[0]
my_blog = MyCnblogsAPI()
my_blog.edit_post(blog_title)
上述代码保存为dev.py,稍后使用。
2.3 这里是配置如何发送的
Deepin创建一个脚本:
#!/bin/bash
file=$(xclip -o)
python3 /home/liwl/.myscripts/dev.py ${file}
执行chmod +x share_to_cnblogs
。
运行时只要在该脚本后面跟上文件名即可。