Требуется опыт в расширении UserMerge ...
Я пытаюсь очистить вики с помощью нелепого количества поддельных имен пользователей.
Следуя инструкциям на Массовый пользователь Mediawiki delete / merge / block привел меня к точке, где я создал работающий URL, и я смог увидеть все параметры.Однако рекомендуемый плагин Firefox не работает с моей текущей версией Firefox.Итак, я подумал: Python и MediaWiki API на помощь.Это моя первая поездка по той кроличьей норе, но я смог добраться до точки, где он дал мне токен редактирования ... но, возможно, не правильный ВИД токена редактирования?
Код (с личнымбиты отредактированы):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
user_merge.py
The goal, eventually, is to send ~1,500 requests like:
https://<MEDIAWIKI>/index.php
?wpolduser=<OLD_USER>
&wpnewuser=<NEW_USER>
&wpdelete=1
&wpEditToken=<EDIT_TOKEN>
&title=Special%3AUserMerge
&redirectparams=
where <OLD_USER> changes with every iteration through the loop,
but <NEW_USER> and <EDIT_TOKEN> are constant
"""
import requests
API_URL = "https://<MEDIAWIKI>/api.php"
USERNAME = "<BOT_USERNAME>"
PASSWORD = "<BOT_PASSWORD>"
URL = "https://<MEDIAWIKI>/index.php"
NEW_USER = "<SPAMMER_0>"
session = requests.Session()
# Retrieve login token first
PARAMS_0 = {"action": "query",
"meta": "tokens",
"type": "login",
"format": "json"}
response = session.get(url=API_URL,
params=PARAMS_0)
response.raise_for_status()
results = response.json()
LOGIN_TOKEN = results["query"]["tokens"]["logintoken"]
# Send a post request to login as bot
PARAMS_1 = {"action": "login",
"lgname": USERNAME,
"lgpassword": PASSWORD,
"lgtoken": LOGIN_TOKEN,
"format": "json"}
response = session.post(API_URL,
data=PARAMS_1)
results = response.json()
if results["login"]["result"] != "Success":
raise RuntimeError(results["login"]["reason"])
# Get edit token
PARAMS_2 = {"action": "query",
"meta": "tokens",
"format": "json"}
response = session.get(API_URL,
params=PARAMS_2)
results = response.json()
EDIT_TOKEN = results["query"]["tokens"]["csrftoken"][:-2]
# Fill in and submit Special:UserMerge form
old_user = "<SPAMMER_1>" # Eventually read from 1500-line file
PARAMS_3 = {"wpolduser": old_user,
"wpnewuser": NEW_USER,
"wpdelete": "1",
"wpEditToken": EDIT_TOKEN,
"title": "Special%3AUserMerge",
"redirectparams": ""}
# (Fails with either POST or GET)
response = session.get(URL,
params=PARAMS_3)
response.raise_for_status()
results = response # Unsure if it needs JSON munging
# Logout
PARAMS_9 = {"action": "logout",
"format": "json"}
response = session.post(API_URL,
data=PARAMS_9)
results = response.json()
Я могу войти в систему и успешно получить токен редактирования.Но когда я пытаюсь использовать его так, как я мог использовать его из Firefox, код завершается ошибкой:
Traceback (most recent call last):
File "./user_merge.py", line 140, in <module>
main()
File "./user_merge.py", line 119, in main
response.raise_for_status()
File "/usr/lib/python3.7/site-packages/requests/models.py", line 939, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://<MEDIAWIKI>/index.php?wpolduser=<OLD_USER>&wpnewuser=<NEW_USER>&wpdelete=1&wpEditToken=<EDIT_TOKEN>&title=Special%253AUserMerge&redirectparams=