You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何利用脚本实现MediaWiki文章的创建及批量生成?

用脚本批量创建MediaWiki文章的实现方案

没问题,咱们直接说怎么用脚本批量生成MediaWiki文章——核心是利用MediaWiki的API,这是官方推荐的自动化操作方式,适合管理员批量创建内容。下面是具体的步骤和示例代码:

准备工作

  • 确保你的MediaWiki开启了API(默认是启用的,可检查LocalSettings.php中的$wgEnableAPI = true;配置)
  • 拥有管理员权限的账号(或专门的Bot账号,更推荐,避免用个人账号批量操作)
  • 选择你熟悉的编程语言,这里以Python为例,需要先安装requests库(用于发送HTTP请求)

核心思路

通过MediaWiki的edit API动作,先登录获取会话令牌,再循环调用API创建页面,每篇页面填充你的标准模板+Feed条目内容。整个流程完全自动化,适合批量生成100篇这类标准化文章。

Python示例代码

import requests

# 替换成你的MediaWiki实际配置
WIKI_API_URL = "https://你的维基域名/w/api.php"
USERNAME = "管理员账号"
PASSWORD = "管理员密码"

# 定义你的标准模板,可根据需求自由修改结构
STANDARD_TEMPLATE = """{{Infobox 博客聚合条目
|条目标题 = {item_title}
|来源博客 = {blog_source}
|发布时间 = {publish_date}
}}

### 博客内容摘要
{item_content}

---
本条目由自动化脚本批量生成
[[分类:博客聚合]]
"""

def get_login_token(session):
    """获取登录所需的令牌"""
    response = session.get(
        WIKI_API_URL,
        params={"action": "query", "meta": "tokens", "type": "login", "format": "json"}
    )
    return response.json()["query"]["tokens"]["logintoken"]

def login_to_wiki(session, username, password):
    """登录MediaWiki并验证登录结果"""
    login_token = get_login_token(session)
    login_response = session.post(
        WIKI_API_URL,
        data={
            "action": "login",
            "lgname": username,
            "lgpassword": password,
            "lgtoken": login_token,
            "format": "json"
        }
    )
    return login_response.json()["login"]["result"] == "Success"

def get_edit_token(session):
    """获取编辑页面需要的CSRF令牌"""
    token_response = session.get(
        WIKI_API_URL,
        params={"action": "query", "meta": "tokens", "format": "json"}
    )
    return token_response.json()["query"]["tokens"]["csrftoken"]

def create_wiki_page(session, page_title, page_content, edit_token):
    """调用API创建或编辑MediaWiki页面"""
    edit_response = session.post(
        WIKI_API_URL,
        data={
            "action": "edit",
            "title": page_title,
            "text": page_content,
            "token": edit_token,
            "bot": 1,  # 标记为Bot操作,避免触发反垃圾机制
            "summary": "自动化批量创建博客聚合条目",
            "format": "json"
        }
    )
    return edit_response.json()

if __name__ == "__main__":
    # 初始化会话,保持登录状态
    session = requests.Session()

    # 先完成登录验证
    if not login_to_wiki(session, USERNAME, PASSWORD):
        print("登录失败,请检查账号密码或API配置")
        exit()
    print("登录成功,开始批量创建页面...")

    # 获取编辑令牌
    edit_token = get_edit_token(session)

    # 模拟100条Feed数据(实际使用时替换为Planet RSS的解析结果)
    # 每个元素是包含条目信息的字典,对应Feed里的一条内容
    feed_items = [
        {
            "title": f"博客条目 {i}",
            "source": f"源博客 {i}",
            "date": "2024-05-20",
            "content": f"这是第{i}条博客的内容摘要,可替换为Feed中的原文"
        }
        for i in range(1, 101)
    ]

    # 循环批量创建页面
    for index, item in enumerate(feed_items, 1):
        # 自定义页面标题,可根据需求调整命名规则
        page_title = f"博客聚合_{index}"
        # 填充模板内容,替换变量
        page_content = STANDARD_TEMPLATE.format(
            item_title=item["title"],
            blog_source=item["source"],
            publish_date=item["date"],
            item_content=item["content"]
        )
        # 调用API创建页面
        result = create_wiki_page(session, page_title, page_content, edit_token)
        if "error" in result:
            print(f"第{index}页创建失败: {result['error']['info']}")
        else:
            print(f"第{index}页创建成功: {page_title}")

关键注意事项

  • 模板自定义:直接修改STANDARD_TEMPLATE变量,可添加Infobox字段、分类标签、页面布局等,完全适配你的需求
  • Bot账号使用:生产环境建议创建专门的Bot账号(在MediaWiki后台给账号开启Bot权限),比用个人管理员账号更安全规范
  • 错误处理优化:代码中可添加更多异常捕获,比如网络超时、重复标题处理(遇到标题已存在的错误,可选择跳过或自动重命名)
  • RSS解析适配:如果需要从Planet 2.0的RSS流获取数据,可使用feedparser库解析RSS,把解析后的条目列表替换示例中的feed_items即可

内容的提问来源于stack exchange,提问作者Manuel Rodriguez

火山引擎 最新活动