API:Setnotificationtimestamp/zh
本页是MediaWiki Action API帮助文档的一部份。 |
MediaWiki版本: | ≥ 1.14 |
POST request to update the notification timestamp for watched pages.
API帮助文档
示例
Making any POST request is a multi-step process:
- Log in, via one of the methods described on API:登录 .
- GET an edit/CSRF token as shown here API:令牌 .
- Send a POST request, with the CSRF token, to reset the notification status for an entire watchlist.
The sample codes below cover these steps.
POST request
Reset the notification status for the entire watchlist.
api.php? action=setnotificationtimestamp& entirewatchlist=& token=1ccc023d58931de3acc6c39c7af2e420+\& format=json [在Api沙盒中尝试]
Response
{
"batchcomplete": "",
"setnotificationtimestamp": {
"notificationtimestamp": ""
}
}
Sample code
Python
#!/usr/bin/python3
"""
set_notification_timestamp.py
MediaWiki API Demos
Demo of `Setnotificationtimestamp` module:
Reset the notification status for the entire watchlist.
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 reset the notification status for the entire watchlist.
PARAMS_4 = {
"action":"setnotificationtimestamp",
"entirewatchlist":"",
"format":"json",
"token" : CSRF_TOKEN
}
R = S.post(URL, data=PARAMS_4)
DATA = R.text
print(DATA)
PHP
<?php
/*
set_notification_timestamp.php
MediaWiki API Demos
Demo of `Setnotificationtimestamp` module: Reset the notification status for the entire watchlist.
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
setNotificationTimestamp( $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: Send a POST request to reset the notification status for the entire watchlist.
function setNotificationTimestamp( $csrftoken ) {
global $endPoint;
$params4 = [
"action" => "setnotificationtimestamp",
"entirewatchlist" => "",
"format" => "json",
"token" => $csrftoken
];
$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" );
$response = curl_exec($ch);
curl_close($ch);
echo ($response);
}
JavaScript
/*
set_notification_timestamp.js
MediaWiki API Demos
Demo of `Setnotificationtimestamp` module: Reset the notification status for the entire 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 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);
setNotificationTimestamp(data.query.tokens.csrftoken);
});
}
// Step 4: Send a POST request to reset the notification status for the entire watchlist.
function setNotificationTimestamp(csrf_token) {
var params_3 = {
action: "setnotificationtimestamp",
entirewatchlist: "",
format: "json",
token: csrf_token
};
request.post({ url: url, form: params_3 }, function(error, res, body) {
if (error) {
return;
}
console.log(body);
});
}
// Start From Step 1
getLoginToken();
MediaWiki JS
/*
set_notification_timestamp.js
MediaWiki API Demos
Demo of `Setnotificationtimestamp` module: Reset the notification status for the entire watchlist.
MIT license
*/
var params = {
action: 'setnotificationtimestamp',
entirewatchlist: '',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
Parameter history
- v1.20: Introduced
pageids
Additional notes
- Each user and watched page is associated with a single notification timestamp.
- For the purposes of the watchlist, any revisions of that page with a timestamp earlier than the notification timestamp are considered seen.
- Revisions which are later or equal to the timestamp are considered unseen. Thus, posting to
setnotificationtimestamp
withtorevid=123
(or, equivalently, with thetimestamp
parameter set to the timestamp of revision 123) will mark revisions earlier than 123 as seen, but will not mark revision 123 itself as seen. Usingnewerthanrevid=123
will mark 123 and all earlier revisions as seen.