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

news2024/11/27 2:35:34

我发现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时间,到期则率
    为了防止滥用,代码就不公开了,知道思路了,就可以自己动手操作了,是不是很简单

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring教程20】Spring框架实战:AOP(面对切面编程)知识总结

欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《利用 AOP通知获取数据代码…

为 Compose MultiPlatform 添加 C/C++ 支持(3):实战 Desktop、Android、iOS 调用同一个 C/C++ 代码

theme: serene-rose 前言 在本系列的前两篇文章中我们已经学会了如何在 kotlin native 平台(iOS)使用 cinterop 调用 C/C 代码。以及在 jvm 平台(Android、Desktop)使用 jni 调用 C/C 代码,并且知道了如何自动编译 A…

Leetcode—389.找不同【简单】

2023每日刷题&#xff08;五十五&#xff09; Leetcode—389.找不同 实现代码 char findTheDifference(char* s, char* t) {int len strlen(s);int len2 len 1;int a[26] {0};int b[26] {0};if(len 0) {return t[0];}for(int i 0; i < len; i) {int idx s[i] - a;…

使用alpine镜像部署go应用时踩的坑

使用alpine镜像部署go应用时踩的坑 关于交叉编译 实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行&#xff0c;这边采取拉镜像编译复制出来的做法&#xff0c;部署再用干净的alpine 拉取golang:alpine踩坑 在Dockerhub上可以找到&#xff1a; 然而拉取的alpine中…

蓝桥杯-动态规划专题-子数组系列,双指针

目录 一、单词拆分 二、环绕字符串中唯一的子字符串 双指针-三数之和 ArrayList(Arrays.asList(array)) 四、四数之和&#xff08;思路和三数之和一样&#xff0c;只是多了一层循环&#xff09; 一、单词拆分 1.状态表示 dp[i]:到达i位置结尾&#xff0c;能否被dict拆分 …

JVM进程缓存

引言 缓存在日常开发中启动至关重要的作用&#xff0c;由于是存储在内存中&#xff0c;数据的读取速度是非常快的&#xff0c;能大量减少对数据库的访问&#xff0c;减少数据库的压力。我们把缓存分为两类&#xff1a; 分布式缓存&#xff0c;例如Redis&#xff1a; 优点&…

【MySQL】MySQL 在 Centos 7环境安装教程

文章目录 1.卸载不要的环境2.检查系统安装包3.获取mysql官方yum源4.安装mysql yum 源&#xff0c;对比前后yum源5.安装mysql服务6.查看配置文件和数据存储位置7.启动服务和查看启动服务8.登录9.配置my.cnf 1.卸载不要的环境 先检查是否有mariadb存在 ps ajx |grep mariadb如果…

虚拟机VMware安装centos以及配置网络

目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作&#xff1a;提前下载和安装好VMware。VMware的安装可以参考这一篇文章&#xff1a;VMware15的下载及安装教程。 1、CentOS7的下载 …

sentinel整合nacos配置中心持久化

在网上找了很多的资料&#xff0c;发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程&#xff0c;并且都需要修改前端&#xff0c;略显麻烦&#xff0c;至于剩下的熔断、热点流控、授权的更是没有相关的改造教程&#xff0c;最后在知乎的看到一篇文章后让…

Sql server数据库数据查询

请查询学生信息表的所有记录。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELECT * FROM 学生信息表 执行结果如下&#xff1a; 查询学生的学号、姓名和性别。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELE…

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

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

持续集成交付CICD:Jenkins流水线实现Nexus制品晋级策略

目录 一、理论 1.开发测试运维环境 二、实验 1.Nexus制品晋级策略 一、理论 1.开发测试运维环境 &#xff08;1&#xff09;环境 1&#xff09;持续集成开发环境&#xff08;DEV: Development Environment&#xff09; 直接通过源代码编译打包&#xff0c;其会跑单元测试…

Vue之数据绑定

在我们Vue当中有两种数据绑定的方法 1.单向绑定 2.双向绑定 让我为大家介绍一下吧&#xff01; 1、单向绑定(v-bind) 数据只能从data流向页面 举个例子&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

Docker Compose(容器编排)——9

目录 什么是 Docker Compose生活案例为什么要 Docker ComposeDocker Compose 的安装Docker Compose 的功能Docker Compose 使用场景Docker Compose 文件&#xff08;docker-compose.yml&#xff09; 文件语法版本文件基本结构及常见指令Docker Compose 命令清单 命令清单如下命…

Java项目-瑞吉外卖Day4

实现文件的上传下载&#xff1a; 前端代码&#xff1a; 对文件的操作就是对流的操作。 上传文件的后端代码&#xff0c;需要注意MultipartFile的名字必须与前端相对&#xff1a; 为文件存储位置进行动态设置&#xff0c;配置application.xml 在CommonController中设置属性读…

【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写

Python 网络爬虫入门&#xff1a;Spider man的第二课 写在最前面观察目标网站代码编写 第二课总结 写在最前面 有位粉丝希望学习网络爬虫的实战技巧&#xff0c;想尝试搭建自己的爬虫环境&#xff0c;从网上抓取数据。 前面有写一篇博客分享&#xff0c;但是内容感觉太浅显了…

【Linux】使用Bash和GNU Parallel并行解压缩文件

介绍 在本教程中&#xff0c;我们将学习如何使用Bash脚本和GNU Parallel实现高效并行解压缩多个文件。这种方法在处理大量文件时可以显著加快提取过程。 先决条件 确保系统上已安装以下内容&#xff1a; BashGNU Parallel 你可以使用以下命令在不同Linux系统上安装它们&am…

深入理解希尔排序

基本思想 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 对于n个待排序的数列&#xff0c;取一个小于n的整数gap(gap被…

Shell 常用命令详解-上

Shell 常用命令详解-上 1.目录查阅相关命令2.文件操作相关命令 1.目录查阅相关命令 ll 命令 命令描述&#xff1a;ll命令用于显示指定工作目录下的内容。 命令格式&#xff1a;ll [参数] [目录名]。 参数说明&#xff1a; 参数说明-a显示所有文件及目录&#xff08;包括隐藏文…

基于JavaWeb+SSM+Vue助农扶贫微信小程序系统的设计和实现

基于JavaWebSSMVue助农扶贫微信小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图 源码获取入口 Lun文目录 目 录 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容 2 第二章 开发环境与技术 3 2.1 JSP技术 3 2.2 MySQL数据库 3 2.3 Java…