一江山水的随笔

当前位置:首页 - 技术 - 正文

Enjoy life!

先说效果:一条命令,30秒搞定一篇千字博客

我最近用 WorkBuddy AI 助手 + DeepSeek API,搞了一套自动化发博客的系统。现在只要在命令行敲一下,30秒内就能生成一篇千字技术文章,并自动发布到我的 Z-Blog 站点上。整个过程完全不用我动手写内容、调格式、点发布按钮,爽得很。

下面我就把怎么做到的,包括踩过的坑,都详细写出来。如果你也想偷懒(或者说提高效率),可以参考一下。

整体思路:WorkBuddy 写脚本,DeepSeek 写内容,Z-Blog 接发布

我的方案很简单:

  • WorkBuddy:帮我写 Python 脚本,包括调用 DeepSeek API 和发布到 Z-Blog 的逻辑。
  • DeepSeek:通过 API 生成文章内容,返回标题、正文、摘要、标签等结构化数据。
  • Z-Blog:通过自带的 MetaWeblog XML-RPC 接口接收文章数据并发布。

最终我得到了两个核心脚本:ai_write_and_publish.py(主脚本)和 zblog_publisher.py(发布模块)。

第一步:让 WorkBuddy 帮我写 Python 脚本

我直接跟 WorkBuddy 说:“帮我写一个 Python 脚本,调用 DeepSeek API 生成一篇技术博客文章,然后通过 Z-Blog 的 XML-RPC 接口发布。” WorkBuddy 很快给出了初版代码,但有些细节需要调整,比如错误处理和参数配置。经过几轮对话,最终定稿。

核心脚本 ai_write_and_publish.py 的主要逻辑如下:

import requests
import xmlrpc.client
from datetime import datetime

# 配置参数
DEEPSEEK_API_KEY = 'your_deepseek_api_key'
Z_BLOG_URL = 'https://yourblog.com/xmlrpc.php'
Z_BLOG_USER = 'admin'
Z_BLOG_PASSWORD = 'yourpassword'

# 调用 DeepSeek API 生成文章
def generate_article(topic):
    headers = {
        'Authorization': f'Bearer {DEEPSEEK_API_KEY}',
        'Content-Type': 'application/json'
    }
    data = {
        'model': 'deepseek-chat',
        'messages': [
            {
                'role': 'system',
                'content': '你是一位技术博主,请生成一篇关于指定主题的技术博客文章。返回格式必须是JSON,包含title、content、excerpt、tags四个字段。'
            },
            {
                'role': 'user',
                'content': f'请写一篇关于{topic}的技术文章,要求:标题吸引人,正文1000字以上,摘要100-150字,标签4个以内。'
            }
        ],
        'response_format': { 'type': 'json_object' }
    }
    response = requests.post('https://api.deepseek.com/chat/completions', headers=headers, json=data)
    if response.status_code == 200:
        result = response.json()
        return result['choices'][0]['message']['content']
    else:
        raise Exception(f'DeepSeek API 调用失败: {response.status_code}')

# 发布到 Z-Blog
def publish_to_zblog(article_data):
    server = xmlrpc.client.ServerProxy(Z_BLOG_URL)
    post = {
        'title': article_data['title'],
        'description': article_data['content'],
        'categories': ['技术'],  # 注意:这里要传分类名称,不是ID
        'mt_keywords': ','.join(article_data['tags'])
    }
    post_id = server.metaWeblog.newPost('', Z_BLOG_USER, Z_BLOG_PASSWORD, post, True)
    return post_id

# 主函数
if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        topic = sys.argv[1]
    else:
        topic = 'AI自动化工具'
    
    print(f'正在生成关于“{topic}”的文章...')
    article_json = generate_article(topic)
    import json
    article_data = json.loads(article_json)
    
    print('文章生成成功,正在发布...')
    post_id = publish_to_zblog(article_data)
    print(f'发布成功!文章ID: {post_id}')

这个脚本做了两件事:调用 DeepSeek API 拿文章数据,然后通过 XML-RPC 发布到 Z-Blog。WorkBuddy 帮我省掉了自己琢磨 API 调用和 XML-RPC 格式的时间。

第二步:对接 Z-Blog 的 MetaWeblog 接口,踩坑记录

Z-Blog 支持 MetaWeblog API,这是很多博客系统的标准接口。但对接时我遇到了几个坑:

