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

  • 相关阅读:
    牛客练习赛53 A-E
    算导第二章笔记 (归并排序 之 插入排序优化)
    LightOJ 1372 (枚举 + 树状数组)
    LightOJ 1348 (树链剖分 + 线段树(树状数组))
    Light OJ 1343
    Light OJ 1266
    Light OJ 1085
    CodeForces 671C
    Codeforces Round #352 (Div. 2) (A-D)
    ZOJ1008
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/12789502.html
Copyright © 2020-2023  润新知