Difference between revisions of "User:Hexmode"
(Created page with "== Welcome to Virtuverse Wiki == [https://virtuverse.io/ Virtuverse] implements an immersive combat experience on top of third-person gameplay, A system without levels or cla...") |
|||
Line 1: | Line 1: | ||
− | + | <languages/> | |
+ | {{API}} | ||
+ | {{MW 1.12|and after}} | ||
+ | <translate> | ||
+ | <!--T:1--> | ||
+ | '''POST request''' to move a page. | ||
− | + | == API documentation == <!--T:2--> | |
+ | </translate> | ||
+ | {| style="color: black; background-color: #f8f8f8; border-spacing: 20px; border: 1px solid darkgray;" | ||
+ | | {{Api help|move}} | ||
+ | |} | ||
− | + | <translate> | |
+ | == Example == <!--T:3--> | ||
− | + | <!--T:4--> | |
+ | Making any POST request is a multi-step process: | ||
+ | </translate> | ||
− | + | <ol> | |
+ | <li><translate><!--T:5--> Log in, via one of the methods described on <tvar|1>{{ll|API:Login}}</>.</translate></li> | ||
+ | <li><translate><!--T:6--> GET a {{<tvar|1>ll|Manual:Edit token</>|CSRF token}}.</translate> | ||
+ | ::{{ApiEx | ||
+ | |p1=action=query | ||
+ | |p2=format=json | ||
+ | |p3=meta=tokens | ||
+ | }} | ||
+ | </li> | ||
+ | <li><translate><!--T:7--> Send a POST request, with the CSRF token, to take action on a page.</translate></li> | ||
+ | </ol> | ||
− | + | <translate> | |
+ | <!--T:8--> | ||
+ | The sample code below covers the final step in detail. | ||
− | + | === POST request === <!--T:9--> | |
+ | </translate> | ||
+ | {{ApiEx| | ||
+ | |desc=<translate><!--T:10--> Move "<tvar|1>CurrentTitle</>" and its talk page to "<tvar|2>Page with new title</>", without creating a redirect.</translate> | ||
+ | |p1=action=move | ||
+ | |p2=from=CurrentTitle | ||
+ | |p3=to=Page%20with%20new%20title | ||
+ | |p4=reason=wrong%20title | ||
+ | |p5=movetalk=1 | ||
+ | |p6=noredirect=1 | ||
+ | |p7=token=sampleCsrfToken123+/ | ||
+ | }} | ||
+ | |||
+ | <translate> | ||
+ | === Response === <!--T:11--> | ||
+ | </translate> | ||
+ | <div style="width:60%;"> | ||
+ | <syntaxhighlight lang="json"> | ||
+ | { | ||
+ | "move": { | ||
+ | "from": "CurrentTitle", | ||
+ | "to": "Page with new title", | ||
+ | "reason": "wrong title", | ||
+ | "talkfrom": "Talk:CurrentTitle", | ||
+ | "talkto": "Talk:Page with new title" | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | <translate> | ||
+ | === Sample code === <!--T:12--> | ||
+ | </translate> | ||
+ | '''''move.py''''' | ||
+ | <div style="width:60%;"> | ||
+ | <syntaxhighlight lang="python3"> | ||
+ | #!/usr/bin/python3 | ||
+ | |||
+ | """ | ||
+ | move.py | ||
+ | MediaWiki Action API Code Samples | ||
+ | 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": "wrong title", | ||
+ | "movetalk": "1", | ||
+ | "noredirect": "1", | ||
+ | "token": CSRF_TOKEN | ||
+ | } | ||
+ | |||
+ | R = S.post(url=URL, data=PARAMS_4) | ||
+ | DATA = R.text | ||
+ | |||
+ | print(DATA) | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | |||
+ | <translate> | ||
+ | == Possible errors == <!--T:13--> | ||
+ | </translate> | ||
+ | {| class="wikitable sortable" | ||
+ | |+ | ||
+ | !<translate><!--T:14--> Code</translate> | ||
+ | !<translate><!--T:15--> Info</translate> | ||
+ | |- | ||
+ | | nofrom || {{int|apierror-missingparam|from}} | ||
+ | |- | ||
+ | | noto || {{int|apierror-missingparam|to}} | ||
+ | |- | ||
+ | | notoken || {{int|apierror-missingparam|token}} | ||
+ | |- | ||
+ | | cantmove-anon || Anonymous users can't move pages | ||
+ | |- | ||
+ | | cantmove || {{int|apierror-permissiondenied|{{int|action-move}} }} | ||
+ | |- | ||
+ | | cantmovefile || {{int|apierror-permissiondenied|{{int|action-movefile}} }}<br />{{note|1=<translate><!--T:16--> If file moving is disabled altogether, you'll get an immobilenamespace error instead</translate>}} | ||
+ | |- | ||
+ | | 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 and is not a 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 || {{int|imagenocrossnamespace}} | ||
+ | |- | ||
+ | | filetypemismatch || {{int|imagetypemismatch}} | ||
+ | |- | ||
+ | | mustbeposted || {{int|apierror-mustbeposted|move}} | ||
+ | |} | ||
+ | |||
+ | <translate> | ||
+ | == Parameter history == <!--T:17--> | ||
+ | </translate> | ||
+ | * v1.29: <translate><!--T:18--> Introduced <tvar|1><code>tags</code></></translate> | ||
+ | * v1.17: <translate><!--T:19--> Deprecated <tvar|1><code>watch</code>, <code>unwatch</code></></translate> | ||
+ | * v1.17: <translate><!--T:20--> Introduced <tvar|1><code>watchlist</code></></translate> | ||
+ | |||
+ | <translate> | ||
+ | == Additional notes == <!--T:21--> | ||
+ | |||
+ | <!--T:22--> | ||
+ | * Successful use of the <tvar|1><code>noredirect</code></> parameter requires the <tvar|2><code>{{ll|Manual:User rights|suppressredirect}}</code></> right, which is granted to bots and sysops, not ordinary users.</translate> | ||
+ | <translate> | ||
+ | <!--T:23--> | ||
+ | * Creating a redirect is the API's default behavior.</translate> <translate><!--T:24--> If you do not have the <tvar|1><code>{{ll|Manual:User rights|suppressredirect}}</code></> right, the API will not return an error; it will simply create a redirect.</translate> | ||
+ | <translate> | ||
+ | <!--T:25--> | ||
+ | * The Move API uses two additional error handling methods when the page move succeeded, but the talk page or subpage move failed: | ||
+ | </translate> | ||
+ | ** {{ll|Manual:Namespace#Subject_and_talk_namespaces|<translate><!--T:26--> Talk page</translate>}} - <translate><!--T:27--> The relevant error will be returned in the <tvar|1><code>talkmove-error-code</code></> and <tvar|2><code>talkmove-error-info</code></> fields.</translate> | ||
+ | ** {{ll|Help:Subpages|<translate><!--T:28--> Subpage</translate>}} - <translate><!--T:29--> | ||
+ | The relevant error will be returned as a standard <tvar|1><code>code</code>/<code>info</code></> structure under the <tvar|2><code>subpages</code></> key. | ||
+ | |||
+ | == See also == <!--T:30--> | ||
+ | </translate> | ||
+ | * {{ll|API:Import}} - <translate><!--T:31--> interwiki imports allow for an alternate way to move pages around a wiki.</translate> |
Latest revision as of 10:48, 6 August 2019
<languages/> Template:API Template:MW 1.12 <translate> POST request to move a page.
Contents
API documentation
</translate>
Template:Api help |
<translate>
Example
Making any POST request is a multi-step process: </translate>
- <translate> Log in, via one of the methods described on <tvar|1>Template:Ll</>.</translate>
- <translate> GET a {{<tvar|1>ll|Manual:Edit token</>|CSRF token}}.</translate>
- <translate> Send a POST request, with the CSRF token, to take action on a page.</translate>
<translate> The sample code below covers the final step in detail.
POST request
</translate> Template:ApiEx
<translate>
Response
</translate>
<syntaxhighlight lang="json"> {
"move": { "from": "CurrentTitle", "to": "Page with new title", "reason": "wrong title", "talkfrom": "Talk:CurrentTitle", "talkto": "Talk:Page with new title" }
} </syntaxhighlight>
<translate>
Sample code
</translate> move.py
<syntaxhighlight lang="python3">
- !/usr/bin/python3
"""
move.py MediaWiki Action API Code Samples 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": "wrong title", "movetalk": "1", "noredirect": "1", "token": CSRF_TOKEN
}
R = S.post(url=URL, data=PARAMS_4) DATA = R.text
print(DATA)
</syntaxhighlight>
<translate>
Possible errors
</translate>
<translate> Code</translate> | <translate> Info</translate> |
---|---|
nofrom | Template:Int |
noto | Template:Int |
notoken | Template:Int |
cantmove-anon | Anonymous users can't move pages |
cantmove | Template:Int |
cantmovefile | Template:Int Template:Note |
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 and is not a 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 | Template:Int |
filetypemismatch | Template:Int |
mustbeposted | Template:Int |
<translate>
Parameter history
</translate>
- v1.29: <translate> Introduced <tvar|1>
tags
</></translate> - v1.17: <translate> Deprecated <tvar|1>
watch
,unwatch
</></translate> - v1.17: <translate> Introduced <tvar|1>
watchlist
</></translate>
<translate>
Additional notes
- Successful use of the <tvar|1>
noredirect
</> parameter requires the <tvar|2>Template:Ll
</> right, which is granted to bots and sysops, not ordinary users.</translate>
<translate>
- Creating a redirect is the API's default behavior.</translate> <translate> If you do not have the <tvar|1>
Template:Ll
</> right, the API will not return an error; it will simply create a redirect.</translate>
<translate>
- The Move API uses two additional error handling methods when the page move succeeded, but the talk page or subpage move failed:
</translate>
- Template:Ll - <translate> The relevant error will be returned in the <tvar|1>
talkmove-error-code
</> and <tvar|2>talkmove-error-info
</> fields.</translate> - Template:Ll - <translate>
- Template:Ll - <translate> The relevant error will be returned in the <tvar|1>
The relevant error will be returned as a standard <tvar|1>code
/info
</> structure under the <tvar|2>subpages
</> key.
See also
</translate>
- Template:Ll - <translate> interwiki imports allow for an alternate way to move pages around a wiki.</translate>