واجهة برمجة التطبيقات:حذف
Appearance
| هذه الصفحة جزء من توثيق واجهة برمجة تطبيقات ميدياويكي التي تحمل اسم Action. |
طلب POST لحذف صفحة ما. يمكن إلغاء حذف الصفحات مستخدمًا طريقة واجهة برمجة التطبيقات:إلغاء حذف.
| إصدار ميدياويكي: | ≥ 1.12 |
توثيق واجهة برمجة التطبيقات
مثال
هذه العملية تنقسم إلى أربعة أقسام:
- الحصول على رمز تسجيل دخول من واجهة برمجة التطبيقات:Tokens.
- إرسال طلب POST مستخدمًا رمز تسجيل الدخول المتحصل عليه وكذا معلومات المستخدم إلى واجهة برمجة التطبيقات.
- الحصول على رمز CSRF أثناء تسجيل الدخول.
- إرسال طلب post لحذف صفحة محددة مستخدمًا رمز CSRF المتحصل عليه.
طلب POST
النتيجة
{
"delete": {
"title": "page name",
"reason": "content was: 'Test' and the only contributor was Username",
"logid": 1234567
}
}
عينة من الكود البرمجي
Python
#!/usr/bin/python3
"""
delete.py
MediaWiki API Demos
Demo of `Delete` module: post request to delete a page
MIT license
"""
import requests
S = requests.Session()
URL = "https://test.wikipedia.org/w/api.php"
# Step1: Retrieve login token
PARAMS_0 = {
'action':"query",
'meta':"tokens",
'type':"login",
'format':"json"
}
R = S.get(url=URL, params=PARAMS_0)
DATA = R.json()
LOGIN_TOKEN = DATA['query']['tokens']['logintoken']
# Step2: 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_1 = {
'action':"login",
'lgname':"your_bot_username",
'lgpassword':"your_bot_password",
'lgtoken':LOGIN_TOKEN,
'format':"json"
}
R = S.post(URL, data=PARAMS_1)
# Step 3: When logged in, retrieve a CSRF token
PARAMS_2 = {
'action':"query",
'meta':"tokens",
'format':"json"
}
R = S.get(url=URL, params=PARAMS_2)
DATA = R.json()
CSRF_TOKEN = DATA['query']['tokens']['csrftoken']
# Step 4: Send a post request to delete a page
PARAMS_3 = {
'action':"delete",
'title':"enter_a_page_title",
'token':CSRF_TOKEN,
'format':"json",
'reason':'the reason for deletion'
}
R = S.post(URL, data=PARAMS_3)
DATA = R.json()
print(DATA)
PHP
<?php
/*
delete.php
MediaWiki API Demos
Demo of `Delete` module: post request to delete a page
MIT license
*/
$endPoint = "http://dev.wiki.local.wmftest.net:8080/w/api.php";
$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$csrf_Token = getCSRFToken(); // Step 3
delete( $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 delete a page
function delete( $csrftoken ) {
global $endPoint;
$params4 = [
"action" => "delete",
"title" => "Sandbox",
"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
/*
delete.js
MediaWiki API Demos
Demo of `Delete` module: post request to delete a 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);
delete_page(data.query.tokens.csrftoken);
});
}
// Step 4: POST request to delete a page
function delete_page(csrf_token) {
var params_3 = {
action: "delete",
title: "Test",
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
/*
delete.js
MediaWiki API Demos
Demo of `Delete` module: post request to delete a page
MIT License
*/
var params = {
action: 'delete',
title: 'enter_a_page_title',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
الأخطاء المحتملة
| الكود | معلومات |
|---|---|
| missingtitle | الصفحة التي حددتها غير موجودة. |
| notoken | يجب تعيين الوسيط token. |
| badtoken | رمز CSRF غير صالح. |
| permissiondenied | ليس لديك صلاحية لـحذف هذه الصفحة. يحصر أمر حذف الصفحات على أغلب مواقع الويكي على مشغلي النظام، إلا أن مواقع ويكي أخرى ربما تتبع قواعد أخرى.
|
| cantdelete | تعذّر حذف الصفحة أو الملف "title".
ربما حذفها شخص آخر بالفعل. |
تاريخ المتغيرات
- v1.38: إضافة
deletetalk - v1.27: إضافة
tags - v1.17:
watch,unwatchمتقادم - v1.14: إضافة
pageid - v1.13: إضافة
watch,oldimage,unwatch
ملاحظات إضافية
- بالنسبة للنسخ السابقة من ميدياويكي، يمكنك استخدام واجهة برمجة التطبيقات:Tokens (action) أو واجهة برمجة التطبيقات:معلومات للحصول على رمز تعديل بدلا من رمز تسجيل الدخول.
- أثناء تنفيذ قصاصات الكود البرمجي المبينة في هذه الصفحة، تذكر استخدام
https://test.wikipedia.org/w/api.phpلتكون نقطة النهاية، حتى لا تحذف صفحات على مواقع ويكي الإنتاج بطريق الخطأ. - بالإضافة إلى حق
delete، يجوز أن تكون ثمة حقوق أخرى مطلوبة، ويستند ذلك إلى موقع الصفحة ونوعها.
على سبيل المثال، يتطلب حذف صفحة .css الخاصة بأحد المستخدمين حق editusercss.
انظر أيضا
- واجهة برمجة التطبيقات:إلغاء حذف - يلغي حذف صفحة.