واجهة برمجة التطبيقات:Setnotificationtimestamp
Appearance
هذه الصفحة جزء من توثيق واجهة برمجة تطبيقات ميدياويكي التي تحمل اسم Action. |
إصدار ميدياويكي: | ≥ 1.14 |
طلب POST الغرض منه تحديث الختم الزمني للإشعارات لصفحات موجودة في قائمة مراقبة.
توثيق واجهة برمجة التطبيقات
مثال
إن تصميم طلب POST هو مسألة متعددة الخطوات:
- سجل الدخول مستخدما واحد من السبل المبينة في واجهة برمجة التطبيقات:تسجيل_الدخول .
- احصل على رمز تعديل/CSRF كما هو مبين هنا واجهة برمجة التطبيقات:Tokens .
- أرسل طلب POST مستخدمًا رمز CSRF كي تعيد تعيين حالة الإشعارات لقائمة مراقبة كاملة.
عينة الكود البرمجي التالية تغطي هذه الخطوات.
طلب POST
إعادة تعيين حالة الإشعارات لقائمة مراقبة كاملة.
api.php? action=setnotificationtimestamp& entirewatchlist=& token=1ccc023d58931de3acc6c39c7af2e420+\& format=json [جربها في ApiSandbox]
النتيجة
{
"batchcomplete": "",
"setnotificationtimestamp": {
"notificationtimestamp": ""
}
}
عينة من الكود البرمجي
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 );
} );
تاريخ المتغيرات
- v1.20: إضافة
pageids
ملاحظات إضافية
- يرتبط كل مستخدم وكل صفحة مراقبة بختم إشعار زمني واحد.
- لأغراض قائمة المراقبة، تعتبر أية مراجعات لذات الصفحة تحمل ختم زمني يسبق ختم الإشعار الزمني في حكم المقروءة.
- المراجعات التي حدثت بعد الختم الزمني أو تساويه تعتبر غير مقروءة. لهذا السبب، سوف ينتج عن الإرسال إلى
setnotificationtimestamp
مستخدمًاtorevid=123
(أو، ما يعادل ذلك، حينما يضبط المتغيرtimestamp
ليكون الختم الزمني للمراجعة رقم 123) وسم المراجعات السابقة للمراجعة 123 على أنها مقروءة، إلا أنه لن يسم المراجعة 123 ذاتها على أنها مقروءة. أما استخدامnewerthanrevid=123
سوف يسم المراجعة 123 وكافة المراجعات السابقة بوسم مقروءة.