librex/engines/google/text.php

192 lines
6.6 KiB
PHP

<?php
function get_text_results($query, $page)
{
global $config;
$mh = curl_multi_init();
$query_encoded = urlencode($query);
$results = array();
$domain = $config->google_domain;
$language = isset($_COOKIE["google_language"]) ? htmlspecialchars($_COOKIE["google_language"]) : $config->google_language;
$url = "https://www.google.$domain/search?&q=$query_encoded&start=$page";
if (3 > strlen($language))
{
$url .= "&hl=$language&lr=lang_$language";
}
if (isset($_COOKIE["safe_search"]))
{
$url .= "&safe=medium";
}
$google_ch = curl_init($url);
curl_setopt_array($google_ch, $config->curl_settings);
curl_multi_add_handle($mh, $google_ch);
$special_search = $page ? 0 : check_for_special_search($query);
$special_ch = null;
$url = null;
if ($special_search != 0)
{
switch ($special_search)
{
case 1:
$url = "https://cdn.moneyconvert.net/api/latest.json";
break;
case 2:
$split_query = explode(" ", $query);
$reversed_split_q = array_reverse($split_query);
$word_to_define = $reversed_split_q[1];
$url = "https://api.dictionaryapi.dev/api/v2/entries/en/$word_to_define";
break;
case 5:
$url = "https://wttr.in/@" . $_SERVER["REMOTE_ADDR"] . "?format=j1";
break;
case 6:
$url = "https://check.torproject.org/torbulkexitlist";
break;
case 7:
$url = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts%7Cpageimages&exintro&explaintext&redirects=1&pithumbsize=500&titles=$query_encoded";
break;
}
if ($url != NULL)
{
$special_ch = curl_init($url);
curl_setopt_array($special_ch, $config->curl_settings);
curl_multi_add_handle($mh, $special_ch);
}
}
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);
if ($special_search != 0)
{
$special_result = null;
switch ($special_search)
{
case 1:
require "engines/special/currency.php";
$special_result = currency_results($query, curl_multi_getcontent($special_ch));
break;
case 2:
require "engines/special/definition.php";
$special_result = definition_results($query, curl_multi_getcontent($special_ch));
break;
case 3:
require "engines/special/ip.php";
$special_result = ip_result();
break;
case 4:
require "engines/special/user_agent.php";
$special_result = user_agent_result();
break;
case 5:
require "engines/special/weather.php";
$special_result = weather_results(curl_multi_getcontent($special_ch));
break;
case 6:
require "engines/special/tor.php";
$special_result = tor_result(curl_multi_getcontent($special_ch));
break;
case 7:
require "engines/special/wikipedia.php";
$special_result = wikipedia_results($query, curl_multi_getcontent($special_ch));
break;
}
if ($special_result != null)
array_push($results, $special_result);
}
$xpath = get_xpath(curl_multi_getcontent($google_ch));
foreach($xpath->query("//div[@id='search']//div[contains(@class, 'g')]") as $result)
{
$url = $xpath->evaluate(".//div[@class='yuRUbf']//a/@href", $result)[0];
if ($url == null)
continue;
if (!empty($results)) // filter duplicate results, ignore special result
{
if (!array_key_exists("special_response", end($results)))
if (end($results)["url"] == $url->textContent)
continue;
}
$url = $url->textContent;
$url = check_for_privacy_frontend($url);
$title = $xpath->evaluate(".//h3", $result)[0];
$description = $xpath->evaluate(".//div[contains(@class, 'VwiC3b')]", $result)[0];
array_push($results,
array (
"title" => htmlspecialchars($title->textContent),
"url" => htmlspecialchars($url),
"base_url" => htmlspecialchars(get_base_url($url)),
"description" => $description == null ?
"No description was provided for this site." :
htmlspecialchars($description->textContent)
)
);
}
return $results;
}
function print_text_results($results)
{
$special = $results[0];
if (array_key_exists("special_response", $special))
{
$response = $special["special_response"]["response"];
$source = $special["special_response"]["source"];
echo "<p class=\"special-result-container\">";
if (array_key_exists("image", $special["special_response"]))
{
$image_url = $special["special_response"]["image"];
echo "<img src=\"image_proxy.php?url=$image_url\">";
}
echo $response;
if ($source)
echo "<a href=\"$source\" target=\"_blank\">$source</a>";
echo "</p>";
array_shift($results);
}
echo "<div class=\"text-result-container\">";
foreach($results as $result)
{
$title = $result["title"];
$url = $result["url"];
$base_url = $result["base_url"];
$description = $result["description"];
echo "<div class=\"text-result-wrapper\">";
echo "<a href=\"$url\">";
echo "$base_url";
echo "<h2>$title</h2>";
echo "</a>";
echo "<span>$description</span>";
echo "</div>";
}
echo "</div>";
}
?>