API:Undelete
| MediaWiki Action API |
|---|
| Basics |
| Authentication |
| Accounts and Users |
| Page Operations |
|
| Search |
| Developer Utilities |
| Tutorials |
| v · d · e |
POST request to undelete (restore) the revisions of a deleted page.
API documentation
[edit ]action=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.
- title
Title of the page to undelete.
- This parameter is required.
- reason
Reason for restoring.
- Default: (empty)
Change tags to apply to the entry in the deletion log.
- Values (separate with | or alternative): AWB, convenient-discussions
- 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.
Example
[edit ]Undeleting the revisions of a page is a multi-step process:
- Log in using one of the methods described in API:Login .
- Get a CSRF token . This token is the same for all pages but changes at every login.
- Send a POST request with the CSRF token in order to undelete.
The sample code below covers the third step in detail.
POST request
[edit ]Response
[edit ]{ "undelete":{ "fileversions":0, "reason":"Test undeleting via the API", "revisions":2, "title":"Sandbox/Test" } }
Sample code
[edit ]Python
[edit ]#!/usr/bin/python3 """ undelete.py MediaWiki API Demos Demo of `Undelete` module: Restore two revisions of a deleted page 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 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
[edit ]<?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
[edit ]/* undelete.js MediaWiki API Demos Demo of `Undelete` module: Restore two revisions of a deleted page MIT license */ varrequest=require('request').defaults({jar:true}), url="http://dev.wiki.local.wmftest.net:8080/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: 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 functionloginRequest(login_token){ varparams_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 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); editRequest(data.query.tokens.csrftoken); }); } // Step 4: POST request to restore the deleted page functioneditRequest(csrf_token){ varparams_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
[edit ]/* undelete.js MediaWiki API Demos Demo of `Undelete` module: Restore two revisions of a deleted page MIT License */ varparams={ action:'undelete', title:'Sandbox', reason:'Test undeleting via the API', format:'json' }, api=newmw.Api(); api.postWithToken('csrf',params).done(function(data){ console.log(data); });
Possible errors
[edit ]In addition to the standard error messages :
| Code | Info |
|---|---|
| notitle | The title parameter must be set. |
| notoken | The token parameter must be set. |
| permissiondenied | You don't have permission to undelete pages. On most wikis, restoring deleted revisions is restricted to sysops, but other wikis may have stricter rules.
|
| cantundelete | Couldn't undelete: the requested revisions may not exist, or may have been undeleted already. |
Parameter history
[edit ]- v1.39: Introduced
undeletetalk - v1.25: Introduced
tags - v1.24: Introduced
fileids - v1.16: Introduced
watchlist
Additional notes
[edit ]- This module cannot be used as a generator .
- This module requires
undeleterights. - For MediaWiki 1.19 and earlier, you can obtain an undelete token through API:Deletedrevs .
- For MediaWiki 1.20-1.23, you can obtain tokens through API:Tokens (action) .
- Timestamps of deleted revisions can be obtained through API:Deletedrevs , API:Alldeletedrevisions or API:Deletedrevisions .
- Pages that have been deleted or restored are logged at Special:Log/delete.
See also
[edit ]- API:Delete - Deletes a page.