feat: adding fallback to other instances if rate limiting happens, PR from davidovski/librex.

Fallback to other librex instances
This commit is contained in:
Ahwxorg
2023-08-12 02:12:37 +02:00
committed by GitHub
5 changed files with 69 additions and 1 deletions
+3
View File
@@ -20,6 +20,9 @@
"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
e.g.: Preset the invidious instance URL: "instance_url" => "https://yewtu.be",
+6
View File
@@ -71,6 +71,12 @@
curl_multi_exec($mh, $running);
} while ($running);
if (curl_getinfo($google_ch)['http_code'] != '200')
{
require "engines/librex/text.php";
return get_librex_results($query, $page);
}
if ($special_search != 0)
{
$special_result = null;
+51
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);
}
?>
+7
View File
@@ -230,4 +230,11 @@
echo "<button type=\"submit\">$text</button>";
echo "</form>";
}
function copy_cookies($curl)
{
if (array_key_exists("HTTP_COOKIE", $_SERVER))
curl_setopt( $curl, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE'] );
}
?>
+2 -1
View File
@@ -1,7 +1,8 @@
<?php
$config = require "config.php";
if (isset($_REQUEST["reset"]))
// Reset all cookies when resetting, or before saving new cookies
if (isset($_REQUEST["reset"]) || isset($_REQUEST["save"]))
{
if (isset($_SERVER["HTTP_COOKIE"]))
{