Opencode - автоматический постинг в mediawiki через API
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Opencode - автоматический постинг в mediawiki через API
1) Прописать переменные в
vi ~/.zshrc export MW_URL="https://URL/api.php" export MW_USER="admin1" export MW_PASSWORD="pass1"
source ~/.zshrc перезапуск opencode через oweb
2) Создать 2 файла
/Users/antonmac/.config/opencode/tools/mediawiki_post.py - скрипт, который через MediaWiki API логинится и постит (использует только стандартную библиотеку Python, ничего ставить не надо) /Users/antonmac/.config/opencode/tools/mediawiki-post.ts - обёртка-инструмент для OpenCode
mediawiki_post.py:
import sys, json, urllib.request, urllib.parse, os
def main():
title = sys.argv[1]
content = sys.argv[2]
summary = sys.argv[3] if len(sys.argv) > 3 else "Posted via OpenCode"
url = os.environ.get("MW_URL")
user = os.environ.get("MW_USER")
pw = os.environ.get("MW_PASSWORD")
if not url and len(sys.argv) > 4:
url = sys.argv[4]
if not user and len(sys.argv) > 5:
user = sys.argv[5]
if not pw and len(sys.argv) > 6:
pw = sys.argv[6]
if not url or not user or not pw:
return json.dumps({"error": "Set MW_URL, MW_USER, MW_PASSWORD env vars"})
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
def api(params):
data = urllib.parse.urlencode(params).encode()
req = urllib.request.Request(url, data=data, headers={"User-Agent": "OpenCode-MW-Tool/1.0"})
return json.loads(opener.open(req).read())
token = api({"action": "query", "meta": "tokens", "type": "login", "format": "json"})
lt = token.get("query", {}).get("tokens", {}).get("logintoken")
if not lt:
return json.dumps({"error": "No login token"})
login = api({"action": "login", "lgname": user, "lgpassword": pw, "lgtoken": lt, "format": "json"})
if login.get("login", {}).get("result") != "Success":
return json.dumps({"error": "Login failed", "detail": login})
csrf = api({"action": "query", "meta": "tokens", "type": "csrf", "format": "json"})
ct = csrf.get("query", {}).get("tokens", {}).get("csrftoken")
if not ct:
return json.dumps({"error": "No CSRF token"})
edit = api({"action": "edit", "title": title, "text": content, "token": ct, "summary": summary, "format": "json"})
return json.dumps(edit)
if __name__ == "__main__":
print(main())
mediawiki-post.ts:
import { tool } from "@opencode-ai/plugin"
import { dirname, join } from "path"
import { fileURLToPath } from "url"
const __dirname = dirname(fileURLToPath(import.meta.url))
export default tool({
description: "Post or edit a page on a MediaWiki site",
args: {
title: tool.schema.string().describe("Page title"),
content: tool.schema.string().describe("Wikitext content"),
summary: tool.schema.string().optional().describe("Edit summary"),
},
async execute(args) {
const script = join(__dirname, "mediawiki_post.py")
const summary = args.summary || "Posted via OpenCode"
const result = await Bun.$`python3 ${script} ${args.title} ${args.content} ${summary}`.text()
return result.trim()
},
})
ПАЙНЛАЙН: OpenCode изучает сайт → пишет вики-статью → публикует твоим инструментом. Изучи эти ссылки сам проект - детально: https://URL/ Потом напиши статью для MediaWiki на основе изученного c названием " ТУТ НАЗВАНИЕ СТАТЬИ "и опубликуй через mediawiki-post. Используй mediawiki разметку: заголовки ==, жирный текст , списки *, только внешние ссылки Включи вконце в разделы также: - Ссылки Для кода используй <source lang='bash'></source> если нужно.
