API:Import
Appearance
Outdated translations are marked like this.
Bu sayfa MediaWiki Eylem API'si belgelerinin bir parçasıdır. |
MediaWiki sürümü: | ≥ 1.15 |
POST isteği başka bir vikiden (transwikiing) veya bir xml dosyasından bir sayfayı içe aktarmak için.
API belgesi
Import process
Bir sayfayı içe aktarmak çok adımlı bir işlemdir:
- API:Oturum aç içinde açıklanan yöntemlerden birini kullanarak oturum açın.
- bir GET CSRF anahtarı . Bu anahtar tüm sayfalar için aynıdır, ancak her girişte değişir.
- Sayfayı içe aktarmak için CSRF jetonuyla bir POST isteği gönderin.
Aşağıdaki kod örnekleri üçüncü adımı ayrıntılı olarak kapsamaktadır.
Örnek 1: Başka bir vikiden sayfa içe aktar
POST isteği
Help:ParserFunctions öğesini tam geçmişe sahip Manual ad alanına (100 ad alanı) aktarın.
api.php? action=import& interwikisource=meta& interwikipage=Help:ParserFunctions& namespace=100& fullhistory& token=123ABC [ApiSandbox'ta deneyin]
Yanıt
{
"import": [
{
"ns": 12,
"revisions": 639,
"title": "Help:ParserFunctions"
}
]
}
Örnek kod
Python
#!/usr/bin/python3
"""
import_interwiki.py
MediaWiki Action API Code Samples
Demo of `Import` module: Import a page from another wiki by
specifying its title
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",
'loginreturnurl': 'http://127.0.0.1:5000/',
"format":"json",
"logintoken":LOGIN_TOKEN
}
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 import page from another wiki
PARAMS_4 = {
"action": "import",
"format": "json",
"interwikisource": "meta",
"interwikipage": "Help:ParserFunctions",
"fullhistory":"true",
"namespace":"100",
"token": CSRF_TOKEN
}
R = S.post(url=URL, data=PARAMS_4)
DATA = R.json()
print(DATA)
PHP
<?php
/*
import_interwiki.php
MediaWiki API Demos
Demo of `Import` module: Import a page from another wiki by
specifying its title
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
import( $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" => "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: POST request to import page from another wiki
function import( $csrftoken ) {
global $endPoint;
$params4 = [
"action" => "import",
"interwikisource" => "wikipedia:en",
"interwikipage" => "Pragyan (rover)",
"namespace" => "0",
"fullhistory" => "true",
"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
/*
import_interwiki.js
MediaWiki API Demos
Demo of `Import` module: Import a page from another wiki by
specifying its title
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: "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);
import_interwiki(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to import page from another wiki
function import_interwiki(csrf_token) {
var params_3 = {
action: "import",
interwikisource: "wikipedia:en",
interwikipage: "Pragyan (rover)",
namespace: "0",
fullhistory: "true",
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
/*
import_interwiki.js
MediaWiki API Demos
Demo of `Import` module: Import a page from another wiki by
specifying its title
MIT License
*/
var params = {
action: 'import',
interwikisource: 'en:w',
interwikipage: 'Template:!-',
fullhistory: 'true',
namespace: '100',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
Örnek 2: Bir sayfayı xml dökümünü yükleyerek içe aktarın
POST isteği
Special:Export üzerinden elde edilen xml dökümünü yükleyerek Help:ParserFunctions dosyasını içe aktarın.
Bir dosya yüklerken, multipart/form-data
ile Content-Type veya şifrelemek için kullanmanız gerekir, application/x-www-form-urlencoded
çalışmaz.
xml
parametresi bir dosya adı değil, bir dosyanın gerçek içeriğidir.api.php? action=import& xml=xmlcontentgoeshere& interwikiprefix=meta& token=123ABC [ApiSandbox'ta deneyin]
Yanıt
Yanıt |
---|
{
"import": [
{
"ns": 12,
"title": "Help:ParserFunctions",
"revisions": 639
}
]
}
|
Örnek Kod
Python
#!/usr/bin/python3
"""
import_xml.py
MediaWiki Action API Code Samples
Demo of `Import` module: Import a page from another wiki
by uploading its xml dump
MIT license
"""
import requests
S = requests.Session()
URL = "https://test.wikipedia.org/w/api.php"
FILE_PATH = '/path/to/your/file.xml'
# 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.
# importupload 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",
'loginreturnurl': 'http://127.0.0.1:5000/',
"format":"json",
"logintoken":LOGIN_TOKEN
}
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 upload xml dump.
# xml dumps can be downloaded through Special:Export
# See https://www.mediawiki.org/wiki/Special:Export
PARAMS_4 = {
"action": "import",
"format": "json",
"token": CSRF_TOKEN,
"interwikiprefix": "meta"
}
FILE = {'xml':('file.xml', open(FILE_PATH))}
R = S.post(url=URL, files=FILE, data=PARAMS_4)
DATA = R.json()
print(DATA)
JavaScript
/*
import_xml.js
MediaWiki API Demos
Demo of `Import` module: Import a page from another wiki
by uploading its xml dump
MIT license
*/
var fs = require('fs'),
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: "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);
import_xml(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to upload xml dump.
// xml dumps can be downloaded through Special:Export
// See https://www.mediawiki.org/wiki/Special:Export
function import_xml(csrf_token) {
var params_3 = {
action: "import",
interwikiprefix: "en",
token: csrf_token,
format: "json"
};
var file = {
xml: fs.createReadStream('a.xml')
};
var formData = Object.assign( {}, params_3, file );
request.post({ url: url, formData: formData }, function (error, res, body) {
if (error) {
return;
}
console.log(body);
});
}
// Start From Step 1
getLoginToken();
Olası hatalar
Standart hata mesajları na ek olarak:
Code | Info |
---|---|
notoken | token parametresi ayarlanmalıdır. |
cantimport | Sayfaları içe aktarma izniniz yok. |
cantimport-upload | Yüklenen sayfaları içe aktarma izniniz yok. |
nointerwikipage | interwikipage parametresi ayarlanmalıdır. |
nofile | Dosya yüklemediniz |
filetoobig | Yüklediğiniz dosya, maksimum yükleme boyutundan daha büyük |
partialupload | Dosya yalnızca kısmen yüklendi |
notempdir | Geçici yükleme dizini eksik Bu genellikle sunucunun bozuk veya yanlış yapılandırılmış olduğu anlamına gelir
|
cantopenfile | Yüklenen dosya açılamadı Bu genellikle sunucunun bozuk veya yanlış yapılandırılmış olduğu anlamına gelir
|
badinterwiki | Geçersiz vikiarası başlığı belirtildi |
import-unknownerror | İçe aktarmada bilinmeyen hata: error. |
Parametre geçmişi
- v1.29:
tags
tanıtıldı - v1.20:
rootpage
tanıtıldı
Ek notlar
- Bu modül jeneratör olarak kullanılamaz.
- Bir xml dosyasını yüklemek için
importupload
hak, vikiarası aktarımları içinimport
hak gereklidir. Missing boundary in multipart/form-data POST data
hata alırsanız, bunun nedeni url kodlu göndermiş olmanız ancak bunun çok bölümlü/form verisi olacağını iddia etmesidir. MediaWiki üstbilgide bir sınır arıyor ancak bulamıyor.upload
ile işaretlenmiş parametreler yalnızca yüklenen bir XML dosyası içe aktarılırken kullanılır. Benzer şekilde,interwiki
ile işaretlenmiş parametreler yalnızca başka bir vikiden (vikiarası) içe aktarılırken kullanılır.interwikisource
parametresi için olası değerler vikiye göre değişir, Manual:$wgImportSources sayfasına bakın. Bu parametre için olası değerler listesi boşsa, vikiarası aktarım devre dışı bırakılır.
Ayrıca bakınız
- Special:Export - Belirli bir sayfanın veya bazı XML'de sarılmış sayfalar grubunun metnini ve düzenleme geçmişini dışa aktarın.
- API aracılığıyla sayfaları dışa aktarın .
- API:Upload - Bir dosya yükle.