API:Watch
Cette page fait partie de la documentation de l'API MediaWiki Action. |
Version de MediaWiki : | ≥ 1.14 |
Requête POST pour ajouter ou supprimer des pages d'une liste de suivi.
Documentation de l'API
Exemple
Toute requête POST est un processus en plusieurs étapes :
- Connectez-vous, via l'une des méthodes décrites sur API:Authentification .
- Demandez (GET) un jeton CSRF .
L'exemple de requête ci-dessus concernent les wikis qui exécutent MediaWiki 1.24+.
Pour les wikis qui exécutent des versions plus anciennes de MediaWiki, les jetons pour cette opération peuvent être obtenus via
action=tokens
avectype=watch
(MediaWiki 1.20+), ou en utilisant la requête suivante : - Envoyez une requête POST, avec le jeton CSRF, pour réaliser une action sur une page.
L'exemple de code ci-dessous décrit l'étape finale en détails.
Requête POST
Ajoute un article à votre liste de suivi
Réponse
{
"batchcomplete": "",
"watch": [
{
"title": "Stone Forest",
"watched": ""
}
]
}
Exemple de code
Python
#!/usr/bin/python3
"""
watch.py
MediaWiki API Demos
Demo of `Watch` module: Add a page to your watchlist
MIT license
"""
import requests
S = requests.Session()
URL = "https://en.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.en.wikipedia.org/wiki/Special:BotPasswords
# See https://www.mediawiki.org/wiki/API:Login for more
# information on log in methods.
PARAMS_2 = {
"action": "login",
"lgname": "username",
"lgpassword": "password",
"format": "json",
"lgtoken": LOGIN_TOKEN
}
R = S.post(URL, data=PARAMS_2)
# Step 3: While logged in, retrieve a CSRF token
PARAMS_3 = {
"action": "query",
"meta": "tokens",
"type": "watch",
"format": "json"
}
R = S.get(url=URL, params=PARAMS_3)
DATA = R.json()
CSRF_TOKEN = DATA["query"]["tokens"]["watchtoken"]
# Step 4: Post request to add a page to your watchlist
PARAMS_4 = {
"action": "watch",
"titles": "Stone forest",
"format": "json",
"token": CSRF_TOKEN,
}
R = S.post(URL, data=PARAMS_4)
DATA = R.json()
print(DATA)
PHP
<?php
/*
watch.php
MediaWiki API Demos
Demo of `Watch` module: Add a page to your watchlist
MIT license
*/
$endPoint = "https://test.wikipedia.org/w/api.php";
$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$watch_Token = getWatchToken(); // Step 3
editWatchlist( $watch_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 watch token
function getWatchToken() {
global $endPoint;
$params3 = [
"action" => "query",
"meta" => "tokens",
"type" => "watch",
"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"]["watchtoken"];
}
// Step 4: POST request to add a page to your watchlist
function editWatchlist( $watch_Token ) {
global $endPoint;
$params4 = [
"action" => "watch",
"titles" => "Sandbox",
"token" => $watch_Token,
"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
/*
watch.js
MediaWiki API Demos
Demo of `Watch` module: Add a page to your watchlist
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 watch token
function getCsrfToken() {
var params_2 = {
action: "query",
meta: "tokens",
type: "watch",
format: "json"
};
request.get({ url: url, qs: params_2 }, function(error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
watch(data.query.tokens.watchtoken);
});
}
// Step 4: POST request to add a page to your watchlist
function watch(watch_token) {
var params_3 = {
action: "watch",
titles: "Sandbox",
token: watch_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
/*
watch.js
MediaWiki API Demos
Demo of `Watch` module: Add a page to your watchlist
MIT License
*/
var params = {
action: 'watch',
titles: 'Sandbox',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'watch', params ).done( function ( data ) {
console.log( data );
} );
Historique des paramètres
- v1.25:
uselang
obsolète - v1.23:
continue
,title
,pageids
,revids
,generator
,redirects
,converttitles
ajoutétitle
obsolète
- v1.21:
uselang
ajouté
Notes supplémentaires
- Si vous exécutez le code d'exemple à partir d'un robot, assurez-vous que celui-ci possède l'option Modifier votre liste de suivi mise à
true
, en allant sur la page Special:BotPasswords. - Ce module utilise les jetons CSRF, et non pas les jetons des listes de suivi. Les jetons CSRF sont généralement utilisés pour les requêtes POST et pour les actions de modifications du wiki via le Action API , alors que les jetons de liste de suivi sont utilisés uniquement pour voir la liste de suivi des autres utilisateurs.
- A la différence de API:Liste de suivi , qui vous permet de lire la liste de suivi privée d'un compte sans vous y connecter, ce module nécessite que vous vous connectiez directement sous le compte que vous voulez modifier.
Voir aussi
- API:Liste de suivi - fournit une liste de suivi
- API:Watchlist/fr Flux de la liste de suivi - récupère un flux RSS ou Atom de la liste de suivi d'un utilisateur