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> если нужно.
×
Реклама
ИКС