61 lines
1.8 KiB
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);
|
|
?>
|