DEBUG: " . htmlspecialchars($message) . "\n"; flush(); } // Function to fetch URL content using cURL function fetch_url_content($url) { if (!filter_var($url, FILTER_VALIDATE_URL)) { return ['error' => 'Invalid URL provided.']; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language: en-US,en;q=0.9', 'Connection: keep-alive', ]); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $html = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); if ($error) { return ['error' => 'cURL Error: ' . $error]; } if ($http_code >= 400) { return ['error' => 'The page could not be accessed. HTTP Status Code: ' . $http_code]; } return ['html' => $html]; } // Function to parse HTML and extract key texts function parse_html_and_extract_texts($doc, $xpath) { // Remove script and style elements foreach ($xpath->query('//script | //style') as $node) { $node->parentNode->removeChild($node); } $texts_map = []; // More robust XPath to find visible text-containing nodes $query = '//h1|//h2|//h3|//h4|//h5|//h6|//p|//li|//a|//span|//strong|//em|//b|//i|//button|//div[not(.//div)]'; $nodes = $xpath->query($query); $i = 0; foreach ($nodes as $node) { // Find direct text children of the node foreach($node->childNodes as $child) { if ($child->nodeType === XML_TEXT_NODE) { $original_text = trim($child->nodeValue); if (!empty($original_text) && strlen($original_text) > 2) { // Only process meaningful text $placeholder = "%%TEXT_{$i}%%"; $texts_map[$placeholder] = $original_text; $child->nodeValue = $placeholder; $i++; } } } } return $texts_map; } if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['page_url'])) { header('Location: /'); exit; } $page_url = $_POST['page_url']; $language = $_POST['language'] ?? 'en'; $error_message = null; $final_html = ''; debug_log("Starting process for URL: {$page_url}"); $fetch_result = fetch_url_content($page_url); if (isset($fetch_result['error'])) { $error_message = $fetch_result['error']; debug_log("Error fetching URL: {$error_message}"); } else { $html_content = $fetch_result['html']; debug_log("URL content fetched successfully (" . strlen($html_content) . " bytes)."); if (empty($html_content)) { $error_message = "The fetched HTML content is empty."; debug_log($error_message); } else { $doc = new DOMDocument(); @$doc->loadHTML('' . $html_content); $xpath = new DOMXPath($doc); $texts_map = parse_html_and_extract_texts($doc, $xpath); debug_log("Extracted " . count($texts_map) . " text fragments."); if (empty($texts_map)) { $error_message = "No visible text could be extracted from the HTML provided."; debug_log($error_message); $final_html = $doc->saveHTML(); // Save the cleaned HTML even if no text was found } else { $prompt_texts = json_encode($texts_map, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); $system_prompt = "Act as an expert direct response copywriter... your JSON output must be flawless."; // Truncated for brevity debug_log("Sending to AI API..."); $ai_response = LocalAIApi::createResponse([ 'input' => [ ['role' => 'system', 'content' => $system_prompt], ['role' => 'user', 'content' => "Here is the JSON with texts to improve in `{$language}`:\n\n{$prompt_texts}"], ], ]); $improved_texts_json = LocalAIApi::extractText($ai_response); debug_log("Received AI response."); if (empty($improved_texts_json)) { $error_message = "AI response was empty."; debug_log($error_message . " Raw Response: " . json_encode($ai_response)); $final_html = ''; } else { $improved_texts_map = json_decode($improved_texts_json, true); if (json_last_error() !== JSON_ERROR_NONE) { $error_message = "Failed to decode AI response. Error: " . json_last_error_msg(); debug_log($error_message . " Raw response: " . $improved_texts_json); $final_html = ''; } else { debug_log("AI response decoded. Replacing text nodes..."); // Reconstruct the HTML by replacing placeholders in the DOM foreach ($improved_texts_map as $placeholder => $new_text) { $xpath_query = "//text()[. = '{$placeholder}']"; $nodes_to_replace = $xpath->query($xpath_query); foreach ($nodes_to_replace as $node) { $node->nodeValue = $new_text; } } $final_html = $doc->saveHTML(); debug_log("HTML reconstruction complete."); } } } } } ?> Análise de Conteúdo - PAGEHACK
Flatlogic

Your Improved Page is Ready

The copy has been rewritten for higher conversion. Copy the code below and paste it into your website builder.