python zblog API实现类似XMLRPC/发布文章

我发现python对Zblog的XML发布并不友好,虽然也有对应的模块,但是远远没有XPCRPC更直接方便,但是使用xmlRpc是直接给发布文章带来了不小的便利,但是对系统也并不友好,但是zblog也开放了Api,但是干部子弟不乐意了,想自己琢磨。
对于wordpress系统,大家都熟悉一个模块 wordpress_xmlrpc 利用此模块可以轻松将文章发布到wordpress系统中,也可以轻松上传附件。总体总结以下好处。

  • 使用无门槛,方便
  • 自动创建分类
  • 自动创建标签
  • 上传附件
  • 无需验证码

使用方法简单如下:

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts
wp = Client('https://domain.com/xmlrpc.php', 'username', 'password')
def post_new_article(title, content):
    post = WordPressPost()
    post.title = title
    post.content = content
    post.post_status = 'draft'  # 文章状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布
    post.terms_names = {
        'category': ['分类目录'],
        'post_tag': ['标签1', '标签2'],
    }

    post.id = wp.call(posts.NewPost(post))
    return post.id

是不是很方便,简单,以上category和post_tag如果不存在则自动创建

下面来看下zblog,zblog可以搜一下看,并没有类似于wprdpress这块模块,但是对于XmlRpc也有对应的方法,但是那种方法并不方便,而且要手动创建分类和标签,一般作者会在zblog的xmprc中实现对newPost方法的支持,然后在写一个方法,这个方法确实可以,也能实现以上的功能,对于很多模块需求还是受限,但对于科班出生的野生代码崽就显得尤为无助,此外系统对于检测也有排斥,总会提示这个文件不是最新文件,而且更新后会将这个文件给还原。
俗话说没有轮子就自己造轮子,我就用了zblog的api来实现类似的功能,地址如下 https://docs.zblogcn.com/php/#/books/api-05-design

对于拥有强迫症的我来说,格式必须要一样的,而且要兼容

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts
from zblogApi_xmlrpc import Client,ZblogPressPost
wp = Client('www.domain.com', 'username', 'password')
def post_new_article(title, content):
    post = ZblogPressPost()
    post.title = title
    post.content = content
    post.post_status = 'draft'  # 文章状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布
    post.terms_names = {
        'category': ['分类目录'],
        'post_tag': ['标签1', '标签2'],
    }
    post.id = wp.call(posts.NewPost(post))
    return post.id

使用以上方法就可以发布成功了

首先添加对post的支持

class ZblogPressPost:
    def __init__(self):
        # self.id = 0
        self.title = ''
        self.content = ''
        self.post_status = 'draft'  # 默认状态为草稿
        self.meta_koileedesc=''
        self.meta_koileekey=''
        self.meta_tesetu = ''
        self.meta_recommend=''
        self.terms_names = {
            'post_tag': [],
            'category': []
        }

    @property
    def post_status(self):
        return self._post_status

    @post_status.setter
    def post_status(self, value):
        valid_statuses = ['private', 'draft', 'publish']
        if value in valid_statuses:
            self._post_status = value
        else:
            raise ValueError(f"Invalid post status: {value}. Valid options are {valid_statuses}")

    def __repr__(self):
        return str(self.to_dict())

    def to_dict(self):
        return {
            'title': self.title,
            'content': self.content,
            'post_status': self._post_status,
            'terms_names': self.terms_names,
            "meta_koileedesc":self.meta_koileedesc,
            "meta_koileekey":self.meta_koileekey,
            "meta_tesetu" :self.meta_tesetu,
            "meta_recommend":self.meta_recommend
        }

其次对zblog的封装


class Client:
    BASE_URL = '/zb_system/api.php'
    LOGIN_ENDPOINT = 'mod=member&act=login'
    CATEGORY_ENDPOINT = 'mod=category&act={action}'
    TAG_ENDPOINT = 'mod=tag&act={action}'
    POST_ENDPOINT = 'mod=post&act=post'
    UPLOAD_ENDPOINT = "mod=upload&act={action}"

以下支持

  • 使用无门槛,方便
  • 分类不存在自动创建分类
  • 标签不存在自动创建标签
  • 上传附件
  • 登入token,并设置token_expiration时间,到期则率
    为了防止滥用,代码就不公开了,知道思路了,就可以自己动手操作了,是不是很简单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试剪切板贴图,兼测试2023年12月7日更新的Bard

当前的情况好比,(居然真的可以通过剪切板把图片放进来!) 听说2023年12月7日Bard有更新,所以,再测试了一次。这下,对大语言模型应该死心了;AI替代人的传闻应该是过早危言耸听了。

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我们是直接用index.html 中的body 里面的DIVision去输出 hello world&#xff0c; 在这个章节&#xff0c;我们将用SAP UI5 的标准控件 sap/m/Text 首先&#xff0c;我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…

Vue3-02-ref() 响应式详解

ref() 是什么 ref() 是一个函数&#xff1b; ref() 函数用来声明响应式的状态&#xff08;就是来声明变量的&#xff09; ref() 函数声明的变量&#xff0c;是响应式的&#xff0c;变量的值改变之后&#xff0c;页面中会自动重新渲染。ref() 有什么特点 1.ref() 可以声明基础…

java服务调用mysql报错

一、前言 前端服务调用后端服务时出现以下报错&#xff0c;原因是使用mysql5.7版本数据库中存在ONLY_FULL_GROUP_BY这个配置项导致的不兼容 MySQLSyntaxErrorException: Expression #32 of SELECT list is not in GROUP BY clause and contains nonaggregated column demeter…

打造Github首页的动态飞线效果

