From 6eabc3edf4a8344e0f508cc1f7f881f5f00dc0fa Mon Sep 17 00:00:00 2001
From: lolcat <will@lolcat.ca>
Date: Wed, 9 Oct 2024 18:34:36 -0400
Subject: [PATCH] qwant captcha detect

---
 scraper/qwant.php | 62 +++++++++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/scraper/qwant.php b/scraper/qwant.php
index 48ecd85..beaa57c 100644
--- a/scraper/qwant.php
+++ b/scraper/qwant.php
@@ -353,26 +353,17 @@ class qwant{
 			"related" => []
 		];
 		
-		if($json["status"] != "success"){
+		if(
+			$json["status"] != "success" &&
+			$json["data"]["error_code"] === 5
+		){
 			
-			if($json["data"]["error_code"] === 5){
-				
-				return $out;
-			}
-			
-			if(isset($json["data"]["error_code"])){
-				
-				switch($json["data"]["error_code"]){
-					
-					case 27:
-						throw new Exception("Qwant returned a captcha");
-						break;
-				}
-			}
-			
-			throw new Exception("Qwant returned an error code: " . $json["data"]["error_code"]);
+			// no results
+			return $out;
 		}
 		
+		$this->detect_errors($json);
+		
 		if(!isset($json["data"]["result"]["items"]["mainline"])){
 			
 			throw new Exception("Server did not return a result object");
@@ -654,10 +645,7 @@ class qwant{
 			throw new Exception("Failed to decode JSON");
 		}
 		
-		if($json["status"] != "success"){
-			
-			throw new Exception("Qwant returned an API error");
-		}
+		$this->detect_errors($json);
 		
 		if(isset($json["data"]["result"]["items"]["mainline"])){
 			
@@ -754,10 +742,7 @@ class qwant{
 			throw new Exception("Could not parse JSON");
 		}
 		
-		if($json["status"] != "success"){
-			
-			throw new Exception("Qwant returned an API error");
-		}
+		$this->detect_errors($json);
 		
 		if(isset($json["data"]["result"]["items"]["mainline"])){
 			
@@ -861,10 +846,7 @@ class qwant{
 			throw new Exception("Could not parse JSON");
 		}
 		
-		if($json["status"] != "success"){
-			
-			throw new Exception("Qwant returned an API error");
-		}
+		$this->detect_errors($json);
 		
 		if(isset($json["data"]["result"]["items"]["mainline"])){
 			
@@ -906,6 +888,28 @@ class qwant{
 		return $out;
 	}
 	
+	private function detect_errors($json){
+		
+		if(
+			isset($json["status"]) &&
+			$json["status"] == "error"
+		){
+			
+			if(isset($json["data"]["error_data"]["captchaUrl"])){
+				
+				throw new Exception("Qwant returned a captcha");
+			}elseif(isset($json["data"]["error_data"]["error_code"])){
+				
+				throw new Exception(
+					"Qwant returned an API error: " .
+					$json["data"]["error_data"]["error_code"]
+				);
+			}
+			
+			throw new Exception("Qwant returned an API error");
+		}
+	}
+	
 	private function limitstrlen($text){
 		
 		return explode("\n", wordwrap($text, 300, "\n"))[0];