API:Mergehistory/cs
![]() | Tato stránka je součástí dokumentace k API Action MediaWiki. |
Požadavek POST ke sloučení historie stránek.
Verze MediaWiki: | ≥ 1.27 |
Dokumentace API
![]() | Následující dokumentace je výstupem Special: |
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.
- Type: timestamp (allowed formats)
- reason
Reason for the history merge.
- Default: (empty)
- 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-31T04:37:41Z into Newpage.
- api.php?action=mergehistory&from=Oldpage&to=Newpage&token=123ABC&reason=Reason×tamp=2015-12-31T04%3A37%3A41Z [open in sandbox]
Příklad
Vytvoření jakéhokoli požadavku POST je proces složený z několika kroků:
- Přihlaste se jedním ze způsobů popsaných na stránce API:Přihlášení .
- GET edit/CSRF token, jak je uvedeno zde API: Tokeny
- Odešlete požadavek POST s tokenem CSRF ke sloučení historie stránek.
Následující ukázkové kódy pokrývají tyto kroky.
Požadavek POST
Odpověď
{
"api": {
"mergehistory": {
"_from": "Oldpage",
"_to": "Newpage",
"_timestamp": "2015-12-31T04:37:41Z",
"_reason": "Reason"
}
}
}
Ukázkový kód
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
*/
Možné chyby
Kód | Popis |
---|---|
badtoken | Invalid CSRF token. |
apierror-invalidtitle | Bad title "from". Bad title "to". |
apierror-nosuchpageid | There is no page with ID fromid. There is no page with ID toid. |
Další poznámky
- Special:MergeHistory - speciální stránka, která umožňuje automaticky sloučit historii dvou stránek. Tato funkce je však přístupná pouze uživatelům s uživatelským právem
mergehistory
.
Související odkazy
- Nápověda:MergeHistory - obsahuje užitečné odkazy a informace o slučování historie stránek