diff options
author | lolcat <will@lolcat.ca> | 2025-08-11 01:55:15 +0000 |
---|---|---|
committer | lolcat <will@lolcat.ca> | 2025-08-11 01:55:15 +0000 |
commit | cdf958d29333d448f4521f4d2faa2592b58e9b27 (patch) | |
tree | 528f2a0ffa789a6f4279d9f54a4a2aaf391f390f /web.php | |
download | shittyweb-search-cdf958d29333d448f4521f4d2faa2592b58e9b27.tar.gz shittyweb-search-cdf958d29333d448f4521f4d2faa2592b58e9b27.tar.bz2 shittyweb-search-cdf958d29333d448f4521f4d2faa2592b58e9b27.zip |
fix wikipedia crashgrafted
Diffstat (limited to 'web.php')
-rw-r--r-- | web.php | 514 |
1 files changed, 514 insertions, 0 deletions
@@ -0,0 +1,514 @@ +<?php + +/* + Initialize random shit +*/ +include "data/config.php"; + +include "lib/frontend.php"; +$frontend = new frontend(); + +[$scraper, $filters] = $frontend->getscraperfilters("web"); + +$get = $frontend->parsegetfilters($_GET, $filters); + +/* + Captcha +*/ +include "lib/bot_protection.php"; +new bot_protection($frontend, $get, $filters, "web", true); + +$payload = [ + "timetaken" => microtime(true), + "class" => "", + "right-left" => "", + "right-right" => "", + "left" => "" +]; + +try{ + $results = $scraper->web($get); + +}catch(Exception $error){ + + $frontend->drawscrapererror($error->getMessage(), $get, "web", $payload["timetaken"]); +} + +/* + Prepend Oracle output, if applicable +*/ +include("oracles/encoder.php"); +include("oracles/calc.php"); +include("oracles/time.php"); +include("oracles/numerics.php"); +$oracles = [new calculator(), new encoder(), new time(), new numerics()]; +$fortune = ""; +foreach ($oracles as $oracle) { + if ($oracle->check_query($_GET["s"])) { + $resp = $oracle->generate_response($_GET["s"]); + if ($resp != "") { + $fortune .= "<div class=\"infobox\">"; + foreach ($resp as $title => $r) { + if ($title) { + $fortune .= "<h3>".htmlspecialchars($title)."</h3><div class=\"code\">".htmlspecialchars($r)."</div>"; + } + else { + $fortune .= "<i>".$r."</i><br>"; + } + } + $fortune .= "<small>Answer provided by oracle: ".$oracle->info["name"]."</small></div>"; + } + break; + } +} +$payload["left"] = $fortune; + +$answerlen = 0; + +/* + Spelling checker +*/ +if($results["spelling"]["type"] != "no_correction"){ + + switch($results["spelling"]["type"]){ + + case "including": + $type = "Including results for"; + break; + + case "not_many": + $type = "Not many results contains"; + break; + } + + $payload["left"] .= + '<div class="infobox">' . + $type . ' <b>' . htmlspecialchars($results["spelling"]["using"]) . '</b>.<br>' . + 'Did you mean <a href="?s=' . + urlencode($results["spelling"]["correction"]) . + '&' . + $frontend->buildquery($get, true) . + '&spellcheck=no">' . + htmlspecialchars($results["spelling"]["correction"]) . + '</a>?' . + '</div>'; +} + +/* + Populate links +*/ +if(count($results["web"]) === 0){ + + $payload["left"] .= + '<div class="infobox">' . + "<h1>Nobody here but us chickens!</h1>" . + 'Have you tried:' . + '<ul>' . + '<li>Using a different scraper</li>' . + '<li>Using fewer keywords</li>' . + '<li>Defining broader filters (Is NSFW turned off?)</li>' . + '</ul>' . + '</div>'; +} + +foreach($results["web"] as $site){ + + $n = null; + + if($site["date"] !== null){ + + $date = date("jS M y @ g:ia", $site["date"]); + }else{ + + $date = null; + } + + $payload["left"] .= $frontend->drawtextresult($site, $date, $n, $get["s"]); +} + +$right = []; + +/* + Generate images +*/ +if(count($results["image"]) !== 0){ + + $answerlen++; + $right["image"] = + '<div class="answer-wrapper">' . + '<input id="answer' . $answerlen . '" class="spoiler" type="checkbox">' . + '<div class="answer">' . + '<div class="answer-title">' . + '<a class="answer-title" href="/images?s=' . urlencode($get["s"]) . '"><h2>Images</h2></a>' . + '</div>' . + '<div class="images">'; + + foreach($results["image"] as $image){ + + $right["image"] .= + '<a class="image" href="' . htmlspecialchars($image["url"]) . '" rel="noreferrer nofollow" title="' . htmlspecialchars($image["title"]) . '" data-json="' . htmlspecialchars(json_encode($image["source"])) . '" tabindex="-1">' . + '<img src="' . $frontend->htmlimage($image["source"][count($image["source"]) - 1]["url"], "square") . '" alt="thumb">'; + + if( + $image["source"][0]["width"] !== null && + $image["source"][0]["height"] !== null + ){ + + $right["image"] .= '<div class="duration">' . $image["source"][0]["width"] . 'x' . $image["source"][0]["height"] . '</div>'; + } + + $right["image"] .= '</a>'; + } + + $right["image"] .= + '</div></div>' . + '<label class="spoiler-button" for="answer' . $answerlen . '"></label></div>'; +} + +/* + Generate videos +*/ +if(count($results["video"]) !== 0){ + + $answerlen++; + $right["video"] = + '<div class="answer-wrapper">' . + '<input id="answer' . $answerlen . '" class="spoiler" type="checkbox">' . + '<div class="answer">' . + '<div class="answer-title">' . + '<a class="answer-title" href="/videos?s=' . urlencode($get["s"]) . '"><h2>Videos</h2></a>' . + '</div>'; + + foreach($results["video"] as $video){ + + if($video["views"] !== null){ + + $greentext = number_format($video["views"]) . " views"; + }else{ + + $greentext = null; + } + + if($video["date"] !== null){ + + if($greentext !== null){ + + $greentext .= " • "; + } + + $greentext .= date("jS M y @ g:ia", $video["date"]); + } + + if($video["duration"] !== null){ + + if($video["duration"] == "_LIVE"){ + + $duration = 'LIVE'; + }else{ + + $duration = $frontend->s_to_timestamp($video["duration"]); + } + }else{ + + $duration = null; + } + + $right["video"] .= $frontend->drawtextresult($video, $greentext, $duration, $get["s"], false); + } + + $right["video"] .= + '</div>' . + '<label class="spoiler-button" for="answer' . $answerlen . '"></label></div>'; +} + +/* + Generate news +*/ +if(count($results["news"]) !== 0){ + + $answerlen++; + $right["news"] = + '<div class="answer-wrapper">' . + '<input id="answer' . $answerlen . '" class="spoiler" type="checkbox">' . + '<div class="answer">' . + '<div class="answer-title">' . + '<a class="answer-title" href="/news?s=' . urlencode($get["s"]) . '"><h2>News</h2></a>' . + '</div>'; + + foreach($results["news"] as $news){ + + if($news["date"] !== null){ + + $greentext = date("jS M y @ g:ia", $news["date"]); + }else{ + + $greentext = null; + } + + $right["news"] .= $frontend->drawtextresult($news, $greentext, null, $get["s"], false); + } + + $right["news"] .= + '</div>' . + '<label class="spoiler-button" for="answer' . $answerlen . '"></label></div>'; +} + +/* + Generate answers +*/ +if(count($results["answer"]) !== 0){ + + $right["answer"] = ""; + + foreach($results["answer"] as $answer){ + + $answerlen++; + $right["answer"] .= + '<div class="answer-wrapper">' . + '<input id="answer' . $answerlen . '" class="spoiler" type="checkbox">' . + '<div class="answer"><div class="wiki-head">'; + + if(!empty($answer["title"])){ + + $right["answer"] .= + '<div class="answer-title">'; + + if(!empty($answer["url"])){ + + $right["answer"] .= '<a class="answer-title" href="' . htmlspecialchars($answer["url"]) . '" rel="noreferrer nofollow">'; + } + + $right["answer"] .= '<h1>' . htmlspecialchars($answer["title"]) . '</h1>'; + + if(!empty($answer["url"])){ + + $right["answer"] .= '</a>'; + } + + + $right["answer"] .= '</div>'; + } + + if(!empty($answer["url"])){ + + $right["answer"] .= + $frontend->drawlink($answer["url"]); + } + + $right["answer"] .= '<div class="description">'; + + if(!empty($answer["thumb"])){ + + $right["answer"] .= + '<a href="' . htmlspecialchars($answer["thumb"]) . '" rel="noreferrer nofollow" class="photo">' . + '<img src="' . $frontend->htmlimage($answer["thumb"], "cover") . '" alt="thumb" class="openimg">' . + '</a>'; + } + + foreach($answer["description"] as $description){ + + switch($description["type"]){ + + case "text": + $right["answer"] .= $frontend->highlighttext($get["s"], $description["value"]); + break; + + case "title": + $right["answer"] .= + '<h2>' . + htmlspecialchars($description["value"]) . + '</h2>'; + break; + + case "italic": + $right["answer"] .= + '<i>' . + $frontend->highlighttext($get["s"], $description["value"]) . + '</i>'; + break; + + case "quote": + $right["answer"] .= + '<div class="quote">' . + $frontend->highlighttext($get["s"], $description["value"]) . + '</div>'; + break; + + case "code": + $right["answer"] .= + '<div class="code" tabindex="-1">' . + $frontend->highlightcode($description["value"], true) . + '</div>'; + break; + + case "inline_code": + $right["answer"] .= + '<div class="code-inline">' . + htmlspecialchars($description["value"]) . + '</div>'; + break; + + case "link": + $right["answer"] .= + '<a href="' . htmlspecialchars($description["url"]) . '" rel="noreferrer nofollow" class="underline" tabindex="-1">' . htmlspecialchars($description["value"]) . '</a>'; + break; + + case "image": + $right["answer"] .= + '<a href="' . htmlspecialchars($description["url"]) . '" rel="noreferrer nofollow" tabindex="-1"><img src="' . $frontend->htmlimage($description["url"], "thumb") . '" alt="image" class="fullimg openimg"></a>'; + break; + + case "audio": + $right["answer"] .= + '<audio src="/audio/linear?s=' . urlencode($description["url"]) . '" controls><a href="/audio/linear?s=' . urlencode($description["url"]) . '">Listen to the pronunciation audio</a></audio>'; + break; + } + } + + $right["answer"] .= '</div>'; + + if(count($answer["table"]) !== 0){ + + $right["answer"] .= '<table>'; + + foreach($answer["table"] as $info => $value){ + + $right["answer"] .= + '<tr>' . + '<td>' . $info . '</td>' . + '<td>' . $value . '</td>' . + '</tr>'; + } + + $right["answer"] .= '</table>'; + } + + if(count($answer["sublink"]) !== 0){ + + $right["answer"] .= '<div class="socials">'; + $icons = glob("static/icon/*"); + + foreach($answer["sublink"] as $website => $url){ + + $flag = false; + $icon = str_replace(" ", "", strtolower($website)); + + foreach($icons as $path){ + + if(pathinfo($path, PATHINFO_FILENAME) == $icon){ + + $flag = true; + break; + } + } + + if($flag === false){ + + $icon = "website"; + } + + $right["answer"] .= + '<a href="' . htmlspecialchars($url) . '" rel="noreferrer nofollow" tabindex="-1">' . + '<div class="center">' . + '<img src="/static/icon/' . $icon . '.png" alt="icon">' . + '<div class="title">' . $website . '</div>' . + '</div>' . + '</a>'; + } + + $right["answer"] .= '</div>'; + } + + $right["answer"] .= + '</div></div>' . + '<label class="spoiler-button" for="answer' . $answerlen . '"></label></div>'; + } +} + +/* + Add right containers +*/ +if(isset($right["answer"])){ + + if(count($right) >= 2){ + + $payload["right-right"] = $right["answer"]; + unset($right["answer"]); + } +} + +$c = 0; +foreach($right as $snippet){ + + if($c % 2 === 0){ + + $payload["right-left"] .= $snippet; + }else{ + + $payload["right-right"] .= $snippet; + } + + $c++; +} + +if($c !== 0){ + + $payload["class"] = " has-answer"; +} + +/* + Generate related searches +*/ +$c = count($results["related"]); + +if($c !== 0){ + $payload["left"] .= '<h3>Related searches</h3><table class="related">'; + + $opentr = false; + + for($i=0; $i<$c; $i++){ + + if(($i % 2) === 0){ + + $opentr = true; + $payload["left"] .= '<tr>'; + }else{ + + $opentr = false; + } + + $payload["left"] .= + '<td>' . + '<a href="/web?s=' . + urlencode($results["related"][$i]) . "&" . + $frontend->buildquery($get, true) . + '">' . + htmlspecialchars($results["related"][$i]) . + '</a>'; + + $payload["left"] .= '</td>'; + + if($opentr === false){ + + $payload["left"] .= '</tr>'; + } + } + + if($opentr === true){ + + $payload["left"] .= '<td></td></tr>'; + } + + $payload["left"] .= '</table>'; +} + +/* + Load next page +*/ +if($results["npt"] !== null){ + + $payload["left"] .= + '<a href="' . $frontend->htmlnextpage($get, $results["npt"], "web") . '" class="nextpage">Next page ></a>'; +} + +echo $frontend->load("search.html", $payload); |