2023-07-22 20:41:14 +02:00
< ? php
/*
Initialize random shit
*/
2023-11-07 14:04:56 +01:00
include " data/config.php " ;
2023-07-22 20:41:14 +02:00
include " lib/frontend.php " ;
$frontend = new frontend ();
[ $scraper , $filters ] = $frontend -> getscraperfilters ( " web " );
$get = $frontend -> parsegetfilters ( $_GET , $filters );
2023-10-16 08:30:43 +02:00
/*
Captcha
*/
2024-02-18 05:22:19 +01:00
include " lib/bot_protection.php " ;
new bot_protection ( $frontend , $get , $filters , " web " , true );
2023-07-22 20:41:14 +02:00
$payload = [
2024-02-18 05:22:19 +01:00
" timetaken " => microtime ( true ),
2023-07-22 20:41:14 +02:00
" class " => " " ,
" right-left " => " " ,
" right-right " => " " ,
" left " => " "
];
try {
$results = $scraper -> web ( $get );
} catch ( Exception $error ){
2023-11-07 14:04:56 +01:00
$frontend -> drawscrapererror ( $error -> getMessage (), $get , " web " );
2023-07-22 20:41:14 +02:00
}
2023-10-16 08:30:43 +02:00
/*
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 ;
2023-07-22 20:41:14 +02:00
$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>' .
2023-07-27 01:03:06 +02:00
'Did you mean <a href="?s=' .
urlencode ( $results [ " spelling " ][ " correction " ]) .
'&' .
$frontend -> buildquery ( $get , true ) .
2023-09-06 14:43:22 +02:00
'&spellcheck=no">' .
2023-07-27 01:03:06 +02:00
$results [ " spelling " ][ " correction " ] .
'</a>?' .
2023-07-22 20:41:14 +02:00
'</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">' .
2023-11-27 07:01:56 +01:00
'<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>' ;
2023-07-22 20:41:14 +02:00
}
$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">' .
2023-07-27 01:03:06 +02:00
'<img src="' . $frontend -> htmlimage ( $answer [ " thumb " ], " cover " ) . '" alt="thumb" class="openimg">' .
2023-07-22 20:41:14 +02:00
'</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 " ] .=
2023-07-27 01:03:06 +02:00
'<a href="' . htmlspecialchars ( $description [ " url " ]) . '" rel="noreferrer nofollow" tabindex="-1"><img src="' . $frontend -> htmlimage ( $description [ " url " ], " thumb " ) . '" alt="image" class="fullimg openimg"></a>' ;
2023-07-22 20:41:14 +02:00
break ;
case " audio " :
$right [ " answer " ] .=
2024-02-18 05:22:19 +01:00
'<audio src="/audio/linear?s=' . urlencode ( $description [ " url " ]) . '" controls><a href="/audio/linear?s=' . urlencode ( $description [ " url " ]) . '">Listen to the pronunciation audio</a></audio>' ;
2023-07-22 20:41:14 +02:00
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 );