engines = get_engines(); shuffle($this->engines); $this->query = $opts->query; $this->cache_key = "text:" . $this->query . "p" . $opts->page . "l" . $opts->language; $this->page = $opts->page; $this->opts = $opts; $this->engine = $opts->engine; $query_parts = explode(" ", $this->query); $last_word_query = end($query_parts); if (substr($this->query, 0, 1) == "!" || substr($last_word_query, 0, 1) == "!") check_ddg_bang($this->query, $opts); if (has_cached_results($this->cache_key)) return; if ($this->engine == "auto") $this->engine = $this->select_engine(); // no engine was selected if (is_null($this->engine)) return; // this only happens if a specific engine was selected, not if auto is used if (has_cooldown($this->engine, $this->opts->cooldowns)) return; $this->engine_request = $this->get_engine_request($this->engine, $opts, $mh); if (is_null($this->engine_request)) return; require_once "engines/special/special.php"; $this->special_request = get_special_search_request($opts, $mh); } private function select_engine() { if (sizeof($this->engines) == 0) return null; $engine = array_pop($this->engines); // if this engine is on cooldown, try again if (!has_cooldown($engine, $this->opts->cooldowns)) return $engine; return $this->select_engine(); } private function get_engine_request($engine, $opts, $mh) { if ($engine == "google") { require_once "engines/text/google.php"; return new GoogleRequest($opts, $mh); } if ($engine == "duckduckgo") { require_once "engines/text/duckduckgo.php"; return new DuckDuckGoRequest($opts, $mh); } if ($engine == "brave") { require_once "engines/text/brave.php"; return new BraveSearchRequest($opts, $mh); } if ($engine == "yandex") { require_once "engines/text/yandex.php"; return new YandexSearchRequest($opts, $mh); } if ($engine == "ecosia") { require_once "engines/text/ecosia.php"; return new EcosiaSearchRequest($opts, $mh); } if ($engine == "mojeek") { require_once "engines/text/mojeek.php"; return new MojeekSearchRequest($opts, $mh); } // if an invalid engine is selected, don't give any results return null; } public function parse_results($response) { if (has_cached_results($this->cache_key)) return fetch_cached_results($this->cache_key); if (!isset($this->engine_request)) return array(); $results = $this->engine_request->get_results(); if (empty($results)) { set_cooldown($this->engine, ($this->opts->request_cooldown ?? "1") * 60, $this->opts->cooldowns); } else { if ($this->special_request) { $special_result = $this->special_request->get_results(); if ($special_result) $results = array_merge(array($special_result), $results); } } if (!empty($results)) { $results["results_source"] = parse_url($this->engine_request->url)["host"]; store_cached_results($this->cache_key, $results, $this->opts->cache_time * 60); } return $results; } public static function print_results($results, $opts) { if (empty($results)) { echo "
An error occured fetching results
" . $results["error"]["message"] . "
Did you mean "; echo "$didyoumean"; echo "?
"; } if (array_key_exists("special_response", $special)) { $response = $special["special_response"]["response"]; $source = $special["special_response"]["source"]; echo "";
if (array_key_exists("image", $special["special_response"])) {
$image_url = $special["special_response"]["image"];
echo "";
}
echo $response;
if ($source) {
$source = check_for_privacy_frontend($source, $opts);
echo "$source";
}
echo "