坑1:Z-Blog 的 XML-RPC 不支持 blogger.getUsersBlogs

一开始我按常见教程,想先用 blogger.getUsersBlogs 测试连接,结果一直报错。查了 Z-Blog 文档才发现,它只实现了 metaWeblog 相关的方法,比如 metaWeblog.newPost。所以直接调用 metaWeblog.newPost 就行,不用绕弯子。

坑2:分类要传名称字符串,而不是 ID 数字

在构造 post 字典时,categories 字段我一开始传了数字 ID,比如 [1],结果发布后文章没分类。后来试了传分类名称 ['技术'],才成功。这点和某些博客系统不一样,需要注意。

坑3:Windows 命令行 GBK 编码导致脚本静默崩溃

我在 Windows 上跑这个脚本,有时候会莫名其妙地退出,不报错。折腾了好久才发现,是命令行默认的 GBK 编码和脚本里的 UTF-8 冲突,特别是处理中文字符时。解决方案是在运行脚本前设置环境变量:

set PYTHONIOENCODING=utf-8
python ai_write_and_publish.py "AI工具推荐"

或者在脚本开头加:

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

我选了第一种,更简单。

第三步:优化和封装

为了让脚本更健壮,我用 WorkBuddy 帮忙加了错误处理和日志记录,并把发布逻辑单独放到了 zblog_publisher.py 模块里。这样主脚本更清晰,也方便以后扩展。

zblog_publisher.py 的核心部分:

import xmlrpc.client
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class ZBlogPublisher:
    def __init__(self, url, user, password):
        self.server = xmlrpc.client.ServerProxy(url)
        self.user = user
        self.password = password
    
    def publish(self, title, content, categories, tags):
        try:
            post = {
                'title': title,
                'description': content,
                'categories': categories,
                'mt_keywords': ','.join(tags) if isinstance(tags, list) else tags
            }
            post_id = self.server.metaWeblog.newPost('', self.user, self.password, post, True)
            logger.info(f'文章发布成功,ID: {post_id}')
            return post_id
        except Exception as e:
            logger.error(f'发布失败: {e}')
            raise

然后在主脚本里调用:

from zblog_publisher import ZBlogPublisher

publisher = ZBlogPublisher(Z_BLOG_URL, Z_BLOG_USER, Z_BLOG_PASSWORD)
post_id = publisher.publish(
    article_data['title'],
    article_data['content'],
    ['技术'],
    article_data['tags']
)

使用方式:一条命令搞定

现在,我只需要打开命令行(确保设置了 PYTHONIOENCODING=utf-8),运行:

python ai_write_and_publish.py "WorkBuddy使用技巧"

脚本就会自动生成一篇关于 WorkBuddy 使用技巧的文章,并发布到博客。从执行到完成,大概 30 秒左右,真正实现了“躺平式”发博客。

注意事项

  • API 费用:DeepSeek API 不是免费的,虽然价格不贵,但大量使用前最好先查一下计价方式。
  • 内容质量:AI 生成的文章可能需要人工润色,特别是技术细节部分。我的做法是生成后快速浏览一遍,必要时手动调整。
  • 错误处理:脚本里加了基础错误处理,但网络波动或 API 限流等情况还需要更完善的机制,比如重试。
  • 安全性:API 密钥和博客密码不要硬编码在脚本里,建议用环境变量或配置文件管理。

总结

这套系统用下来,最大的感受就是“真省事”。WorkBuddy 帮我快速写出了可用的脚本,DeepSeek 保证了内容产出,Z-Blog 的接口让发布自动化。虽然踩了几个坑,但解决后流程就很顺畅了。

如果你也在用 Z-Blog 或者类似支持 MetaWeblog 的博客系统,不妨试试这个方案。代码我已经分享在上面,你可以根据自己的需求调整。有什么问题,欢迎在评论区交流。

本文来源:一江山水的随笔

本文地址:https://www.298.name/post/113.html

主要内容:WorkBuddy + DeepSeek:30秒自动写博客并发布,我的全流程实战

版权声明:如无特别注明,转载请注明本文地址!

想找什么搜索会更快哦!
站点信息
  • 文章总数:109
  • 页面总数:1
  • 分类总数:4
  • 标签总数:75
  • 评论总数:61
  • 浏览总数:1491059
控制面板
您好,欢迎到访网站!
  查看权限
Top