API:Protect
Cette page fait partie de la documentation de l'API MediaWiki Action. |
Version de MediaWiki : | ≥ 1.12 |
Requête POST pour modifier le niveau de protection d'une page.
Documentation de l'API
Exemple
La protection d'une page s'effectue en plusieurs étapes :
- Connectez-vous via l'une des méthodes décrites dans API:Authentification .
- Obtenir (GET) un jeton CSRF . Ce jeton est le même pour toutes les pages mais change à chaque connexion.
- Envoyez une demande POST avec le jeton CSRF afin de protéger la page.
L'exemple de code ci-dessous décrit la troisième étape en détails.
Requête POST
Protéger la page d'accueil pour une durée infinie pour permettre uniquement aux utilisateurs autoconfirmés de la modifier et uniquement aux administrateurs système de la renommer.
api.php? action=protect& title=Main_Page& protections=edit=autoconfirmed|move=sysop& expiry=infinite& token=123ABC [Essayez !]
Réponse
{
"protect": {
"title": "Main Page",
"reason": "",
"protections": [
{
"edit": "autoconfirmed",
"expiry": "infinite"
},
{
"move": "sysop",
"expiry": "infinite"
}
]
}
}
Exemple de code
Python
#!/usr/bin/python3
"""
protect.py
MediaWiki API Demos
Demo of `Protect` module: Demo to change the edit protection
level of a given page.
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 login. Use of main account for login
# is not supported. Obtain credentials via Special:BotPasswords
# (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname &
# lgpassword
PARAMS_2 = {
"action": "login",
"lgname": "bot_user_name",
"lgpassword": "bot_password",
"lgtoken": LOGIN_TOKEN,
"format": "json"
}
R = S.post(URL, data=PARAMS_2)
# Step 3: While logged in, retrieve a CSRF token
PARAMS_3 = {
"action": "query",
"meta": "tokens",
"type": "csrf",
"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 change edit protection level of a page
PARAMS_4 = {
"title": "User:SSethi (WMF)/common.js",
"protections": "edit=autoconfirmed|move=sysop",
"expiry": "infinite",
"token": CSRF_TOKEN,
"action": "protect"
}
R = S.post(URL, data=PARAMS_4)
print(R.text)
PHP
<?php
/*
protect.php
MediaWiki API Demos
Demo of `Protect` module: Demo to change the edit protection
level of a given page.
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
protect( $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 change edit protection level of a page
function protect( $csrftoken ) {
global $endPoint;
$params4 = [
"action" => "protect",
"title" => "Sandbox",
"protections" => "edit=autoconfirmed|move=sysop",
"expiry" => "infinite",
"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
/*
protect.js
MediaWiki API Demos
Demo of `Protect` module: Demo to change the edit protection
level of a given page.
MIT license
*/
var request = require('request').defaults({jar: true}),
url = "http://dev.wiki.local.wmftest.net:8080/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);
protect(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to change edit protection level of a page
function protect(csrf_token) {
var params_3 = {
action: "protect",
title: "Sandbox",
protections: "edit=autoconfirmed|move=sysop",
expiry: "infinite",
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
/*
protect.js
MediaWiki API Demos
Demo of `Protect` module: Demo to change the edit protection
level of a given page.
MIT License
*/
var params = {
action: 'protect',
title: 'Sandbo2',
protections: 'edit=autoconfirmed|move=sysop',
expiry: 'infinite',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
Erreurs possibles
En plus des messages d'erreur standard :
Code | Information |
---|---|
notitle | Le paramètre title doit être défini. |
notoken | Le paramètre token doit être défini. |
noprotections | Le paramètre protections doit être défini. |
invalidexpiry | Heure d’expiration invalide « expiry ». Cela signifie que l'horodatage de fin a été formaté de manière non valide, ou qu'il n'a pas été défini (comme le 31 novembre ou à 24:05). Cette erreur se produit également avec une date valide antérieure à 1970.
|
pastexpiry | La date d’expiration « expiry » est dépassée. |
toofewexpiries | number horodatage d’expiration a été fourni alors que number2 était attendu. Cette erreur est mal nommée : elle apparaît également quand vous spécifiez trop d'instances d'expiration
|
cantedit | Vous ne pouvez pas protéger cette page car vous ne pouvez pas la modifier. |
create-titleexists | Les titres existants ne peuvent pas être protégés avec create. |
missingtitle-createonly | Les titres manquants ne peuvent être protégés qu’avec create. |
protect-invalidaction | Type de protection non valide « type ». |
protect-invalidlevel | Niveau de protection non valide « level ». |
Historique des paramètres
- v1.27: Ajouté
tags
- v1.20: Ajouté
pageid
- v1.17: Ajouté
watchlist
Obsolètewatch
- v1.15: Ajouté
watch
Notes supplémentaires
- Ce module nécessite d'avoir les droits
protect
rights. - Pour les versions MediaWiki 1.19 et précédentes, vous pouvez obtenir un jeton de protection via API:Info/fr .
- Pour les versions MediaWiki de la 1.20 à la 1.23, vous pouvez obtenir un jeton de protection via API:Tokens (action) .
Voir aussi
- API:Protectedtitles - Obtenir une liste de titres protégés de la création.