aboutsummaryrefslogtreecommitdiffstats
path: root/web.php
diff options
context:
space:
mode:
authorlolcat <will@lolcat.ca>2025-08-11 01:55:15 +0000
committerlolcat <will@lolcat.ca>2025-08-11 01:55:15 +0000
commitcdf958d29333d448f4521f4d2faa2592b58e9b27 (patch)
tree528f2a0ffa789a6f4279d9f54a4a2aaf391f390f /web.php
downloadshittyweb-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.php514
1 files changed, 514 insertions, 0 deletions
diff --git a/web.php b/web.php
new file mode 100644
index 0000000..a1588fc
--- /dev/null
+++ b/web.php
@@ -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 &gt;</a>';
+}
+
+echo $frontend->load("search.html", $payload);