API:Undelete

This page is a translated version of the page API:Undelete and the translation is 97% complete.
MediaWiki sürümü:
1.12

Silinen bir sayfanın revizyonları geri getirmek için POST isteği.

API belgesi


action=undelete

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

Undelete revisions of a deleted page.

A list of deleted revisions (including timestamps) can be retrieved through prop=deletedrevisions, and a list of deleted file IDs can be retrieved through list=filearchive.

Specific parameters:
Other general parameters are available.
title

Title of the page to undelete.

This parameter is required.
reason

Reason for restoring.

Default: (empty)
tags

Change tags to apply to the entry in the deletion log.

Values (separate with | or alternative): convenient-discussions, possible vandalism, repeating characters
timestamps

Timestamps of the revisions to undelete. If both timestamps and fileids are empty, all will be undeleted.

Type: list of timestamps (allowed formats)
Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
fileids

IDs of the file revisions to restore. If both timestamps and fileids are empty, all will be restored.

Type: list of integers
Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
undeletetalk

Undelete all revisions of the associated talk page, if any.

Type: boolean (details)
watchlist

Unconditionally add or remove the page from the current user's watchlist, use preferences (ignored for bot users) or do not change watch.

One of the following values: nochange, preferences, unwatch, watch
Default: preferences
watchlistexpiry

Watchlist expiry timestamp. Omit this parameter entirely to leave the current expiry unchanged.

Type: expiry (details)
token

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

This parameter is required.

Örnek

Bir sayfanın revizyonlarını geri almak çok adımlı bir işlemdir:

  1. API:Oturum aç içinde açıklanan yöntemlerden birini kullanarak oturum açın.
  2. CSRF anahtarı alın. Bu anahtar tüm sayfalar için aynıdır, ancak her girişte değişir.


  3. Silme işlemini geri almak için CSRF anahtarı ile bir POST isteği gönderin.

Aşağıdaki örnek kod, üçüncü adımı ayrıntılı olarak kapsamaktadır.

POST isteği

Sandbox/Test'in iki revizyonunu geri yükleyin.


Yanıt

{
  "undelete": {
    "fileversions": 0,
    "reason": "Test undeleting via the API",
    "revisions": 2,
    "title": "Sandbox/Test"
  }
}

Örnek kod

Python

#!/usr/bin/python3

"""
    undelete.py

    MediaWiki API Demos
    Demo of `Undelete` module: Restore two revisions of a deleted page

    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 login.
# Obtain credentials for lgname & lgpassword via Special:BotPasswords
# (https://www.mediawiki.org/wiki/Special:BotPasswords)
PARAMS_2 = {
    "action": "login",
    "lgname": "username",
    "lgpassword": "password",
    "lgtoken": LOGIN_TOKEN,
    "format": "json"
}

R = S.post(URL, data=PARAMS_2)

# Step 3: While logged in, get an 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 restore two revisions of a deleted page
PARAMS_4 = {
    "action": "undelete",
    "format": "json",
    "token": CSRF_TOKEN,
    "title": "Sandbox/Test",
    "timestamps":"20190605072148|20190605074313",
    "reason": "Test undeleting via the API"
}

R = S.post(URL, data=PARAMS_4)
DATA = R.json()

print(DATA)

PHP

<?php

/*
    undelete.php

    MediaWiki API Demos
    Demo of `Undelete` module: Restore two revisions of a deleted page
    MIT license
*/

$endPoint = "http://dev.wiki.local.wmftest.net:8080/w/api.php";

$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$csrf_Token = getCSRFToken(); // Step 3
undelete( $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: POST request to log in. Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest( $logintoken ) {
	global $endPoint;

	$params2 = [
		"action" => "login",
		"lgname" => "bot_user_name",
		"lgpassword" => "bot_password",
		"lgtoken" => $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: POST request to restore the deleted page
function undelete( $csrftoken ) {
	global $endPoint;

	$params4 = [
		"action" => "undelete",
		"title" => "Sandbox",
		"reason" => "Test undeleting via the API",
		"token" => $csrftoken,
		"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( $params4 ) );
	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 );

	echo ( $output );
}

JavaScript

/*  
    undelete.js
 
    MediaWiki API Demos
    Demo of `Undelete` module: Restore two revisions of a deleted page

    MIT license
*/

var request = require('request').defaults({jar: true}),
    url = "http://dev.wiki.local.wmftest.net:8080/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: POST request to log in. 
// Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest(login_token) {
    var params_1 = {
        action: "login",
        lgname: "bot_username",
        lgpassword: "bot_password",
        lgtoken: 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);
        editRequest(data.query.tokens.csrftoken);
    });
}

// Step 4: POST request to restore the deleted page
function editRequest(csrf_token) {
    var params_3 = {
        action: "undelete",
        title: "Sandbox",
        reason: "Test undeleting via the API",
        token: csrf_token,
        format: "json"
    };

    request.post({ url: url, form: params_3 }, function (error, res, body) {
        if (error) {
            return;
        }
        console.log(body);
    });
}

// Start From Step 1
getLoginToken();

MediaWiki JS

/*
	undelete.js

	MediaWiki API Demos
	Demo of `Undelete` module: Restore two revisions of a deleted page

	MIT License
*/

var params = {
		action: 'undelete',
		title: 'Sandbox',
		reason: 'Test undeleting via the API',
		format: 'json'
	},
	api = new mw.Api();

api.postWithToken( 'csrf', params ).done( function ( data ) {
	console.log( data );
} );

Olası hatalar

Standart hata mesajları na ek olarak:

Kod Bilgi
notitle title parametresi ayarlanmalıdır.
notoken token parametresi ayarlanmalıdır.
permissiondenied sayfaları geri getir izniniz yok.
On most wikis, restoring deleted revisions is restricted to sysops, but other wikis may have stricter rules.
cantundelete Silme işlemi geri alınamadı: istenen düzeltmeler mevcut olmayabilir veya zaten silme işlemi geri alınmış olabilir.

Parametre geçmişi

  • v1.39: Introduced undeletetalk
  • v1.25: tags tanıtıldı
  • v1.24: fileids tanıtıldı
  • v1.16: watchlist tanıtıldı

Ek notlar

Ayrıca bakınız