LibreY/misc/search_engine.php

106 lines
3.1 KiB
PHP
Raw Normal View History

<?php
abstract class EngineRequest {
function __construct($opts, $mh) {
$this->query = $opts->query;
$this->page = $opts->page;
$this->opts = $opts;
$url = $this->get_request_url();
if ($url) {
$this->ch = curl_init($url);
curl_setopt_array($this->ch, $opts->curl_settings);
curl_multi_add_handle($mh, $this->ch);
}
}
public function get_request_url(){
return "";
}
2023-08-22 05:25:44 -07:00
public function successful() {
return curl_getinfo($this->ch)['http_code'] == '200';
}
abstract function get_results();
static public function print_results($results){}
}
function load_opts() {
$opts = require "config.php";
$opts->query = trim($_REQUEST["q"]);
$opts->type = (int) $_REQUEST["t"] ?? 0;
$opts->page = (int) $_REQUEST["p"] ?? 0;
$opts->theme = trim(htmlspecialchars($_COOKIE["theme"] ?? "dark"));
$opts->safe_search = isset($_COOKIE["safe_search"]);
$opts->disable_special = isset($_COOKIE["disable_special"]);
$opts->disable_frontends = isset($_COOKIE["disable_frontends"]);
$opts->language ??= trim(htmlspecialchars($_COOKIE["language"]));
$opts->number_of_results ??= trim(htmlspecialchars($_COOKIE["number_of_results"]));
// TODO frontends
return $opts;
}
function init_search($opts, $mh) {
switch ($opts->type)
{
case 1:
require "engines/qwant/image.php";
return new QwantImageSearch($opts, $mh);
case 2:
require "engines/invidious/video.php";
return new VideoSearch($opts, $mh);
case 3:
if ($opts->disable_bittorent_search) {
echo "<p class=\"text-result-container\">The host disabled this feature! :C</p>";
break;
}
require "engines/bittorrent/merge.php";
return new TorrentSearch($opts, $mh);
case 4:
if ($opts->disable_hidden_service_search) {
echo "<p class=\"text-result-container\">The host disabled this feature! :C</p>";
break;
}
require "engines/ahmia/hidden_service.php";
return new TorSearch($opts, $mh);
default:
2023-08-21 16:16:22 -07:00
require "engines/text/text.php";
return new TextSearch($opts, $mh);
}
}
2023-08-21 15:58:09 -07:00
function fetch_search_results($opts, $do_print) {
2023-08-21 15:58:09 -07:00
$start_time = microtime(true);
$mh = curl_multi_init();
$search_category = init_search($opts, $mh);
2023-08-21 15:58:09 -07:00
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);
$results = $search_category->get_results();
// TODO test if no results here and fallback
2023-08-21 15:58:09 -07:00
if (!$do_print)
return $results;
print_elapsed_time($start_time);
$search_category->print_results($results);
return $results;
}
?>