如何利用脚本实现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




