API:Mergehistory
| 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.
Documentación de la API
action=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.
- 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.
- Merge the entire history of Oldpage into Newpage.
- api.php?action=mergehistory&from=Oldpage&to=Newpage&token=123ABC&reason=Reason [open in sandbox]
- Merge the page revisions of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage.
- api.php?action=mergehistory&from=Oldpage&to=Newpage&token=123ABC&reason=Reason×tamp=2015年12月31日T04%3A37%3A41Z [open in sandbox]
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月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
- Special:MergeHistory - una página especial que hace lo posible para fusionar automáticamente el historial de dos páginas.
Véase también
- Help:Fusión de historiales - contiene enlaces útiles e información sobre la fusión de historiales de páginas