Jump to content
MediaWiki

API:Mergehistory

From mediawiki.org
This page is a translated version of the page API:Mergehistory and the translation is 100% complete.
Esta página es parte de la documentación de la API de acciones de MediaWiki.
API de acciones de MediaWiki
Uso básico
Autentificación
Cuentas y usuarios
Operaciones en páginas
Búsqueda
Herramientas de desarrollador
Tutoriales
v · d · e

Solicitud POST para para fusionar historiales de página.

Versión de MediaWiki:
≥ 1.27

Documentación de la API

La siguiente documentación es la salida de Special:ApiHelp/mergehistory, generada automáticamente por la versión de prelanzamiento de MediaWiki que está en ejecución en este sitio (MediaWiki.org).

action=mergehistory

(main | mergehistory)
  • This module requires read rights.
  • This module requires write rights.
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Merge page histories.

Specific parameters:
Other general parameters are available.
from

Title of the page from which history will be merged. Cannot be used together with fromid.

fromid

Page ID of the page from which history will be merged. Cannot be used together with from.

Type: integer
to

Title of the page to which history will be merged. Cannot be used together with toid.

toid

Page ID of the page to which history will be merged. Cannot be used together with to.

Type: integer
timestamp

Timestamp up to which revisions will be moved from the source page's history to the destination page's history. If omitted, the entire page history of the source page will be merged into the destination page. May specify "timestamp|revid" to split two revisions with the same timestamp.

reason

Reason for the history merge.

Default: (empty)
starttimestamp

Timestamp from which revisions will be moved from the source page's history to the destination page's history. If omitted, all revisions before the timestamp parameter (or the entire history if neither are specified) will be merged into the destination page. May specify "timestamp|revid" to split two revisions with the same timestamp.

token

A "csrf" token retrieved from action=query&meta=tokens

This parameter is required.

Ejemplo

Hacer cualquier solicitud POST es un proceso de varios pasos:

  1. Iniciar sesión, a través de uno de los métodos descritos en API:Login .
  2. GET un edit/CSRF token como muestra aquí API:Tokens
  3. 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月31日T04: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月31日T04:37:41Z into Newpage
 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 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月31日T04:37:41Z into Newpage
PARAMS_4 = {
 "action":"mergehistory",
 "from":"Oldpage",
 "to":"Newpage",
 "format":"json",
 "timestamp":"2015年12月31日T04: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月31日T04: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月31日T04:37:41Z into Newpage
function mergeHistory( $csrftoken ) {
	global $endPoint;
	
	$params4 = [
		"action"=>"mergehistory",
		"from"=>"Oldpage",
		"to"=>"Newpage",
		"format"=>"json",
		"timestamp"=>"2015年12月31日T04: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月31日T04:37:41Z into Newpage
 MIT license
*/
varrequest=require("request").defaults({jar:true}),
url="https://test.wikipedia.org/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: 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.
functionloginRequest(login_token){
varparams_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
functiongetCsrfToken(){
varparams_2={
action:"query",
meta:"tokens",
format:"json"
};
request.get({url:url,qs:params_2},function(error,res,body){
if(error){
return;
}
vardata=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月31日T04:37:41Z into Newpage
functionmergeHistory(csrf_token){
varparams_3={
action:"mergehistory",
from:"Oldpage",
to:"Newpage",
reason:"Reason",
format:"json",
timestamp:"2015年12月31日T04: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

Véase también

AltStyle によって変換されたページ (->オリジナル) /