Merge branch 'librex_fallback'

This commit is contained in:
Fijxu 2023-08-11 01:33:04 -04:00
commit 2f87e05d6e
5 changed files with 68 additions and 7 deletions

View File

@ -20,6 +20,9 @@
"disable_hidden_service_search" => false, "disable_hidden_service_search" => false,
// Fallback to another librex instance if google search fails
"instance_fallback" => true,
/* /*
Preset privacy friendly frontends for users, these can be overwritten by users in the settings Preset privacy friendly frontends for users, these can be overwritten by users in the settings
e.g.: Preset the invidious instance URL: "instance_url" => "https://yewtu.be", e.g.: Preset the invidious instance URL: "instance_url" => "https://yewtu.be",

View File

@ -70,11 +70,11 @@
do { do {
curl_multi_exec($mh, $running); curl_multi_exec($mh, $running);
} while ($running); } while ($running);
if (curl_getinfo($google_ch)['http_code'] == '302') {
$instances_json = json_decode(file_get_contents("instances.json"), true); if (curl_getinfo($google_ch)['http_code'] != '200')
$instances = array_map(fn($n) => $n['clearnet'], array_filter($instances_json['instances'], fn($n) => !is_null($n['clearnet']))); {
header("Location: " . $instances[array_rand($instances)] . "search.php?q=$query"); require "engines/librex/text.php";
die(); return get_librex_results($query, $page);
} }

51
engines/librex/text.php Normal file
View File

@ -0,0 +1,51 @@
<?php
function get_librex_results($query, $page)
{
global $config;
if (!$config->instance_fallback)
return array();
$instances_json = json_decode(file_get_contents("instances.json"), true);
if (empty($instances_json["instances"]))
return array();
$instances = array_map(fn($n) => $n['clearnet'], array_filter($instances_json['instances'], fn($n) => !is_null($n['clearnet'])));
shuffle($instances);
$query_encoded = urlencode($query);
$results = array();
$tries = 0;
do {
$tries++;
// after "too many" requests, give up
if ($tries > 5)
return array();
$instance = array_pop($instances);
if (parse_url($instance)["host"] == parse_url($_SERVER['HTTP_HOST'])["host"])
continue;
$url = $instance . "api.php?q=$query_encoded&p=$page&t=0";
$librex_ch = curl_init($url);
curl_setopt_array($librex_ch, $config->curl_settings);
copy_cookies($librex_ch);
$response = curl_exec($librex_ch);
curl_close($librex_ch);
$code = curl_getinfo($librex_ch)["http_code"];
$results = json_decode($response, true);
} while ( $results == null || count($results) <= 1);
return array_values($results);
}
?>

View File

@ -230,4 +230,11 @@
echo "<button type=\"submit\">$text</button>"; echo "<button type=\"submit\">$text</button>";
echo "</form>"; echo "</form>";
} }
function copy_cookies($curl)
{
if (array_key_exists("HTTP_COOKIE", $_SERVER))
curl_setopt( $curl, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE'] );
}
?> ?>

View File

@ -1,7 +1,7 @@
<?php <?php
$config = require "config.php"; $config = require "config.php";
// clear all coookies on changes // Reset all cookies when resetting, or before saving new cookies
if (isset($_REQUEST["reset"]) || isset($_REQUEST["save"])) if (isset($_REQUEST["reset"]) || isset($_REQUEST["save"]))
{ {
if (isset($_SERVER["HTTP_COOKIE"])) if (isset($_SERVER["HTTP_COOKIE"]))