API:Откат
| API действий MediaWiki |
|---|
| Основы |
| Аутентификация |
| Учётные записи и пользователи |
| Выполнение операций со страницами |
|
| Поиск |
| Сведения для разработчиков |
| Руководство |
| п · о · р |
POST-запрос для отмены последней серии изменений, внесённых одним пользователем на указанной странице.
Документация по API
action=rollback
- This module requires read rights.
- This module requires write rights.
- This module only accepts POST requests.
- Source: MediaWiki
- License: GPL-2.0-or-later
Undo the last edit to the page.
If the last user who edited the page made multiple edits in a row, they will all be rolled back.
- title
Title of the page to roll back. Cannot be used together with pageid.
- pageid
Page ID of the page to roll back. Cannot be used together with title.
- Type: integer
Tags to apply to the rollback.
- Values (separate with | or alternative): AWB, convenient-discussions
- user
Name of the user whose edits are to be rolled back.
- This parameter is required.
- Type: user, by any of username, IP, Temporary user, interwiki name (e.g. "prefix>ExampleName") and user ID (e.g. "#12345")
- summary
Custom edit summary. If empty, default summary will be used.
- Default: (empty)
- markbot
Mark the reverted edits and the revert as bot edits.
- Type: boolean (details)
- watchlist
Unconditionally add or remove the page from the current user's watchlist, use preferences (ignored for bot users) or do not change watch.
- One of the following values: nochange, preferences, unwatch, watch
- Default: preferences
- watchlistexpiry
Watchlist expiry timestamp. Omit this parameter entirely to leave the current expiry unchanged.
- Type: expiry (details)
- token
A "rollback" token retrieved from action=query&meta=tokens
For compatibility, the token used in the web UI is also accepted.
- This parameter is required.
- Roll back the last edits to page MediaWiki by user Example.
- api.php?action=rollback&title=MediaWiki&user=Example&token=123ABC [open in sandbox]
- Roll back the last edits to page MediaWiki by IP user 192.0.2.5 with summary Reverting vandalism, and mark those edits and the revert as bot edits.
- api.php?action=rollback&title=MediaWiki&user=192.0.2.5&token=123ABC&summary=Reverting%20vandalism&markbot=1 [open in sandbox]
Пример
Выполнение любого POST-запроса является многоэтапным процессом:
- Войдите, используя один из методов, описанных в API:Вход .
- Получите CSRF токен :
- Отправьте POST-запрос с токеном CSRF, чтобы выполнить действие на странице и в процессе этого получить
editpageправа на данную страницу: - GET a rollback token:
- Если ваша вики использует MediaWiki 1.24+, следуйте этим инструкциям:
- Токены отката не универсальны: они не только различаются для каждого входа в учётную запись, но также зависят от названия страницы и имени участника, чьи правки необходимо откатить. Для сайтов на MediaWiki 1.23 и более ранных версий, следуйте инструкциям ниже:
POST-запрос
Отправка POST-запроса с токеном отката, чтобы отменить изменения пользователя на странице Sandbox.
Ответ
Приведенный ниже раздел ответа предназначен для окончательного запроса POST, чтобы вернуть изменения на страницу «песочницы».
{ "rollback":{ "title":"Sandbox", "pageid":94542, "summary":"Reverted edits by [[Special:Contributions/41.190.3.231|41.190.3.231]] ([[User talk:41.190.3.231|talk]]) to last revision by [[User:Didicodes|Didicodes]]", "revid":381084, "old_revid":381083, "last_revid":381070 } }
Идентификаторы версий в ответе:
revid- Идентификатор новой версии, созданной при откате.old_revid- Идентификатор последней версии, подлежащей откату. До отката это была текущая версия.last_revid- Идентификатор версии, восстанавливаемой при откате. Это самая новая версия, к которой произойдет откат.
Пример кода
Python
#!/usr/bin/python3 """ rollback.py MediaWiki API Demos Demo of `rollback` module: Sending post request to rollback the last edits made to a given page. MIT license """ importrequests S = requests.Session() URL = "https://test.wikipedia.org/w/api.php" # Step 1: Retrieve a login token PARAMS_1 = { "action": "query", "meta": "tokens", "type": "login", "format": "json" } R = S.get(url=URL, params=PARAMS_1) DATA = R.json() LOGIN_TOKEN = DATA['query']['tokens']['logintoken'] # Step 2: Send a post request to login. Use of main account for login is not # supported. Obtain credentials via Special:BotPasswords # (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword PARAMS_2 = { "action": "login", "lgname": "bot_user_name", "lgpassword": "bot_password", "lgtoken": LOGIN_TOKEN, "format": "json" } R = S.post(URL, data=PARAMS_2) # Step 3: While logged in, retrieve a CSRF token PARAMS_3 = { "action": "query", "meta": "tokens", "format": "json" } R = S.get(url=URL, params=PARAMS_3) DATA = R.json() CSRF_TOKEN = DATA["query"]["tokens"]["csrftoken"] # Step 4: POST request to edit a page PARAMS_4 = { "action": "edit", "title": "Project:Sandbox", "token": CSRF_TOKEN, "format": "json", "appendtext": "Hello" } R = S.post(URL, data=PARAMS_4) # Step 5: Retrieve a rollback token PARAMS_5 = { "action": "query", "meta": "tokens", "type": "rollback", "format": "json" } R = S.get(url=URL, params=PARAMS_5) DATA = R.json() ROLLBACK_TOKEN = DATA['query']['tokens']['rollbacktoken'] # Step 5: POST request to rollback a page PARAMS_6 = { "action": "rollback", "format": "json", "title": "Project:Sandbox", "user": "bot_user_name", "token": ROLLBACK_TOKEN, } R = S.post(URL, data=PARAMS_6) DATA = R.json() print(DATA)
PHP
<?php /* rollback.php MediaWiki API Demos Demo of `rollback` module: Sending post request to rollback the edits of a given page. MIT license */ $endPoint = "http://dev.wiki.local.wmftest.net:8080/w/api.php"; $login_Token = getLoginToken(); // Step 1 loginRequest( $login_Token ); // Step 2 $rollback_Token = getRollbackToken(); // Step 3 rollback( $rollback_Token ); // Step 4 // Step 1: GET request to fetch login token function getLoginToken() { global $endPoint; $params1 = [ "action" => "query", "meta" => "tokens", "type" => "login", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params1 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["logintoken"]; } // Step 2: POST request to log in. Use of main account for login is not // supported. Obtain credentials via Special:BotPasswords // (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword function loginRequest( $logintoken ) { global $endPoint; $params2 = [ "action" => "login", "lgname" => "bot_user_name", "lgpassword" => "bot_password", "lgtoken" => $logintoken, "format" => "json" ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); } // Step 3: GET request to fetch rollback token function getRollbackToken() { global $endPoint; $params3 = [ "action" => "query", "meta" => "tokens", "type" => "rollback", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params3 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["rollbacktoken"]; } // Step 4: POST request to rollback a page function rollback( $rollback_Token ) { global $endPoint; $params4 = [ "action" => "rollback", "title" => "Project:Sandbox", "user" => "10.0.2.2", "token" => $rollback_Token, "format" => "json" ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); echo ( $output ); }
JavaScript
/* rollback.js MediaWiki API Demos Demo of `rollback` module: Sending post request to rollback the edits of a given page. MIT license */ varrequest=require('request').defaults({jar:true}), url="http://dev.wiki.local.wmftest.net:8080/w/api.php"; // Step 1: GET request to fetch login token functiongetLoginToken(){ varparams_0={ action:"query", meta:"tokens", type:"login", format:"json" }; request.get({url:url,qs:params_0},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); loginRequest(data.query.tokens.logintoken); }); } // Step 2: POST request to log in. // Use of main account for login is not // supported. Obtain credentials via Special:BotPasswords // (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword functionloginRequest(login_token){ varparams_1={ action:"login", lgname:"bot_username", lgpassword:"bot_password", lgtoken:login_token, format:"json" }; request.post({url:url,form:params_1},function(error,res,body){ if(error){ return; } getRollbackToken(); }); } // Step 3: GET request to fetch Rollback token functiongetRollbackToken(){ varparams_2={ action:"query", meta:"tokens", type:"rollback", format:"json" }; request.get({url:url,qs:params_2},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); rollback(data.query.tokens.rollbacktoken); }); } // Step 4: POST request to rollback a page functionrollback(rollback_token){ varparams_3={ action:"rollback", title:"Project:Sandbox", user:"10.0.2.2", token:rollback_token, format:"json" }; request.post({url:url,form:params_3},function(error,res,body){ if(error){ return; } console.log(body); }); } // Start From Step 1 getLoginToken();
MediaWiki JS
/* rollback.js MediaWiki API Demos Demo of `rollback` module: Sending post request to rollback the last edits made to a given page. MIT License */ varparams={ action:'rollback', title:'Sandbox', user:'10.0.2.2', format:'json' }, api=newmw.Api(); api.postWithToken('rollback',params).done(function(data){ console.log(data); });
Разрешения
Для отката требуются права как edit, так и rollback для целевой страницы; в настоящее время это означает, что пользователи OAuth, пароли ботов и т.д. требуют обладания как editpage, так и rollback – одних прав rollback недостаточно!
Возможные ошибки
В дополнение к обычным:
| Код | Информация |
|---|---|
| alreadyrolled | Страница, которую вы попытались откатить, уже была откачена |
| missingparams | Требуется указать один из параметров title и pageid.
|
| mustpostparams | Для модуля отката требуется запрос POST. |
| notitle | Параметр title должен быть задан. |
| notoken | Параметр token должен быть задан. |
| nouser | Параметр user должен быть задан. |
| onlyauthor | Страница, которую вы попытались откатить, имеет только одного автора |
| permissiondenied | Запрошенное вами действие доступно только пользователям из одной из групп: Администраторы, Откатывающие |
История параметров
- v1.24: Введены
pageid - v1.27: Введены
tags - v1.17: Введены
watchlist
Дополнительная информация
- Необязательно, как откат, так и откатываемые правки могут быть отмечены как сделанные ботом, что по умолчанию скрывает их из Special:RecentChanges.
См. также
- API:Edit - Редактирует страницу.
- Справка:Редактирование - Содержит полезные ссылки по редактированию статей.
- API:Токены - Содержит дополнительные сведения об использовании токенов для входа в систему или выполнении запросов POST.
- API:Tokens (действие) - Устаревший API, отличный от API:Токены , для запроса токенов в более ранних версиях MediaWiki.
- API:Filerevert - Откат файлов в более раннее состояние.
- API:Revisiondelete - Удаляет и восстанавливает версии страниц.
- API:Compare - Позволяет вам различать изменения на странице.