API:Move

From mediawiki.org
This page is a translated version of the page API:Move and the translation is 97% complete.
Outdated translations are marked like this.
เวอร์ชันมีเดียวิกิ:
1.12

POST request เพื่อย้ายหน้า

API documentation


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 null revision on the destination page.

Values (separate with | or alternative): convenient-discussions, possible vandalism, repeating characters
token

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

This parameter is required.

ตัวอย่าง

การส่งคำขอ POST เป็นกระบวนการหลายขั้นตอน:

  1. เข้าสู่ระบบด้วยวิธีใดวิธีหนึ่งที่อธิบายไว้ใน API:Login
  2. GET CSRF token


  3. ส่งคำขอ POST ด้วยโทเค็น CSRF เพื่อดำเนินการบนเพจ

โค้ดตัวอย่างด้านล่างครอบคลุมขั้นตอนสุดท้ายโดยละเอียด

POST request

ย้าย "CurrentTitle" และหน้าพูดคุยไปที่ "Page with new title" โดยไม่ต้องสร้างการเปลี่ยนเส้นทาง


Response

{
    "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
"""

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 );
} );

ข้อบกพร่อง (error) ที่อาจเกิด

รหัส (Code) ข้อมูล (Info)
nofrom The from parameter must be set.
noto The to parameter must be set.
notoken The token parameter must be set.
cantmove-anon Anonymous users can't move pages
cantmove คุณไม่มีสิทธิย้ายหน้านี้
cantmovefile คุณไม่มีสิทธิย้ายไฟล์นี้
หากปิดการย้ายไฟล์ทั้งหมด คุณจะได้รับข้อผิดพลาด immobilenamespace แทน
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 ไม่สามารถย้ายไฟล์ไปยังเนมสเปซอื่น
filetypemismatch นามสกุลไฟล์ใหม่ไม่ตรงกับชนิด
mustbeposted The move module requires a POST request.


ประวัติพารามิเตอร์ (Parameter history)

  • v1.29: เปิดตัว tags
  • v1.17: เลิกใช้ watch, unwatch
  • v1.17: เปิดตัว watchlist

บันทึกเพิ่มเติม

  • การใช้พารามิเตอร์ noredirect ให้สำเร็จต้องได้รับสิทธิ์ suppressredirect ซึ่งมอบให้กับบอทและ sysops ไม่ใช่ผู้ใช้ทั่วไป
  • การสร้างการเปลี่ยนเส้นทางเป็นพฤติกรรมเริ่มต้นของ API หากคุณไม่มีสิทธิ์ suppressredirect API จะไม่ส่งคืนข้อผิดพลาด มันจะสร้างการเปลี่ยนเส้นทาง
  • Move API ใช้วิธีการจัดการข้อผิดพลาดเพิ่มเติมสองวิธีเมื่อย้ายหน้าสำเร็จ แต่หน้าพูดคุยหรือย้ายหน้าย่อยล้มเหลว:
    • หน้าพูดคุย - ข้อผิดพลาดที่เกี่ยวข้องจะถูกส่งคืนในช่อง talkmove-error-code และ talkmove-error-info
    • หน้าย่อย - ข้อผิดพลาดที่เกี่ยวข้องจะถูกส่งคืนเป็นโครงสร้าง code/info มาตรฐานภายใต้คีย์ subpages

ดูเพิ่ม

  • API:Import - การนำเข้าวิกิข้ามภาษาทำให้มีทางเลือกในการย้ายหน้าต่าง ๆ ในวิกิ