API:Import/ja

From MediaWiki.org
Jump to navigation Jump to search
言語: English  • 日本語

トークン[edit]

ページを取り込むには、取り込みトークン (import token) が必要です。このトークンは編集トークンと同じで、すべてのページに対して同じトークンを使用できますが、ログインのたびに変化します。Import tokens can be obtained via action=query&meta=tokens, or by using the following method:

取り込みトークンの取得

ページの取り込み[edit]

action=import でページを取り込めます。取り込みには、XML ファイルのアップロード、または別のページの指定、を使用できます (後者はウィキ間転送 (transwiki) とも呼ばれます)。

パラメーター[edit]

(アップロード) の印があるパラメーターは、XML ファイルのアップロードによる取り込みのみに使用します。同様に、(インターウィキ) の印があるパラメーターは、別のウィキからの取り込み (ウィキ間転送) のみに使用します。

  • summary: 取り込み記録用の要約 (省略可能)
  • xml: アップロードする XML ファイル (アップロード)
  • interwikisource: 取り込み元のウィキ (インターウィキ)
    • The possible values for this parameter differ per wiki, see $wgImportSources. If the list of possible values for this parameter is empty, interwiki imports are disabled
  • interwikipage: 取り込み先ページのページ名 (インターウィキ)
  • fullhistory: 設定した場合、現在の版のみではなく、完全な履歴を取り込む (インターウィキ)
  • templates: 参照読み込みされたテンプレートもすべて取り込む (インターウィキ)
  • namespace: 取り込み先の名前空間。設定しなかった場合、ページの名前空間を変更しません (インターウィキ)
  • rootpage: Import as subpage of this page. Cannot be used together with namespace. 1.20+
  • tags: Tags to apply to the entry in the import log and to the null revision on the imported pages. 1.29+
  • token: 以前のリクエストで取得したトークン。必ず末尾の +\%2B%5C に urlencode するようにしてください

[edit]

注記: In these examples, all parameters are passed in a GET request just for the sake of simplicity. However, action=import requires POST requests; GET requests will cause an error.

インターウィキ[edit]

Help:ParserFunctions を、完全な履歴付きで Manual 名前空間 (名前空間 100) に取り込む

XML ファイル[edit]

(Special:Export で書き出しをした) XML ダンプ dump.xml を、Manual 名前空間 (名前空間 100) に取り込む

When uploading a file, you need to use multipart/form-data as Content-Type or enctype, application/x-www-form-urlencoded will not work. The parameter xml is not a file name, but the actual content of a file.

Ruby source code example using httpclient (assumes login cookies are already in @headers)

 res = HTTPClient.post(@api_url, {
                              :action => 'import',
                              :xml => File.open("dump.xml"),
                              :token => token,
                              :format => 'xml'}, @headers)
FormData[edit]

If the result says "no file" it is expecting a file in a POST body. You can easily POST using FormData.

To quote from /api.php

    xml      - Uploaded XML file
               Must be posted as a file upload using multipart/form-data
JavaScript example[edit]

For simplicity, the following code is reading the XML from a textarea and makes use of MediaWiki's JavaScript includes:

 var apiUrl = mw.util.wikiScript( 'api' );
 var onreadystatechange = function() {
	if ( 4 !== this.readyState ) return;
	if ( 200 === this.status ) {
	  console.log( this.response );
	}
 };
 
 function continueWithToken ( token ) {
	  var fd = new FormData();
	  var xhr = new XMLHttpRequest();
	  // First argument is an array!
	  var bXml = new Blob( [$( 'textarea' ).val()], {
				 type: 'text/xml'
			} );
	  fd.append( 'format', 'json' );
	  fd.append( 'action', 'import' );
	  // Third parameter is not required but
	  // You're likely on the safe side using it
	  fd.append( 'xml', bXml, 'file.xml' );
	  fd.append( 'token', token );
 
	  xhr.onreadystatechange = onreadystatechange;
	  xhr.open( 'POST', apiUrl );
	  xhr.send( fd );
 }
 
 $.get( apiUrl, {
	  format: 'json',
	  type: 'import',
	  action: 'tokens'
 } ).done( function(r) {
	  var token = r.tokens.importtoken;
	  continueWithToken( token );
 } );

