Mediawiki - скрипт для проверки версий вики и плагинов - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Published: 2026-09-27


Скрипт проверки версий MediaWiki — короткий bash-скрипт, который по списку доменов показывает версию движка, PHP, БД, активный скин и полный список расширений с их версиями. Нужен там, где несколько вики работают на разных версиях: чтобы не переносить шаблоны, код и расширения «по аналогии» и сразу видеть, что доступно на конкретном сайте.

Что делает скрипт:

  • по каждому домену запрашивает публичный api.php с siprop=general|extensions|skins — авторизация и SSH не нужны;
  • выводит версию MediaWiki, версию PHP, тип и версию БД;
  • определяет активный скин по классу skin-… в HTML главной страницы и перечисляет все доступные скины;
  • показывает префикс ссылок на статьи (/wiki/ или /page/) — чтобы не гадать, какой путь рабочий;
  • группирует расширения по типу (скины, хуки парсера, служебные страницы, редакторы, API) и печатает их с версиями.

Использование:

  1. Сохранить код ниже в файл wiki_versions.sh.
  2. Сделать его исполняемым: chmod +x wiki_versions.sh.
  3. Запустить со своим списком доменов: bash wiki_versions.sh site1.net site2.net site3.net — без аргументов берутся домены из массива DOMAINS в начале скрипта.

Требуются bash, curl, grep и python3 (используется только стандартная библиотека). Скрипт ничего не меняет и ничего не пишет — это чтение публичного API, поэтому его безопасно запускать откуда угодно.

#!/usr/bin/env bash
# Показать версии MediaWiki + расширения + активный скин для всех своих сайтов.
# Использование: bash wiki_versions.sh [домен ...]
set -uo pipefail

DOMAINS=("${@:-}")
if [ -z "${DOMAINS[0]:-}" ]; then
  DOMAINS=(site1.net site2.net site3.net)
fi

for d in "${DOMAINS[@]}"; do
  api=$(curl -sL --max-time 20 "https://$d/api.php?action=query&meta=siteinfo&siprop=general%7Cextensions%7Cskins&format=json&formatversion=2")
  act=$(curl -sL --max-time 20 "https://$d/" \
        | grep -oE 'skin-[a-z0-9_-]+' \
        | grep -vE '^skin--|clientpref' | head -1 | cut -d- -f2-)
  printf '%s' "$api" | DOM="$d" ACT="$act" python3 -c '
import os, json, textwrap, sys
dom, act = os.environ["DOM"], os.environ["ACT"]
try:
    q = json.load(sys.stdin)["query"]
except Exception as e:
    print("=== %s === ОШИБКА API: %s" % (dom, e)); raise SystemExit
g = q.get("general") or {}
ext = q.get("extensions") or ()
sk = q.get("skins") or ()
base = g.get("base", "")
print("=== %s ===" % dom)
print("  MediaWiki  : %s | PHP %s | %s %s" % (
    g.get("generator", "?"), g.get("phpversion", "?"),
    g.get("dbtype", "?"), g.get("dbversion", "?")))
print("  URL статьи : %s" % ("/page/" if "/page/" in base else "/wiki/"))
print("  Скин актив.: %s | доступные скины: %s" % (
    act or "?", ", ".join(s.get("name", "?") for s in sk)))
print("  Расширений : %d" % len(ext))
groups = {}
for e in ext:
    etype = e.get("type", "other")
    groups.setdefault(etype, list()).append(
        ("%s %s" % (e.get("name", "?"), e.get("version", ""))).strip())
labels = {"parserhook": "хук парсера/вывод", "specialpage": "служебные страницы",
          "other": "прочее", "api": "API", "datavalues": "данные",
          "antidote": "SpellCheck", "spam": "антиспам", "media": "медиа"}
for t, items in sorted(groups.items(), key=lambda kv: -len(kv[1])):
    print("    [%s] %s" % (labels.get(t, t),
          textwrap.fill(", ".join(items), 92, subsequent_indent="               ")))
'
done
site1.net site2.net site3.net — заменить на свои домены.

ℹ️ Информация
Активный скин скрипт определяет эвристикой (по классу skin-… в HTML). Если сайт отдаёт нестандартную разметку, значение может быть пустым — тогда скин смотрят вручную через Special:Version или в LocalSettings.php (переменная $wgDefaultSkin).

Источники

×
Реклама
← В главную
ИКС 88x31 - Visitor counter