API:Move/cs

Category:MediaWiki action API/cs
Verze MediaWiki:
1.12

Požadavek POST pro přesun stránky.

Dokumentace API

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.

Příklad

Vytvoření jakéhokoli požadavku POST je proces složený z několika kroků:

  1. Přihlaste se jedním ze způsobů popsaných na stránce API:Přihlášení.
  2. GET CSRF token.
  3. Odešlete požadavek POST s tokenem CSRF, abyste provedli akci na stránce.

Níže uvedený ukázkový kód podrobně pokrývá poslední krok.

Požadavek POST

Přesunout "CurrentTitle" a jeho diskusní stránku na "Page with new title" bez vytvoření přesměrování.

Odpověď

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

Ukázkový kód

Python

#!/usr/bin/python3

"""
    move.py

    Ukázky MediaWiki API
    Ukázka modulu `Move`: Přesunutí stránky i s její diskusní stránkou bez přesměrování.
    Licence MIT
"""

import requests

S = requests.Session()

URL = "https://test.wikipedia.org/w/api.php"

# Krok 1: Získejte přihlašovací 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']

# Krok 2: Odešlete požadavek POST pro přihlášení. Pro tuto metodu přihlášení si nejprve získejte přihlašovací údaje na adrese https://www.test.wikipedia.org/wiki/Manual:Bot_passwords.
# Více informací o metodách přihlášení naleznete v https://www.mediawiki.org/wiki/API:Login.
PARAMS_2 = {
    "action": "login",
    "lgname": "user_name",
    "lgpassword": "password",
    "format": "json",
    "lgtoken": LOGIN_TOKEN
}

R = S.post(URL, data=PARAMS_2)
DATA = R.json()

# Krok 3: Po přihlášení si získejte token CSRF
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"]

# Krok 4: Odešlete požadavek POST pro přesun stránky
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

    Ukázky MediaWiki API
    Demo of `Move` module: Move a page with its talk page, without a redirect.
	
    Licence MIT
*/

$endPoint = "https://test.wikipedia.org/w/api.php";

$login_Token = getLoginToken(); // Krok 1
loginRequest( $login_Token ); // Krok 2
$csrf_Token = getCSRFToken(); // Krok 3
move( $csrf_Token ); // Krok 4

// Krok 1: Požadavek GET pro načtení přihlašovacího tokenu
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"];
}

// Krok 2: POST požadavek na přihlášení. Použití hlavního účtu pro přihlášení není podporováno.
// 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 );

}

// Krok 3: Požadavek GET pro načtení tokenu CSRF
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"];
}

// Krok 4: Požadavek POST na přesun stránky
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
 
    Ukázky MediaWiki API
    Demo of `Move` module: Move a page with its talk page, without a redirect.
    Licence MIT
*/

var request = require('request').defaults({jar: true}),
    url = "https://test.wikipedia.org/w/api.php";

// Krok 1: Požadavek GET pro načtení přihlašovacího tokenu
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);
    });
}

// Krok 2: Požadavek POST na přihlášení. 
// Použití hlavního účtu pro přihlášení není podporováno.
// 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();
    });
}

// Krok 3: Požadavek GET pro načtení tokenu CSRF
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);
    });
}

// Krok 4: Požadavek POST na přesun stránky
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);
    });
}

// Začněte od kroku 1
getLoginToken();

MediaWiki JS

/*
	move.js

	Ukázky MediaWiki API
	Demo of `Move` module: Move a page with its talk page, without a redirect.

	Licence MIT
*/

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

Možné chyby

Kód Popis
nofromThe from parameter must be set.
notoThe to parameter must be set.
notokenThe token parameter must be set.
cantmove-anonAnonymous users can't move pages
cantmoveYou don't have permission to přesunout tuto stránku.
cantmovefileYou don't have permission to přesunout tento soubor.
Pokud je přesun souborů zcela zakázán, zobrazí se místo toho chyba immobilenamespace.
selfmoveNázev je stejný; nelze stránku přesunout na sebe samu.
immobilenamespaceYou tried to move pages from or to a namespace that is protected from moving
articleexistsThe destination article already exists
redirectexists$1 již existuje jako přesměrování a nelze ho smazat automaticky. Prosím, vyberte jiný název.
protectedpageYou don't have permission to perform this move
protectedtitleThe destination article has been protected from creation
nonfilenamespaceNelze přesunout mimo jmenný prostor Soubor:
filetypemismatchNová přípona souboru neodpovídá jeho typu
mustbepostedThe move module requires a POST request.

Historie parametrů

  • v1.29: Představeno tags
  • v1.17: Zastaralé watch, unwatch
  • v1.17: Představeno watchlist

Další poznámky

  • Úspěšné použití parametru noredirect vyžaduje právo suppressredirect, které je uděleno robotům a sysopům, nikoli běžným uživatelům.
  • Vytvoření přesměrování je výchozím chováním API. Pokud nemáte zadaný parametr suppressredirect, API nevrátí chybu. Jednoduše vytvoří přesměrování.
  • Rozhraní Move API používá dvě další metody pro ošetření chyb, pokud se přesun stránky podařilo, ale přesun diskusní stránky nebo podstránky selhal:
    • Diskusní stránka – příslušná chyba bude vrácena v polích talkmove-error-code a talkmove-error-info.
    • Podstránka – příslušná chyba bude vrácena jako standardní struktura code/info pod klíčem subpages.

Související odkazy

  • API:Import - interwiki import umožňuje alternativní způsob přesouvání stránek v rámci wiki.
Category:MediaWiki action API/cs