API:Rollback/es
Esta página es parte de la documentación de la API de acciones de MediaWiki. |
Versión de MediaWiki: | ≥ 1.12 |
Petición de CORREO para revertir la última serie de ediciones realizadas por un usuario en una página determinada.
API Documentación
Ejemplo
Hacer cualquier petición de CORREO es un proceso de múltiples-pasos:
- Iniciar sesión, vía uno de los métodos descritos en API:Login .
- CONSEGUIR un CSRF token :
- Envíe una solicitud POST, con el token CSRF, para tomar medidas sobre una página y en este proceso consiga derechos
editpage
para la página dada: - GET a rollback token:
- Si tu wiki está utilizando MediaWiki 1.24+, sigue estas instrucciones:
- Los tokens de reversión no son universales: no solo son diferentes para cada inicio de sesión, sino que también dependen del título de la página y del nombre del usuario cuyas ediciones están siendo revertidas. Para MediaWiki 1.23 o anterior, sigue estas instrucciones:
Petición de CORREO
Envíe una petición POST, con un token de retroceso para revertir las ediciones de un usuario a la página Sandbox.
Respuesta
La sección de Respuesta abajo es para la solicitud POST final, para revertir las ediciones a la página Sandbox.
{
"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
}
}
Los ID de revisión en la respuesta son:
revid
- El ID de la nueva revisión creada por la reversión.old_revid
- El ID de la revisión más reciente que se revierte. Antes de la reversión, esta era la revisión actual.last_revid
- El ID de la revisión que está siendo restaurada por la reversión. Esta es la revisión más nueva en haber sido revertida.
Código de ejemplo
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
"""
import requests
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
*/
var request = require('request').defaults({jar: true}),
url = "http://dev.wiki.local.wmftest.net:8080/w/api.php";
// Step 1: GET request to fetch login token
function getLoginToken() {
var params_0 = {
action: "query",
meta: "tokens",
type: "login",
format: "json"
};
request.get({ url: url, qs: params_0 }, function (error, res, body) {
if (error) {
return;
}
var data = 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
function loginRequest(login_token) {
var params_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
function getRollbackToken() {
var params_2 = {
action: "query",
meta: "tokens",
type: "rollback",
format: "json"
};
request.get({ url: url, qs: params_2 }, function(error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
rollback(data.query.tokens.rollbacktoken);
});
}
// Step 4: POST request to rollback a page
function rollback(rollback_token) {
var params_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
*/
var params = {
action: 'rollback',
title: 'Sandbox',
user: '10.0.2.2',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'rollback', params ).done( function ( data ) {
console.log( data );
} );
Permisos
La reversión requiere tanto edit
como rollback
justo en la página objetivo; actualmente, esto significa que los consumidores de OAuth, los bot contraseñas, etc. requieren ambos otorgar el editpage
y el rollback
: ¡rollback
por sí solo no es suficiente!
Posibles errores
Además de el material habitual:
Código | Info |
---|---|
alreadyrolled | La página que probaste a revertir ya estaba revertida |
missingparams | Uno de los parámetros title o
|
mustpostparams | El módulo de reversión requiere una petición POST. |
notitle | Se debe establecer el parámetro title. |
notoken | Se debe establecer el parámetro token. |
nouser | Se debe establecer el parámetro user. |
onlyauthor | La página que probaste a revertir solo tiene un autor |
permissiondenied | La acción has pedido está limitado a usuarios en uno de los grupos: |
Historia de parámetro
- v1.24: Introducido
pageid
- v1.27: Introducido
tags
- v1.17: Introducido
watchlist
Notas adicionales
- Opcionalmente, tanto la reversión como las ediciones que se revierten pueden ser marcardas como bot, lo que las oculta de Special:RecentChanges por defecto.
Véase también
- API:Edita - Edita una página.
- Ayuda:Edición - Contiene enlaces útiles sobre edición de artículos.
- API:Tokens - Tiene más detalles sobre el uso de tokens para iniciar sesión o realizar solicitudes POST.
- API:Tokens (Acción) - Una API en desuso, distinta de API:Tokens , para solicitar tokens en versiones anteriores de MediaWiki.
- API:Filerevert - Revertir archivos a un estado anterior
- API:Revisiondelete - Elimina y restaura revisiones a una página.
- API:Compara - Te permite diferenciar entre ediciones en una página.