API:Rollback/tr
Bu sayfa MediaWiki Eylem API'si belgelerinin bir parçasıdır. |
MediaWiki sürümü: | ≥ 1.12 |
POST isteği, bir kullanıcının yaptığı son düzenleme serisini belirli bir sayfaya geri döndürmek içindir.
Bu işlevsellik, geçmiş sayfasındaki grafik arayüzdeki geri alma bağlantıları tarafından sağlanan işlevle aynıdır.
API belgesi
Örnek
Herhangi bir POST isteği yapmak çok adımlı bir işlemdir:
- API:Oturum aç üzerinde açıklanan yöntemlerden birini kullanarak oturum açın.
- CSRF anahtar GET'i:
- CSRF anahtarıyla bir sayfada işlem yapmak için bir POST isteği gönderin ve bu işlemde verilen sayfaya
editpage
hak verin: - GET a rollback token:
- Vikiniz MediaWiki 1.24+ kullanıyorsa şu talimatları uygulayın:
- Geri alma anahtarı evrensel değildir: yalnızca her giriş için farklı değildir, aynı zamanda sayfanın başlığına ve düzenlemeleri geri alınacak kullanıcının adına da bağlıdır. MediaWiki 1.23 veya öncesi için şu talimatları izleyin:
POST isteği
Bir kullanıcının düzenlemelerini Deneme Tahtası sayfasına geri döndürmek için bir geri alma anahtarıyla bir POST isteği gönderin.
Bu örnekte, tüm parametreler sadece basitlik amacıyla bir GET isteğinde iletilir. Ancak, action=rollback POST istekleri gerektirir; GET istekleri hataya neden olur.
api.php? action=rollback& format=json& title=Sandbox& user=41.190.3.231& token=d36a517a732991d5aaafae8bd40eee4a5c7bf75a+\\ [ApiSandbox'ta deneyin]
Yanıt
Aşağıdaki Yanıt bölümü, düzenlemeleri Deneme Tahtası sayfasına geri döndürmek için son POST isteği içindir.
{
"rollback": {
"title": "Sandbox",
"pageid": 94542,
"summary": "Reverted edits by [[Special:Contributions/41.190.3.231|41.190.3.231]] ([[User talk:41.190.3.231|talk]]) to last revision by [[User:Didicodes|Didicodes]]",
"revid": 381084,
"old_revid": 381083,
"last_revid": 381070
}
}
Yanıttaki revizyon kimlikleri:
revid
- Geri alma tarafından oluşturulan yeni revizyonun kimliği.old_revid
- En yeni revizyonun kimliği geri alınıyor. Geri alma işleminden önce, bu geçerli düzeltmedir.last_revid
- Revizyonun geri alma tarafından geri yüklenen kimliği. Bu geri alınan en yeni revizyon.
Örnek kod
Python
#!/usr/bin/python3
"""
rollback.py
MediaWiki API Demos
Demo of `rollback` module: Sending post request to rollback the
last edits made to a given 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. Use of main account for login is not
# supported. Obtain credentials via Special:BotPasswords
# (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
PARAMS_2 = {
"action": "login",
"lgname": "bot_user_name",
"lgpassword": "bot_password",
"lgtoken": LOGIN_TOKEN,
"format": "json"
}
R = S.post(URL, data=PARAMS_2)
# 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: POST request to edit a page
PARAMS_4 = {
"action": "edit",
"title": "Project:Sandbox",
"token": CSRF_TOKEN,
"format": "json",
"appendtext": "Hello"
}
R = S.post(URL, data=PARAMS_4)
# Step 5: Retrieve a rollback token
PARAMS_5 = {
"action": "query",
"meta": "tokens",
"type": "rollback",
"format": "json"
}
R = S.get(url=URL, params=PARAMS_5)
DATA = R.json()
ROLLBACK_TOKEN = DATA['query']['tokens']['rollbacktoken']
# Step 5: POST request to rollback a page
PARAMS_6 = {
"action": "rollback",
"format": "json",
"title": "Project:Sandbox",
"user": "bot_user_name",
"token": ROLLBACK_TOKEN,
}
R = S.post(URL, data=PARAMS_6)
DATA = R.json()
print(DATA)
PHP
<?php
/*
rollback.php
MediaWiki API Demos
Demo of `rollback` module: Sending post request to rollback the
edits of a given page.
MIT license
*/
$endPoint = "http://dev.wiki.local.wmftest.net:8080/w/api.php";
$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$rollback_Token = getRollbackToken(); // Step 3
rollback( $rollback_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 rollback token
function getRollbackToken() {
global $endPoint;
$params3 = [
"action" => "query",
"meta" => "tokens",
"type" => "rollback",
"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"]["rollbacktoken"];
}
// Step 4: POST request to rollback a page
function rollback( $rollback_Token ) {
global $endPoint;
$params4 = [
"action" => "rollback",
"title" => "Project:Sandbox",
"user" => "10.0.2.2",
"token" => $rollback_Token,
"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
/*
rollback.js
MediaWiki API Demos
Demo of `rollback` module: Sending post request to rollback the
edits of a given 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;
}
getRollbackToken();
});
}
// Step 3: GET request to fetch Rollback token
function getRollbackToken() {
var params_2 = {
action: "query",
meta: "tokens",
type: "rollback",
format: "json"
};
request.get({ url: url, qs: params_2 }, function(error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
rollback(data.query.tokens.rollbacktoken);
});
}
// Step 4: POST request to rollback a page
function rollback(rollback_token) {
var params_3 = {
action: "rollback",
title: "Project:Sandbox",
user: "10.0.2.2",
token: rollback_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
/*
rollback.js
MediaWiki API Demos
Demo of `rollback` module: Sending post request to rollback the
last edits made to a given page.
MIT License
*/
var params = {
action: 'rollback',
title: 'Sandbox',
user: '10.0.2.2',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'rollback', params ).done( function ( data ) {
console.log( data );
} );
İzinler
Geri alma, hedef sayfada hem edit
hem de rollback
gerektirir; şu anda bu, OAuth tüketicilerinin, bot parolalarının vb. hem editpage
hem de rollback
hibe gerektirdiği anlamına geliyor, tek başına rollback
yeterli değil!
Olası hatalar
Olağan şeylere ek olarak:
Kod | Bilgi |
---|---|
alreadyrolled | Geri almaya çalıştığınız sayfa zaten geri alındı |
missingparams | title ve pageid parametrelerinden biri gerekiyor.
|
mustpostparams | Geri alma modülü bir POST isteği gerektirir. |
notitle | title parametresi ayarlanmalıdır. |
notoken | token parametresi ayarlanmalıdır. |
nouser | user parametresi ayarlanmalıdır. |
onlyauthor | Geri almaya çalıştığınız sayfanın yalnızca bir yazarı var |
permissiondenied | İstediğiniz işlem gruplardan birindeki kullanıcılarla sınırlıdır: Hizmetliler, Geri döndürücüler |
Parametre geçmişi
- v1.24:
pageid
tanıtıldı - v1.27:
tags
tanıtıldı - v1.17:
watchlist
tanıtıldı
Ek notlar
- İsteğe bağlı olarak, hem geri alma hem de geri alınan düzenlemeler bot olarak işaretlenebilir ve bu da varsayılan olarak Special:RecentChanges sayfasından gizler.
Ayrıca bakınız
- API:Edit - Bir sayfayı düzenler.
- Help:Düzenleme - Maddeleri düzenlemeyle ilgili faydalı bağlantılar içerir.
- API:Tokens - Oturum açmak veya POST istekleri yapmak için anahtarları kullanma hakkında daha fazla ayrıntıya sahiptir.
- API:Tokens (eylem) - MediaWiki'nin önceki sürümlerinde anahtar istemek için API:Tokens üzerinden farklı, kullanımdan kaldırılmış bir API.
- API:Filerevert - Dosyaları daha önceki bir duruma geri alır.
- API:Revisiondelete - Bir sayfadaki revizyonları siler ve geri yükler.
- API:Compare - Bir sayfadaki düzenlemeler arasında değişiklik yapmanızı sağlar.