API:Přesun
Akce API MediaWiki |
---|
Základní informace |
Přihlášení |
Uživatelské účty a uživatelé |
Operace spojené se stránkou |
|
Vyhledávání |
Nástroje pro vývojáře |
Návody |
v · d · u |
Požadavek POST pro přesun stránky.
Dokumentace API
action=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.
- 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)
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): AWB, convenient-discussions
- token
A "csrf" token retrieved from action=query&meta=tokens
- This parameter is required.
- Move Badtitle to Goodtitle without leaving a redirect.
- api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect= [open in sandbox]
Příklad
Vytvoření jakéhokoli požadavku POST je proces složený z několika kroků:
- Přihlaste se jedním ze způsobů popsaných na stránce API:Přihlášení .
- GET CSRF token .
- 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
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 """ importrequests 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(); // 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 ); } // 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 */ varrequest=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 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); }); } // Krok 2: Požadavek POST na přihlášení. // 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(); }); } // Krok 3: Požadavek GET pro načtení tokenu CSRF 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); }); } // Krok 4: Požadavek POST na přesun stránky 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); }); } // 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 */ 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); });
Možné chyby
Kód | Popis |
---|---|
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 | You don't have permission to přesunout tuto stránku. |
cantmovefile | You 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.
|
selfmove | Název je stejný; nelze stránku přesunout na sebe samu. |
immobilenamespace | You tried to move pages from or to a namespace that is protected from moving |
articleexists | The destination article already exists |
redirectexists | 1ドル již existuje jako přesměrování a nelze ho smazat automaticky. Prosím, vyberte jiný název. |
protectedpage | You don't have permission to perform this move |
protectedtitle | The destination article has been protected from creation |
nonfilenamespace | Nelze přesunout mimo jmenný prostor Soubor: |
filetypemismatch | Nová přípona souboru neodpovídá jeho typu |
mustbeposted | The 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ávosuppressredirect
, 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
atalkmove-error-info
. - Podstránka – příslušná chyba bude vrácena jako standardní struktura
code
/info
pod klíčemsubpages
.
- Diskusní stránka – příslušná chyba bude vrácena v polích
Související odkazy
- API:Import - interwiki import umožňuje alternativní způsob přesouvání stránek v rámci wiki.