Jump to content
MediaWiki

API:移动

本頁使用了標題或全文手工轉換
From mediawiki.org
This page is a translated version of the page API:Move and the translation is 100% complete.
本页是MediaWiki Action API帮助文档的一部分。
MediaWiki Action API
基础
认证
账号和用户
页面操作
搜索
开发员工具
教程
· ·
MediaWiki版本:
≥ 1.12

POST请求来移动页面。

API帮助文档

下列的文档是Special:ApiHelp/move的输出,是由在本网站(MediaWiki.org)上面运行的MediaWiki的预发行版本所自动生成的。

action=move

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

Move a page.

Specific parameters:
Other general parameters are available.
from

Title of the page to rename. Cannot be used together with fromid.

fromid

Page ID of the page to rename. Cannot be used together with from.

Type: integer
to

Title to rename the page to.

This parameter is required.
reason

Reason for the rename.

Default: (empty)
movetalk

Rename the talk page, if it exists.

Type: boolean (details)
movesubpages

Rename subpages, if applicable.

Type: boolean (details)
noredirect

Don't create a redirect.

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)
ignorewarnings

Ignore any warnings.

Type: boolean (details)
tags

Change tags to apply to the entry in the move log and to the dummy revision on the destination page.

Values (separate with | or alternative): AWB, convenient-discussions
token

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

This parameter is required.

示例

发出任何POST请求都是一个多步骤的过程:

  1. 使用API:登录 中描述的方法之一登录。
  2. 获取CSRF令牌
  3. 发送带有CSRF令牌的POST请求以在页面上执行操作。

下面的示例代码详细介绍了最后一步。

POST请求

将"CurrentTitle"及其讨论页移至"Page with new title",不留重定向。

响应

{
"move":{
"from":"CurrentTitle",
"to":"Page with new title",
"reason":"wrong title",
"talkfrom":"Talk:CurrentTitle",
"talkto":"Talk:Page with new title"
}
}

示例代码

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
"""
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 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
*/
varrequest=require('request').defaults({jar:true}),
url="https://test.wikipedia.org/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);
move(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to move the page
functionmove(csrf_token){
varparams_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
*/
varparams={
action:'move',
from:'Current title',
to:'Page with new title',
reason:'API Test',
movetalk:'1',
noredirect:'1',
format:'json'
},
api=newmw.Api();
api.postWithToken('csrf',params).done(function(data){
console.log(data);
});

可能的错误

代码 信息
nofrom from参数必须被设置。
noto to参数必须被设置。
notoken token参数必须被设置。
cantmove-anon Anonymous users can't move pages
cantmove 您没有权限移动本页。
cantmovefile 您没有权限移动本文件。
如果完全禁用文件移动,您将收到一个immobilenamespace错误。
selfmove 标题相同;无法对页面进行自我移动。
immobilenamespace You tried to move pages from or to a namespace that is protected from moving
articleexists The destination article already exists
redirectexists 1ドル处已存在一个重定向,不能自动删除。请选择另一个名称。
protectedpage You don't have permission to perform this move
protectedtitle The destination article has been protected from creation
nonfilenamespace 无法将文件移动到非文件命名空间
filetypemismatch 新扩展名与其类型不匹配。
mustbeposted move模块需要POST请求。

参数历史

  • v1.29: 启用tags
  • v1.17: 弃用watch, unwatch
  • v1.17: 启用watchlist

附加提醒

  • 成功使用 noredirect 参数需要 suppressredirect 权限,该权限授予机器人和管理员,而不是普通用户。
  • 创建重定向是API的默认行为。 如果您没有suppressredirect 权限,API不会返回错误;它只会简单地创建一个重定向。
  • 当页面移动成功,但讨论页面或子页面移动失败时,Move API使用了两种额外的错误处理方法:
    • 讨论页 – 相关错误将在talkmove-error-codetalkmove-error-info字段中返回。
    • 子页面 – 相关错误将以标准code/info结构返回,位于subpages键下。

参阅

  • API:导入 – 跨维基导入允许在维基中通过另一种方式移动页面。

AltStyle によって変換されたページ (->オリジナル) /