واجهة برمجة التطبيقات:دمج_التاريخ

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Mergehistory and the translation is 100% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎lietuvių • ‎polski • ‎العربية • ‎ไทย • ‎中文 • ‎日本語

طلب POST لدمج تواريخ صفحة.

إصدار ميدياويكي:
1.23

توثيق واجهة برمجة التطبيقات


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.

Parameters:
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.

مثال

إن تصميم طلب POST هو مسألة متعددة الخطوات:

  1. سجل الدخول مستخدما واحد من السبل المبينة في واجهة برمجة التطبيقات:تسجيل_الدخول .
  2. احصل على رمز تعديل/CSRF كما هو مبين هنا واجهة برمجة التطبيقات:Tokens
  3. أرسل طلب POST مستخدمًا رمز CSRF كي تدمج تواريخ الصفحة.

عينة الكود البرمجي التالية تغطي هذه الخطوات.

طلب POST

النتيجة

{
	"api": {
		"mergehistory": {
			"_from": "Oldpage",
			"_to": "Newpage",
			"_timestamp": "2015-12-31T04:37:41Z",
			"_reason": "Reason"
		}
	}
}

عينة من الكود البرمجي

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

*/

الأخطاء المحتملة

الكود معلومات
badtoken رمز CSRF غير صالح.
apierror-invalidtitle عنوان سيء "from".

عنوان سيء "to".

apierror-nosuchpageid لا توجد صفحة بالمعرف fromid.

لا توجد صفحة بالمعرف toid.

ملاحظات إضافية

  • Special:MergeHistory - هذه صفحة خاصة تيسر الدمج الآلي لتاريخ صفحتين اثنين. إلا أن هذه الخاصية يمكن للمستخدمين الذين يتمتعون بالحق mergehistory دون غيرهم الوصول إليها.

انظر أيضا

  • Help:Merge history - يحتوي على وصلات شبكية مفيدة ومعلومات عن دمج تواريخ صفحة واحدة