API umożliwiające zarządzanie wyszukiwarką z poziomu zewnętrznych aplikacji
API Panelu Zarządzania umożliwia zarządzanie wyszukiwarką z poziomu zewnętrznych aplikacji (np. grobnet.eu). Endpoint wymaga uwierzytelniania przez klucz API oraz opcjonalnie danych logowania administratora.
GET/POST /api/panelzarzadzania
GET/POST /api/panel skrócona wersja
Klucz API musi być przekazany w jednym z następujących sposobów:
X-API-Key: {twoj_klucz_api}?api_key={twoj_klucz_api}api_key={twoj_klucz_api}Jeśli chcesz wykonać akcje wymagające uprawnień administratora, możesz przekazać:
Pobiera podstawowe informacje o panelu zarządzania.
curl -H "X-API-Key: twoj_klucz_api" \
https://subdomena.grobnet.eu/api/panel
{
"status": "success",
"message": "Autoryzacja pomyślna",
"subdomain": "subdomena.grobnet.eu",
"api_key_valid": true,
"admin_authenticated": false,
"data": {
"info": "Panel zarządzania API",
"subdomain": "subdomena.grobnet.eu",
"timestamp": "2024-01-15 12:00:00",
"endpoints": {
"GET /api/panelzarzadzania": "Pobierz informacje o panelu",
"POST /api/panelzarzadzania": "Wykonaj akcję zarządzania"
}
}
}
Wykonuje akcje zarządzania wymagające uprawnień administratora.
{
"action": "nazwa_akcji",
"username": "admin",
"password": "haslo_wyszukiwarki",
"admin_panel_password": "haslo_panelu_admina"
}
Pobiera podstawowe statystyki wyszukiwarki (liczba zmarłych, grobów, fotografii).
Akcja: get_stats
Wymaga logowania: Opcjonalne
curl -X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: twoj_klucz_api" \
-d '{
"action": "get_stats",
"username": "admin",
"password": "haslo_wyszukiwarki"
}' \
https://subdomena.grobnet.eu/api/panel
Pobiera listę zmarłych z możliwością filtrowania i paginacji.
Akcja: get_zmarli
Wymaga logowania: Opcjonalne
Parametry: page (int), limit (int), search (string), filters (object)
Akcja: get_zmarli_by_id
Parametry: id (int) - ID zmarłego
Akcja: add_zmarli
Wymaga logowania: Wymagane
Parametry: data (object) - dane zmarłego
Akcja: update_zmarli
Wymaga logowania: Wymagane
Parametry: id (int), data (object)
Akcja: delete_zmarli
Wymaga logowania: Wymagane
Parametry: id (int)
Akcja: get_users
Wymaga logowania: Wymagane
Akcja: get_user_by_id
Wymaga logowania: Wymagane
Akcja: add_user
Wymaga logowania: Wymagane
Akcja: update_user
Wymaga logowania: Wymagane
Akcja: delete_user
Wymaga logowania: Wymagane
Akcja: get_pages
Wymaga logowania: Opcjonalne
get_page_by_id, add_page, update_page, delete_page
get_panels, get_panel_by_id, add_panel, update_panel, delete_panel
get_posts, get_post_by_id, add_post, update_post, delete_post
get_comments, approve_comment, delete_comment
get_contacts, get_contact_by_id, update_contact, delete_contact
get_banners, get_banner_by_id, add_banner, update_banner, delete_banner
Akcja: get_notifications
Wymaga logowania: Wymagane
Wysyła powiadomienie SMS lub email. Wymaga skonfigurowanych ustawień SMTP (dla email) lub SMSAPI (dla SMS).
Akcja: send_notification
Parametry: type (string: "email" lub "sms"), recipient (string), message (string), subject (string) - opcjonalne dla email
Tworzy kopię zapasową bazy danych. Może tworzyć backup wszystkich tabel lub wybranych. Obsługuje kompresję gzip.
Akcja: create_backup
Parametry: name (string) - opcjonalna nazwa backupu, tables (array) - opcjonalna lista tabel, compress (bool) - kompresja gzip
Akcja: list_backups
Wymaga logowania: Wymagane
Przywraca bazę danych z backupu. Obsługuje pliki .sql i .sql.gz.
Akcja: restore_backup
Parametry: backup_file (string) - nazwa pliku backupu
Akcja: get_settings
Wymaga logowania: Wymagane
Akcja: update_settings
Wymaga logowania: Wymagane
Akcja: get_statistics_detailed
Wymaga logowania: Wymagane
Akcja: get_menu
Wymaga logowania: Opcjonalne
Akcja: update_menu
Wymaga logowania: Wymagane
Instaluje moduł w systemie. Automatycznie instaluje tabele, szablony i konfigurację modułu.
Akcja: install_module
Parametry: module_folder (string) - folder modułu w katalogu MODULY
Akcja: uninstall_module
Parametry: module_folder (string) - folder modułu
async function getPanelInfo() {
const response = await fetch('https://subdomena.grobnet.eu/api/panel', {
method: 'GET',
headers: {
'X-API-Key': 'twoj_klucz_api'
}
});
const data = await response.json();
console.log(data);
}
async function getStats() {
const response = await fetch('https://subdomena.grobnet.eu/api/panel', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'twoj_klucz_api'
},
body: JSON.stringify({
action: 'get_stats',
username: 'admin',
password: 'haslo_wyszukiwarki'
})
});
const data = await response.json();
if (data.status === 'success') {
console.log('Statystyki:', data.data.stats);
}
}
function getPanelInfo($apiKey, $subdomain) {
$url = "https://{$subdomain}/api/panel";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: ' . $apiKey
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
}
return null;
}
function sendNotification($apiKey, $subdomain, $type, $recipient, $message, $subject = '') {
$url = "https://{$subdomain}/api/panel";
$data = [
'action' => 'send_notification',
'type' => $type,
'recipient' => $recipient,
'message' => $message
];
if ($type === 'email' && !empty($subject)) {
$data['subject'] = $subject;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
}
return null;
}
import requests
import json
def get_panel_info(api_key, subdomain):
url = f"https://{subdomain}/api/panel"
headers = {
'X-API-Key': api_key
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
return None
import requests
import json
def get_stats(api_key, subdomain, username, password):
url = f"https://{subdomain}/api/panel"
headers = {
'Content-Type': 'application/json',
'X-API-Key': api_key
}
data = {
'action': 'get_stats',
'username': username,
'password': password
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
return response.json()
return None
{
"status": "error",
"message": "Nieprawidłowy klucz API",
"code": "INVALID_API_KEY"
}
action w żądaniu POST{
"status": "error",
"message": "Nieprawidłowa akcja",
"code": "INVALID_ACTION"
}
{
"status": "error",
"message": "Brak uprawnień do wykonania tej akcji",
"code": "FORBIDDEN"
}
{
"status": "success",
"message": "Autoryzacja pomyślna",
"subdomain": "subdomena.grobnet.eu",
"api_key_valid": true,
"admin_authenticated": true,
"data": {
// Dane zależne od akcji
}
}
{
"status": "error",
"message": "Opis błędu",
"code": "KOD_BLEDU",
"data": []
}
| Pole | Typ | Opis |
|---|---|---|
status |
string | Status odpowiedzi: success lub error |
message |
string | Komunikat odpowiedzi |
code |
string | Kod błędu (tylko w przypadku błędu) |
subdomain |
string | Subdomena, dla której wykonano żądanie |
api_key_valid |
boolean | Czy klucz API jest prawidłowy |
admin_authenticated |
boolean | Czy użytkownik jest zalogowany jako administrator |
data |
object|array | Dane odpowiedzi (zależne od akcji) |
API automatycznie sprawdza czy klucz API został wydany dla subdomeny, z której wykonujesz żądanie. Subdomena jest pobierana z nagłówka HTTP_HOST lub SERVER_NAME.
Jeśli przekażesz username i password, API sprawdzi je bezpośrednio z kontem administratora w bazie danych wyszukiwarki (DB_USERS). Weryfikacja używa tego samego mechanizmu co logowanie do panelu administracyjnego.
Obecna wersja API: 1.0.0
API używa semantycznego wersjonowania (SemVer):
Wersja API jest przekazywana w nagłówku X-API-Version.