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
运行时只要在该脚本后面跟上文件名即可。

posted @ 2020-04-27 19:52  liwl1991  阅读(300)  评论(0编辑  收藏  举报