Files
wevads-platform/scripts/hamid-search.php
2026-02-26 04:53:11 +01:00

105 lines
2.9 KiB
PHP
Executable File

<?php
header('Content-Type: application/json');
$input = json_decode(file_get_contents('php://input'), true);
$query = $input['query'] ?? $_GET['q'] ?? '';
$engine = $input['engine'] ?? 'duckduckgo';
if (empty($query)) {
echo json_encode(['error' => 'Query requis']);
exit;
}
// DuckDuckGo Instant Answer API (gratuit, sans clé)
function searchDuckDuckGo($query) {
$url = "https://api.duckduckgo.com/?q=" . urlencode($query) . "&format=json&no_html=1";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_USERAGENT => 'WEVAL MIND-IA/2.0'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// SearXNG (self-hosted search, si disponible)
function searchSearXNG($query) {
$url = "http://localhost:8888/search?q=" . urlencode($query) . "&format=json";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Scraping simple pour résultats web
function scrapeWebResults($query) {
$results = [];
// Utiliser DuckDuckGo HTML (fallback)
$url = "https://html.duckduckgo.com/html/?q=" . urlencode($query);
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
CURLOPT_FOLLOWLOCATION => true
]);
$html = curl_exec($ch);
curl_close($ch);
// Parser les résultats
if (preg_match_all('/<a class="result__a" href="([^"]+)"[^>]*>([^<]+)<\/a>/', $html, $matches, PREG_SET_ORDER)) {
foreach (array_slice($matches, 0, 5) as $m) {
$results[] = [
'title' => html_entity_decode($m[2]),
'url' => $m[1],
'snippet' => ''
];
}
}
// Extraire snippets
if (preg_match_all('/<a class="result__snippet"[^>]*>([^<]+)<\/a>/', $html, $snippets)) {
foreach ($snippets[1] as $i => $s) {
if (isset($results[$i])) {
$results[$i]['snippet'] = html_entity_decode(strip_tags($s));
}
}
}
return $results;
}
$results = [];
$instant = null;
// Essayer DuckDuckGo Instant Answer d'abord
$ddg = searchDuckDuckGo($query);
if (!empty($ddg['AbstractText'])) {
$instant = [
'answer' => $ddg['AbstractText'],
'source' => $ddg['AbstractSource'] ?? 'DuckDuckGo',
'url' => $ddg['AbstractURL'] ?? ''
];
}
// Résultats web
$results = scrapeWebResults($query);
echo json_encode([
'query' => $query,
'instant_answer' => $instant,
'results' => $results,
'count' => count($results)
]);