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 = titlepost.content = contentpost.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 = titlepost.content = contentpost.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 = 0self.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': []}@propertydef post_status(self):return self._post_status@post_status.setterdef post_status(self, value):valid_statuses = ['private', 'draft', 'publish']if value in valid_statuses:self._post_status = valueelse: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.mzph.cn/news/212729.shtml

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

相关文章

UE小:物品拼装功能

蓝图B1的实现步骤: 获取玩家控制器和视角:首先获取玩家控制器,然后使用Deproject Screen to World节点将屏幕上的鼠标位置转换为世界空间中的一条射线。 射线检测:使用Line Trace by Channel或Line Trace for Objects节点发射射线…

深度学习测试流程

深度学习模型测试的功能旨在验证模型在各种情况下的性能和鲁棒性。以下是深度学习模型测试的主要功能: 性能评估: 测试模型在任务目标上的整体性能,例如分类准确性、回归误差等。评估指标的选择取决于具体的任务类型。 泛化能力:…

《信息技术时代》期刊杂志论文发表投稿

《信息技术时代》期刊收稿方向:通信工程、大数据、计算机、办公自动化、信息或计算机教育、电子技术、系统设计、移动信息、图情信息研究、人工智能、智能技术、信息技术与网络安全等。 刊名:信息技术时代 主管主办单位:深圳湾科技发展有限…

C++笔记之int、size_t、uint8_t、unsigned char*区别

C笔记之int、size_t、uint8_t、unsigned char*区别 code review! 文章目录 C笔记之int、size_t、uint8_t、unsigned char*区别1.ChatGPT第一次查询解释2.ChatGPT第二次查询解释3.分别的使用示例 1.ChatGPT第一次查询解释 size_t、uint8_t 和 int 是编程中使用的不同类型&…

《微信小程序开发从入门到实战》学习四十七

4.4 云函数 4.4.5 云函数的定时触发 如果云函数需要定时执行,可以使用云函数定时触发器。配置了定时触发器,云函数会在相应时间点被自动触发。函数返回结果不会返回调用方 在需要添加触发器的云函数下新建文件config.json。格式如下: &quo…

05-详解调用服务时负载均衡的配置及其原理

负载均衡 负载均衡的原理(通用) LoadBalanced注解用来拦截它所标记的RestTemplate发起的http请求, 底层是利用了一个名为Ribbon的组件来实现负载均衡功能(Cloud高版本已经弃用) LoadBalancerInterceptor的intercept方法会对RestTemplate的请求进行拦截 public class LoadBal…

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

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

【数据库】分支与循环函数存储过程

目录 函数 【1】 【2】 【3】❗ 【4】 存储过程 思考&分析 函数 【1】 --(1)定义一个根据学生姓名查询该生学习课程的函数stu_count。 --create function stu_count(sname char(8))--学生姓名 --returns char(12)--学习课程 --begin --…

layui分页laypage结合Flask+Jinja2实现流程

Layui2.0普通用法<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>Demo</title><!-- 请勿在项目正式环境中引用该 …

uniapp iOS离线打包——运行项目到模拟器报错?

运行项目、打包时报错问题 记录个人在开发过程中遇到的相关问题&#xff0c;后续有时间会不定时更新 文章目录 运行项目、打包时报错问题运行到模拟器报错解决方案 打包报错解决方案 运行到模拟器报错 解决方案 选中项目工程 —> Build Settings 滑动底部 —> User-Defi…

Java基础课的中下基础课04

目录 二十三、集合相关 23.1 集合 &#xff08;1&#xff09;集合的分支 23.2 List有序可重复集合 &#xff08;1&#xff09;ArrayList类 &#xff08;2&#xff09;泛型 &#xff08;3&#xff09;ArrayList常用方法 &#xff08;4&#xff09;Vector类 &#xff08;…

gin博客项目开发日志1

gin项目博客系统伪第一代 项目概述 1.1 目标 实现一个功能完整、易用的博客系统&#xff0c;允许用户发布、编辑和管理博客文章。 1.2 背景 看到网上有很多语言写的博客系统&#xff0c;但go的却很少&#xff0c;正好&#xff0c;现在我在学go&#xff0c;可以拿博客来练练…

组件之间传值

目录 1&#xff1a;组件中的关系 2&#xff1a;父向子传值 3&#xff1a;子组件向父组件共享数据 4&#xff1a;兄弟组件数据共享 1&#xff1a;组件中的关系 在项目中使用到的组件关系最常用两种是&#xff0c;父子关系&#xff0c;兄弟关系 例如A组件使用B组件或者C组件…

深入了解UDP协议:特点、应用场景及市面上常见软件案例

目录 引言 UDP的特点 UDP的应用场景 市面上使用UDP的软件案例 结论 引言 在计算机网络中&#xff0c;UDP&#xff08;User Datagram Protocol&#xff09;是一种面向无连接、无状态的传输层协议。与TCP相比&#xff0c;UDP具有独特的特点和适用场景。本文将深入探讨UDP协…

解码方法dp

1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 从左往右 5.返回值 dp[n-1] 6.处理边界问题以及初始化问题的技巧

Docker笔记:数据卷挂载的三种方式及物理机与容器内的环境变量的传递

容器数据挂载到物理机上的三种方式 1 &#xff09; 实名(指定路径)挂载数据卷 docker run -v 物理机目录:容器内目录 镜像id示例 docker run -it -d --name mynginx_p_v -p 82:80 -v /root/www:/usr/share/nginx/html nginx此时访问 会报 403 forbidden因为 物理机上的 root/…

Electron[5] 渲染进程和主进程

1 进程 Electron里头的进程分为渲染进程和主进程。简单理解&#xff1a; main.js就是主进程每个页面就是渲染进程一个Electron应用仅有一个主进程&#xff0c;可以有多个渲染进程 上面的这些概念很重要&#xff0c;不展开细讲。 2 进程职责 主进程是用来实现应用的基础功能…

【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)

文章目录 1、简介2、Windows语音2.1 简介2.2 安装2.3 代码 3、pyttsx33.1 简介3.2 安装3.3 代码 4、ggts4.1 简介4.2 安装4.3 代码 5、SAPI6、SpeechLib7、百度AI8、百度飞桨结语 1、简介 TTS(Text To Speech) 译为从文本到语音&#xff0c;TTS是人工智能AI的一个模组&#xf…

K8S学习指南(6)-k8s核心概念label和label selector

文章目录 前言Label是什么&#xff1f;示例 Label Selector是什么&#xff1f;示例 Label的使用场景Label Selector的类型Label和Label Selector的高级应用使用Label Selector选择Service的后端Pod使用Label Selector进行滚动更新 总结 前言 Kubernetes是一个强大的容器编排平…

Python从入门到精通

一、Python基础语法 1、字面量 掌握字面量的含义了解常见的字面量类型基于print语句完成各类字面量的输出 什么是字面量&#xff1f; 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量 常用的值类型 Python中常用的有6种值&#xff…