一、导语 Github首页的地球动态飞线&#xff0c;大家都比较熟悉吧 二、分析 由大量随机的3点构造出贝塞尔曲线&#xff0c;然后开始从起点到终点的飞行后&#xff0c;然后再从起点到终点的消失&#xff0c;就此完成整个过程 三、基础代码 createCurve(startPoint, endPoint…

layui实现下拉框多选

引用layui第三方扩展实现下拉框选择渲染 第三方插件地址xmSelect下拉多选 xmSelect 实现效果 //第三方扩展插件 <script type"text/javascript" src"${ctx }/config/layui/dist/xm-select.js"></script> //jquery渲染 <script type&qu…

【数电笔记】58-同步D触发器

目录 说明&#xff1a; 1. 电路组成 2. 逻辑功能 3. 特性表、特性方程 4. 状态转移图 例题 5. 同步D触发器的特点 6. 集成同步D触发器&#xff1a;74LS375 74LS375内部原理 说明&#xff1a; 笔记配套视频来源&#xff1a;B站本系列笔记并未记录所有章节&#xff0c;…

JRT文件服务实现

网站与客户端打印和导出方面已经无大碍了&#xff0c;今天抽时间整整文件服务&#xff0c;文件服务设计可以查看下面连接。原理一样&#xff0c;代码会有些变化。 文件服务设计 首先实现文件服务的服务端&#xff0c;就是一个业务脚本&#xff0c;用来接收上传、移动和删除文件…

Qt之基于QMediaPlayer的音视频播放器(支持常见音视频格式)

Qt自带了一个Media Player的例子,如下图所示: 但是运行这个例子机会发现,连最基本的MP4格式视频都播放不了。因为QMediaPlayer是个壳(也可以叫框架),依赖本地解码器,视频这块默认基本上就播放个MP4,甚至连MP4都不能播放,如果要支持其他格式需要下载k-lite或者LAVFilte…

Qt槽函数不响应不执行的一种原因:ui提升导致重名

背景&#xff1a; 一个包含了组件提升的ui&#xff0c;有个按钮的槽函数就是不响应&#xff0c;于是找原因。 分析&#xff1a; 槽函数的对应一是通过connect函数绑定信号&#xff0c;二是on_XXX_signal的命名方式。界面上部件的槽函数通常是第二种。 我反复确认细节&#…

cache教程 4.一致性哈希(hash)

本章节是单节点走向分布式节点的一个重要部分。 一致性哈希(consistent hashing)的原理以及为什么要使用一致性哈希。实现一致性哈希代码&#xff0c;添加相应的测试用例 1.多节点部署遇到的问题 上一章节完成了一个单节点的缓存服务器。那对于一个单节点来说&#xff0c;读…

L1-031:到底是不是太胖了

题目描述 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材&#xff08;即 | 真实体重 − 标准体重 | < 标准体重10%&#xff09;。已知 1 公斤等于 2 市斤。…

CSS入门(样式表|class类|选择器|背景|!important|文本颜色|字体|注释)

为什么学习CSS&#xff0c;因为QSS vs CSS 相似度极高&#xff0c;学好CSS对于QSS和QML都有潜移默化的作用。记住不管学习什么&#xff0c;我们都在围绕Qt集成。 入门 介绍 CSS 功能丰富&#xff0c;不仅仅是布局页面 外部样式表 <link> 在给定的HTML代码中&#xff…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》

这篇文章的标题表明研究的主题是在配电网发生灾害后&#xff0c;采用一种策略来实现多源协同孤岛运行&#xff0c;并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词&#xff1a; 考虑移动式储能调度&#xff1a; 文章关注的焦点之一是移动式储能系统的…

neuq-acm预备队训练week 8 P4779 【模板】单源最短路径(标准版)

题目背景 题目限制 题目描述 给定一个 n 个点&#xff0c;m 条有向边的带非负权图&#xff0c;请你计算从 s 出发&#xff0c;到每个点的距离。 数据保证你能从 s 出发到任意点。 输入格式 第一行为三个正整数n,m,s。 第二行起 m 行&#xff0c;每行三个非负整数 ui​,vi​…

2023年【广东省安全员C证第四批(专职安全生产管理人员)】考试总结及广东省安全员C证第四批(专职安全生产管理人员)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;】考试总结及广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;复审考试&#xff0c;包含广东省安全员C证第四批&…

File has been changed outside the editor, reload?

编译keil工程&#xff0c;一直提示&#xff1a;该文件在编译器之外被修改&#xff0c;是否重新加载。 解决办法&#xff1a; 关闭.map后缀的文件即可&#xff0c;然后重新build/rebulid可以发现不会重新弹出该错误。

完整方案开放下载!详解中国移动《通信网络中量子计算应用研究报告》

8月30日&#xff0c;中国移动在第四届科技周暨战略性新兴产业共创发展大会上重磅发布了《通信网络中量子计算应用研究报告》。 玻色量子作为中国移动在光量子计算领域的唯一一家合作企业兼战投企业&#xff0c;在量子计算应用于通信行业达成了深入合作&#xff0c;并在5G天线多…

Docker部署redis单节点

【百炼成魔】docker部署redis单节点 环境准备 关闭防火墙 systemctl stop firewalld && systemctl disable firewalldsetenforce 0 && sed -i s/SELINUX.*/SELINUXdisabled/g /etc/selinux/config安装常用软件 yum install -y wget net-tools bash-compl…

[Linux] 用LNMP网站框架搭建论坛

一、nginx在其中工作原理 原理&#xff1a; php-fpm.conf是控制php-fpm守护进程 它是php.ini是一个php解析器 工作过程&#xff1a; 1.当客户端通过域名请求访问时&#xff0c;Nginx会找到对应的虚拟主机 2. Nginx将确定请求。 对于静态请求&#xff0c;Nginx会自行处理…