API:Move
Bu sayfa MediaWiki Eylem API'si belgelerinin bir parçasıdır. |
MediaWiki sürümü: | ≥ 1.12 |
Bir sayfayı taşımak için POST isteği.
API belgesi
Örnek
Herhangi bir POST isteği yapmak çok adımlı bir işlemdir:
- API:Oturum aç üzerinde açıklanan yöntemlerden biriyle oturum açın.
- bir GET CSRF anahtarı .
- Bir sayfada işlem yapmak için CSRF anahtarıyla bir POST isteği gönderin.
Aşağıdaki örnek kod, son adımı ayrıntılı olarak kapsamaktadır.
POST isteği
"CurrentTitle" ve tartışma sayfasını bir yönlendirme oluşturmadan "Page with new title" klasörüne taşıyın.
api.php? action=move& from=CurrentTitle& to=Page%20with%20new%20title& reason=wrong%20title& movetalk=1& noredirect=1& token=sampleCsrfToken123+/ [ApiSandbox'ta deneyin]
Yanıt
{
"move": {
"from": "CurrentTitle",
"to": "Page with new title",
"reason": "wrong title",
"talkfrom": "Talk:CurrentTitle",
"talkto": "Talk:Page with new title"
}
}
Örnek kod
Python
#!/usr/bin/python3
"""
move.py
MediaWiki API Demos
Demo of `Move` module: Move a page with its
talk page, without a redirect.
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. For this login
# method, obtain credentials by first visiting
# https://www.test.wikipedia.org/wiki/Manual:Bot_passwords
# See https://www.mediawiki.org/wiki/API:Login for more
# information on log in methods.
PARAMS_2 = {
"action": "login",
"lgname": "user_name",
"lgpassword": "password",
"format": "json",
"lgtoken": 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 move the page
PARAMS_4 = {
"action": "move",
"format": "json",
"from": "Current title",
"to": "Page with new title",
"reason": "Typo",
"movetalk": "1",
"noredirect": "1",
"token": CSRF_TOKEN
}
R = S.post(url=URL, data=PARAMS_4)
DATA = R.text
print(DATA)
PHP
<?php
/*
move.php
MediaWiki API Demos
Demo of `Move` module: Move a page with its
talk page, without a redirect.
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
move( $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 move the page
function move( $csrftoken ) {
global $endPoint;
$params4 = [
"action" => "move",
"from" => "Current title",
"to" => "Page with new title",
"reason" => "API Testing",
"movetalk" => "1",
"noredirect" => "1",
"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
/*
move.js
MediaWiki API Demos
Demo of `Move` module: Move a page with its
talk page, without a redirect.
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: 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);
move(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to move the page
function move(csrf_token) {
var params_3 = {
action: "move",
from: "Current title",
to: "Page with new title",
reason: "API Testing",
movetalk: "1",
noredirect: "1",
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
/*
move.js
MediaWiki API Demos
Demo of `Move` module: Move a page with its talk page,
without a redirect.
MIT License
*/
var params = {
action: 'move',
from: 'Current title',
to: 'Page with new title',
reason: 'API Test',
movetalk: '1',
noredirect: '1',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
Olası hatalar
Kod | Bilgi |
---|---|
nofrom | from parametresi ayarlanmalıdır. |
noto | to parametresi ayarlanmalıdır. |
notoken | token parametresi ayarlanmalıdır. |
cantmove-anon | Anonymous users can't move pages |
cantmove | bu sayfayı taşı izniniz yok. |
cantmovefile | bu dosyayı taşı izniniz yok. Dosya taşıma tamamen devre dışı bırakılırsa, bunun yerine immobilenamespace hatası alırsınız
|
selfmove | Can't move a page to itself |
immobilenamespace | You tried to move pages from or to a namespace that is protected from moving |
articleexists | The destination article already exists |
redirectexists | The destination is a redirect, but is not a single-revision redirect to the source article |
protectedpage | You don't have permission to perform this move |
protectedtitle | The destination article has been protected from creation |
nonfilenamespace | Dosya, dosya olmayan ad alanına taşınamıyor. |
filetypemismatch | Yeni dosya uzantısı tipiyle eşleşmiyor. |
mustbeposted | move modülü bir POST isteği gerektirir. |
Parametre geçmişi
- v1.29:
tags
tanıtıldı - v1.17:
watch
,unwatch
kullanımdan kaldırıldı - v1.17:
watchlist
tanıtıldı
Ek notlar
noredirect
parametresinin başarılı bir şekilde kullanılması, sıradan kullanıcılara değil, botlara ve hizmetlilere verilensuppressredirect
hakkını gerektirir.- Yeniden yönlendirme oluşturmak API'nin varsayılan davranışıdır.
suppressredirect
hakkınız yoksa, API bir hata döndürmez; yalnızca bir yönlendirme oluşturur. - Move API, sayfa taşıma işlemi başarılı olduğunda iki ek hata işleme yöntemi kullanır, ancak tartışma sayfası veya alt sayfa taşıma işlemi başarısız oldu:
- Tartışma sayfası - İlgili hata
talkmove-error-code
vetalkmove-error-info
alanlarına geri döndürülecektir. - Alt sayfa - İlgili hata,
subpages
anahtarı altında standart bircode
/info
yapısı olarak döndürülür.
- Tartışma sayfası - İlgili hata
Ayrıca bakınız
- API:Import - vikiarası içe aktarmaları, sayfaları bir vikinin etrafında taşımak için alternatif bir yol sağlar.