middleware/search.php

61 lines
1.8 KiB
PHP

<?php
// search.php
// Setze den Content-Type auf JSON
header('Content-Type: application/json');
// Zentrale Zugangsdaten einbinden
require_once 'secrets.php';
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Database connection failed: ' . $e->getMessage()]);
exit;
}
// Überprüfe, ob der Parameter "q" übergeben wurde
if (!isset($_GET['q'])) {
http_response_code(400);
echo json_encode(['error' => 'Missing query parameter "q".']);
exit;
}
// Den Query-Parameter auslesen und URL-dekodieren
$q = $_GET['q'];
$q_decoded = urldecode($q);
// Erwartetes Format: "from:username#hashtag"
// Beispiel: "from:silvesterhasani#bevysionary"
if (preg_match('/^from:([^#]+)#(.+)$/i', $q_decoded, $matches)) {
$username = $matches[1];
$hashtag = $matches[2];
} else {
http_response_code(400);
echo json_encode(['error' => 'Invalid query format. Expected format: "from:username#hashtag".']);
exit;
}
// SQL-Abfrage: Finde alle findings, die zum extrahierten username und hashtag passen
$sql = "SELECT h.hashtag, f.post_id, f.created_at, f.in_reply_to_id,
f.replies_count, f.reblogs_count, f.favorites_count,
f.acc_id, f.username, f.acct
FROM findings f
JOIN hashtags h ON f.hashtag_id = h.hashtag_id
WHERE f.username = :username AND h.hashtag = :hashtag";
$stmt = $pdo->prepare($sql);
$stmt->execute(['username' => $username, 'hashtag' => $hashtag]);
$results = $stmt->fetchAll();
// Gib das Ergebnis als JSON aus
echo json_encode($results);
?>