100 lines
3.7 KiB
PHP
100 lines
3.7 KiB
PHP
<?php
|
|
// V83 Dark Scout Enriched API - market intel for SAP/Pharma/ERP consulting
|
|
// Doctrine 65: drill-down multi-source, doctrine 4: honest
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
$q = $_GET['q'] ?? '';
|
|
$preset = $_GET['preset'] ?? '';
|
|
|
|
// Preset queries for Dark Scout categories
|
|
$presets = [
|
|
'sap_maroc' => 'consulting SAP Maroc Casablanca',
|
|
'pharma_intel' => 'pharma Maroc digital transformation HCP',
|
|
'erp_migration' => 'ERP migration SAP S/4HANA Morocco',
|
|
'devops_jobs' => 'recrutement DevOps Casablanca LinkedIn',
|
|
'ai_consulting' => 'AI consulting Maghreb enterprise',
|
|
'vistex_deals' => 'Vistex pricing rebates Maroc',
|
|
'huawei_cloud' => 'Huawei Cloud partner MENA',
|
|
'abbott_pharma' => 'Abbott MENA pharma pipeline',
|
|
'competitor_moroc' => 'Capgemini Deloitte Accenture Maroc',
|
|
];
|
|
|
|
if ($preset && isset($presets[$preset])) $q = $presets[$preset];
|
|
if (!$q) { echo json_encode(['error' => 'no query or preset', 'presets' => array_keys($presets)]); exit; }
|
|
|
|
// Multi-engine search via searxng-proxy
|
|
$engines_list = [
|
|
'general' => 'google,bing,duckduckgo',
|
|
'jobs' => 'indeed,linkedin',
|
|
'news' => 'google_news',
|
|
'social' => 'linkedin,twitter',
|
|
];
|
|
$engine_key = $_GET['cat'] ?? 'general';
|
|
$engines = $engines_list[$engine_key] ?? 'google,bing';
|
|
|
|
$url = "http://127.0.0.1/api/searxng-proxy.php?k=WEVSX2026&q=" . urlencode($q) . "&engines=" . urlencode($engines);
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15]);
|
|
$body = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
$data = @json_decode($body, true) ?: [];
|
|
$results = $data['results'] ?? [];
|
|
|
|
// Enrich with classification
|
|
function classify_result($r) {
|
|
$t = strtolower(($r['title'] ?? '') . ' ' . ($r['content'] ?? ''));
|
|
if (preg_match('/sap|s\/4hana|abap|fiori/', $t)) return 'sap';
|
|
if (preg_match('/pharma|hcp|medical|hospital|medecin|docteur|pharmacie/', $t)) return 'pharma';
|
|
if (preg_match('/ethica|weval|consulting sap maroc/', $t)) return 'competitor';
|
|
if (preg_match('/linkedin\.com\/in\/|jobs/', $t)) return 'lead';
|
|
if (preg_match('/ai|ia|gpt|claude|llm|intelligence artificielle/', $t)) return 'ai';
|
|
if (preg_match('/vistex|rebate|pricing/', $t)) return 'vistex';
|
|
if (preg_match('/huawei|cloud|aws|azure/', $t)) return 'cloud';
|
|
return 'general';
|
|
}
|
|
|
|
$enriched = [];
|
|
$categories_count = [];
|
|
foreach ($results as $r) {
|
|
$cat = classify_result($r);
|
|
$categories_count[$cat] = ($categories_count[$cat] ?? 0) + 1;
|
|
$enriched[] = [
|
|
'title' => $r['title'] ?? '',
|
|
'url' => $r['url'] ?? '',
|
|
'snippet' => substr($r['content'] ?? '', 0, 220),
|
|
'category' => $cat,
|
|
'engine' => $r['engine'] ?? '',
|
|
'score' => $r['score'] ?? 0,
|
|
];
|
|
}
|
|
|
|
// Save to Qdrant-friendly structure + append to intel log
|
|
$intel_log = '/var/www/html/api/dark-scout-intel-log.json';
|
|
$history = @json_decode(@file_get_contents($intel_log), true) ?: [];
|
|
$history[] = [
|
|
'ts' => date('c'),
|
|
'q' => $q,
|
|
'preset' => $preset ?: null,
|
|
'results' => count($enriched),
|
|
'categories' => $categories_count,
|
|
];
|
|
$history = array_slice($history, -50);
|
|
@file_put_contents($intel_log, json_encode($history, JSON_PRETTY_PRINT));
|
|
|
|
$out = [
|
|
'v' => 'V83-dark-scout-enriched',
|
|
'ts' => date('c'),
|
|
'query' => $q,
|
|
'preset' => $preset ?: null,
|
|
'engines' => $engines,
|
|
'results' => $enriched,
|
|
'count' => count($enriched),
|
|
'categories' => $categories_count,
|
|
'presets_available' => $presets,
|
|
'intel_history_count' => count($history),
|
|
'doctrine_4' => 'honest - real SearXNG results only, no synthetic',
|
|
];
|
|
|
|
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|