'AIzaSyBRGR_80aOangxTYu45I0S6g_WemsadDnI', // Sua chave Gemini API aqui 'pexels_images' => 'Ig8Ko8Y2e9TXMYKaopPpVVKtAIh4e1pDD0hQth3gMajaWFggIDlESw0F', // Chave para imagens 'pexels_videos' => 'Ig8Ko8Y2e9TXMYKaopPpVVKtAIh4e1pDD0hQth3gMajaWFggIDlESw0F' // Pode ser a mesma chave para vídeos ]; header('Content-Type: application/json'); // Recebe a requisição do frontend $request_body = file_get_contents('php://input'); $request_data = json_decode($request_body, true); if (!$request_data || !isset($request_data['service'])) { http_response_code(400); echo json_encode(['error' => 'Requisição inválida.']); exit(); } $service = $request_data['service']; // --- Roteador de Serviços --- switch ($service) { case 'gemini_chat': handle_gemini_chat($request_data, $api_keys['gemini']); break; case 'pexels_image': handle_pexels_search($request_data, $api_keys['pexels_images'], 'https://api.pexels.com/v1/search'); break; case 'pexels_video': handle_pexels_search($request_data, $api_keys['pexels_videos'], 'https://api.pexels.com/videos/search'); break; default: http_response_code(400); echo json_encode(['error' => 'Serviço desconhecido.']); exit(); } /** * Lida com as chamadas para a API Gemini. */ function handle_gemini_chat($data, $api_key) { // Corrigido $api_key if (strpos($api_key, 'SUA_CHAVE') !== false || empty($api_key)) { http_response_code(500); echo json_encode(['error' => ['message' => 'A chave da API Gemini não foi configurada ou é inválida no servidor (api_proxy.php).']]); exit(); } // Usando o alias mais recente para o modelo Flash. // Em Setembro de 2025, 'gemini-2.5-flash-latest' aponta para a versão mais recente do Gemini 2.5 Flash, // como 'gemini-2.5-flash-002' ou posterior. $geminiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=' . $api_key; // Apenas repassa o corpo da requisição já formatado pelo frontend $post_data = $data['payload'] ?? []; // Corrigido: usando $geminiUrl e garantindo que $post_data é um JSON válido. echo forward_request($geminiUrl, json_encode($post_data), ['Content-Type: application/json']); } /** * Lida com as chamadas para a API Pexels (imagens ou vídeos). */ function handle_pexels_search($data, $api_key, $api_url_base) { if (strpos($api_key, 'SUA_CHAVE') !== false || empty($api_key)) { http_response_code(500); echo json_encode(['error' => ['message' => 'A chave da API Pexels não foi configurada ou é inválida no servidor (api_proxy.php).']]); exit(); } $query = $data['query'] ?? 'abstract'; $api_url = $api_url_base . '?query=' . urlencode($query) . '&per_page=1'; echo forward_request($api_url, null, ['Authorization: ' . $api_key]); } /** * Função genérica para encaminhar requisições usando cURL. */ function forward_request($url, $post_fields = null, $headers = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); if ($post_fields) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); } $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (curl_errno($ch)) { http_response_code(500); // Não exponha o erro detalhado do cURL ao cliente por segurança return json_encode(['error' => 'Erro de comunicação interna do servidor: ' . curl_error($ch)]); // Adicionado erro para debug no servidor } curl_close($ch); http_response_code($http_code); return $response; } ?>