From b1b2583e42095430ce00c78f4e784b188de0a7ce Mon Sep 17 00:00:00 2001 From: Dominik Hebeler <dominik@suma-ev.de> Date: Thu, 21 Feb 2019 10:15:05 +0100 Subject: [PATCH] Added advertisements when yahoo is disabled --- app/MetaGer.php | 11 +++- app/Models/parserSkripte/OvertureAds.php | 78 ++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 6 deletions(-) diff --git a/app/MetaGer.php b/app/MetaGer.php index e79009526..1e303cf7e 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -554,7 +554,9 @@ class MetaGer # Check if this engine can use eventually defined parameter-filter if ($valid) { foreach ($this->parameterFilter as $filterName => $filter) { - if (empty($filter->sumas->$suma)) { + # We need to check if the searchengine supports the parameter value, too + $value = $request->input($filter->{"get-parameter"}, ""); + if (empty($filter->sumas->$suma) || empty($filter->sumas->{$suma}->values->{$value})) { $valid = false; break; } @@ -582,6 +584,13 @@ class MetaGer } + # Implements Yahoo Ads if Yahoo is not enabled as a searchengine + if (empty($this->enabledSearchengines["yahoo"]) && $this->fokus != "bilder" && !empty($this->sumaFile->sumas->{"yahoo-ads"})) { + $this->enabledSearchengines["yahoo-ads"] = $this->sumaFile->sumas->{"yahoo-ads"}; + } + + #die(var_dump($this->enabledSearchengines)); + if (sizeof($this->enabledSearchengines) === 0) { $filter = ""; foreach ($this->queryFilter as $queryFilter => $filterPhrase) { diff --git a/app/Models/parserSkripte/OvertureAds.php b/app/Models/parserSkripte/OvertureAds.php index 58111694e..ac3bccbe8 100644 --- a/app/Models/parserSkripte/OvertureAds.php +++ b/app/Models/parserSkripte/OvertureAds.php @@ -11,6 +11,9 @@ class OvertureAds extends Searchengine public function __construct($name, \StdClass $engine, \App\MetaGer $metager) { parent::__construct($name, $engine, $metager); + # We need some Affil-Data for the advertisements + $this->getString .= $this->getOvertureAffilData($metager->getUrl()); + $this->hash = md5($this->engine->host . $this->getString . $this->engine->port . $this->name); } public function loadResults($result) @@ -24,10 +27,10 @@ class OvertureAds extends Searchengine $ads = $content->xpath('//Results/ResultSet[@id="searchResults"]/Listing'); foreach ($ads as $ad) { - $title = $ad["title"]; - $link = $ad->{"ClickUrl"}->__toString(); + $title = $ad["title"]; + $link = $ad->{"ClickUrl"}->__toString(); $anzeigeLink = $ad["siteHost"]; - $descr = $ad["description"]; + $descr = $ad["description"]; $this->counter++; $this->ads[] = new \App\Models\Result( $this->engine, @@ -35,8 +38,10 @@ class OvertureAds extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, - $this->counter + $this->engine->{"display-name"}, + $this->engine->{"homepage"}, + $this->counter, + [] ); } } catch (\Exception $e) { @@ -46,4 +51,67 @@ class OvertureAds extends Searchengine } } + public function getNext(\App\MetaGer $metager, $result) + { + $result = preg_replace("/\r\n/si", "", $result); + try { + $content = simplexml_load_string($result); + if (!$content) { + return; + } + } catch (\Exception $e) { + Log::error("A problem occurred parsing results from $this->name:"); + Log::error($e->getMessage()); + return; + } + + if (!$content) { + return; + } + + // Yahoo liefert, wenn es keine weiteren Ergebnisse hat immer wieder die gleichen Ergebnisse + // Wir müssen also überprüfen, ob wir am Ende der Ergebnisse sind + $resultCount = $content->xpath('//Results/ResultSet[@id="inktomi"]/MetaData/TotalHits'); + $results = $content->xpath('//Results/ResultSet[@id="inktomi"]/Listing'); + if (isset($resultCount[0]) && sizeof($results) > 0) { + $resultCount = intval($resultCount[0]->__toString()); + $lastResultOnPage = intval($results[sizeof($results) - 1]["rank"]); + if ($resultCount <= $lastResultOnPage) { + return; + } + } else { + return; + } + + $nextArgs = $content->xpath('//Results/NextArgs'); + if (isset($nextArgs[0])) { + $nextArgs = $nextArgs[0]->__toString(); + } else { + $nextArgs = $content->xpath('//Results/ResultSet[@id="inktomi"]/NextArgs'); + if (isset($nextArgs[0])) { + $nextArgs = $nextArgs[0]->__toString(); + } else { + return; + } + } + + # Erstellen des neuen Suchmaschinenobjekts und anpassen des GetStrings: + $next = new Overture($this->name, $this->engine, $metager); + $next->getString = preg_replace("/&Keywords=.*?&/si", "&", $next->getString) . "&" . $nextArgs; + $next->hash = md5($next->engine->host . $next->getString . $next->engine->port . $next->name); + $this->next = $next; + } + + # Liefert Sonderdaten für Yahoo + private function getOvertureAffilData($url) + { + $affil_data = 'ip=' . $this->ip; + $affil_data .= '&ua=' . $this->useragent; + $affilDataValue = $this->urlEncode($affil_data); + # Wir benötigen die ServeUrl: + $serveUrl = $this->urlEncode($url); + + return "&affilData=" . $affilDataValue . "&serveUrl=" . $serveUrl; + } + } -- GitLab