This is just a minimal implementation. Do not forget error-handling. If you have the exports as files for upload and want to make it working in older browsers not sufficiently supporting Blobs and FormData, just build a HTML form. The form's target could be an iframe so you can read the response from it without exposing the blank API result page to your users.

Expected response[edit]
{"import":[{"ns":0,"title":"Main Page2","revisions":1}]}
Raw request resulting[edit]

The request that is composed by the client and sent to the server for reference. Note the file's in a POST body.

POST http://localhost/api.php HTTP/1.1
Host: localhost
User-Agent: <ua string>
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost/index.php?title=Special:Export&action=submit
Content-Length: 3231
Content-Type: multipart/form-data; boundary=---------------------768648126486
Cookie: <redacted>; mwdbUserID=1; mwdbUserName=Rillke
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

-----------------------768648126486
Content-Disposition: form-data; name="format"

json
-----------------------768648126486
Content-Disposition: form-data; name="action"

import
-----------------------768648126486
Content-Disposition: form-data; name="xml"; filename="file.xml"
Content-Type: text/xml

<mediawiki ...schemas... version="0.8" xml:lang="en">
<siteinfo>
  <sitename>Sample Wiki</sitename>
<!-- .... -->
</mediawiki>
-----------------------768648126486
Content-Disposition: form-data; name="token"

XX39e9fd22a9de7675c71eadcfd2XXXX+\
-----------------------768648126486--
"Missing boundary in multipart/form-data POST data" error?

This is because you sent it url-encoded but claimed it would be multipart/form-data? MediaWiki is looking for a boundary in the header but cannot find it.

起こりうるエラー[edit]

All errors are formatted as:

<error code="code" info="info">
コード 情報
notoken パラメーター token を設定してください。
cantimport You don't have permission to import pages.
cantimport-upload You don't have permission to import uploaded pages.
nointerwikipage パラメーター interwikipage を設定してください。
nofile You didn't upload a file
filetoobig The file you uploaded is bigger than the maximum upload size
partialupload The file was only partially uploaded
notempdir The temporary upload directory is missing
Note: This generally means the server is broken or misconfigured
cantopenfile Couldn't open the uploaded file
Note: This generally means the server is broken or misconfigured
badinterwiki Invalid interwiki title specified
import-unknownerror Unknown error on import: error.





action=import

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

Import a page from another wiki, or from an XML file.

Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the xml parameter.

Parameters:
summary

Log entry import summary.

xml

Uploaded XML file.

Must be posted as a file upload using multipart/form-data.
interwikiprefix

For uploaded imports: interwiki prefix to apply to unknown user names (and known users if assignknownusers is set).

interwikisource

For interwiki imports: wiki to import from.

One of the following values: meta, w:en, usability
interwikipage

For interwiki imports: page to import.

fullhistory

For interwiki imports: import the full history, not just the current version.

Type: boolean (details)
templates

For interwiki imports: import all included templates as well.

Type: boolean (details)
namespace

Import to this namespace. Cannot be used together with rootpage.

One of the following values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 90, 91, 92, 93, 100, 101, 102, 103, 104, 105, 106, 107, 486, 487, 828, 829, 1198, 1199, 2300, 2301, 2302, 2303, 2600, 5500, 5501
assignknownusers

Assign edits to local users where the named user exists locally.

Type: boolean (details)
rootpage

Import as subpage of this page. Cannot be used together with namespace.

tags

Change tags to apply to the entry in the import log and to the null revision on the imported pages.

Values (separate with | or alternative):
token

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

This parameter is required.

関連項目[edit]