API:Mergehistory
Esta página es parte de la documentación de la API de acciones de MediaWiki. |
Solicitud POST para para fusionar historiales de página.
Versión de MediaWiki: | ≥ 1.27 |
Documentación de la API
Ejemplo
Hacer cualquier solicitud POST es un proceso de varios pasos:
- Iniciar sesión, a través de uno de los métodos descritos en API:Login .
- GET un edit/CSRF token como muestra aquí API:Tokens
- Envía una solicitud POST, con el token CSRF, para fusionar los historiales de página.
El código de muestra, abajo, cubre estos pasos.
Solicitud POST
Respuesta
{
"api": {
"mergehistory": {
"_from": "Oldpage",
"_to": "Newpage",
"_timestamp": "2015-12-31T04:37:41Z",
"_reason": "Reason"
}
}
}
Código de muestra
Python
#!/usr/bin/python3
"""
mergehistory.py
MediaWiki API Demos
Demo of `mergehistory` module: Merge the page revisions of Oldpage
dating up to 2015-12-31T04:37:41Z into Newpage
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 log in using the clientlogin method.
# import rights can't be granted using Special:BotPasswords
# hence using bot passwords may not work.
# See https://www.mediawiki.org/wiki/API:Login for more
# information on log in methods.
PARAMS_2 = {
"action": "clientlogin",
"username": "username",
"password": "password",
"format": "json",
"loginreturnurl": "http://127.0.0.1:5000/",
"logintoken": LOGIN_TOKEN
}
R = S.post(URL, data=PARAMS_2)
DATA = R.json()
# 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: Send a POST request to merge the page revisions
# of Oldpage dating up to 2015-12-31T04:37:41Z into Newpage
PARAMS_4 = {
"action":"mergehistory",
"from":"Oldpage",
"to":"Newpage",
"format":"json",
"timestamp":"2015-12-31T04:37:41Z",
"reason":"Reason",
"token" : CSRF_TOKEN
}
R = S.post(URL, data=PARAMS_4)
DATA = R.text
print(DATA)
# To merge entire history of Oldpage to Newpage,
# remove the "timestamp" parameter in step 4
PHP
<?php
/*
mergehistory.php
MediaWiki API Demos
Demo of `mergehistory` module: Merge the page revisions of Oldpage
dating up to 2015-12-31T04:37:41Z into Newpage
MIT license
*/
$endPoint = "https://test.wikipedia.org/w/api.php";
$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$csrf_Token = getCSRFToken(); // Step 3
mergehistory( $csrf_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: Send a post request to log in using the clientlogin method.
// import rights can't be granted using Special:BotPasswords
// hence using bot passwords may not work.
// See https://www.mediawiki.org/wiki/API:Login for more
// information on log in methods.
function loginRequest( $logintoken ) {
global $endPoint;
$params2 = [
"action" => "clientlogin",
"username" => "username",
"password" => "password",
'loginreturnurl' => 'http://127.0.0.1:5000/',
"logintoken" => $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 CSRF token
function getCSRFToken() {
global $endPoint;
$params3 = [
"action" => "query",
"meta" => "tokens",
"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"]["csrftoken"];
}
# Step 4: Send a POST request to merge the page revisions of Oldpage dating up to 2015-12-31T04:37:41Z into Newpage
function mergeHistory( $csrftoken ) {
global $endPoint;
$params4 = [
"action"=>"mergehistory",
"from"=>"Oldpage",
"to"=>"Newpage",
"format"=>"json",
"timestamp"=>"2015-12-31T04:37:41Z",
"reason"=>"Reason",
"token" => $csrftoken
];
$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" );
$response = curl_exec($ch);
curl_close($ch);
echo ($response);
}
/*
To merge entire history of Oldpage to Newpage,
remove the "timestamp" parameter in step 4
*/
JavaScript
/*
mergehistory.js
MediaWiki API Demos
Demo of `mergehistory` module: Merge the page revisions of Oldpage
dating up to 2015-12-31T04:37:41Z into Newpage
MIT license
*/
var request = require("request").defaults({jar: true}),
url = "https://test.wikipedia.org/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: Send a post request to log in using the clientlogin method.
// import rights can't be granted using Special:BotPasswords
// hence using bot passwords may not work.
// See https://www.mediawiki.org/wiki/API:Login for more
// information on log in methods.
function loginRequest(login_token) {
var params_1 = {
action: "clientlogin",
username: "username",
password: "password",
loginreturnurl: "http://127.0.0.1:5000/",
logintoken: login_token,
format: "json"
};
request.post({ url: url, form: params_1 }, function (error, res, body) {
if (error) {
return;
}
getCsrfToken();
});
}
// Step 3: GET request to fetch CSRF token
function getCsrfToken() {
var params_2 = {
action: "query",
meta: "tokens",
format: "json"
};
request.get({ url: url, qs: params_2 }, function(error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
mergeHistory(data.query.tokens.csrftoken);
});
}
// Step 4: Send a POST request to merge the page revisions
// of Oldpage dating up to 2015-12-31T04:37:41Z into Newpage
function mergeHistory(csrf_token) {
var params_3 = {
action: "mergehistory",
from: "Oldpage",
to: "Newpage",
reason: "Reason",
format: "json",
timestamp: "2015-12-31T04:37:41Z",
token: csrf_token
};
request.post({ url: url, form: params_3 }, function(error, res, body) {
if (error) {
return;
}
console.log(body);
});
}
// Start From Step 1
getLoginToken();
/*
To merge entire history of Oldpage to Newpage,
remove the "timestamp" parameter in step 4
*/
Errores posibles
Código | Info |
---|---|
badtoken | La ficha CSRF no es válida. |
apierror-invalidtitle | Título incorrecto "from". Título incorrecto "to". |
apierror-nosuchpageid | No hay ninguna página con identificador fromid. No hay ninguna página con identificador toid. |
Notas adicionales
- Special:MergeHistory - una página especial que hace lo posible para fusionar automáticamente el historial de dos páginas. Sin embargo, esta función solo es accesible para usuarios con
mergehistory
derecho de usuario.
Véase también
- Help:Fusión de historiales - contiene enlaces útiles e información sobre la fusión de historiales de páginas