backend = new backend("mwmbl"); include "lib/heckhtml.php"; $this->heckhtml = new heckhtml(); } public function getfilters($page){ return []; } private function get($proxy, $url, $get = []){ $curlproc = curl_init(); if($get !== []){ $get = http_build_query($get); $url .= "?" . $get; } curl_setopt($curlproc, CURLOPT_URL, $url); curl_setopt($curlproc, CURLOPT_ENCODING, ""); // default encoding curl_setopt($curlproc, CURLOPT_HTTPHEADER, ["User-Agent: " . config::USER_AGENT, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language: en-US,en;q=0.5", "Accept-Encoding: gzip", "DNT: 1", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "Sec-Fetch-Dest: document", "Sec-Fetch-Mode: navigate", "Sec-Fetch-Site: none", "Sec-Fetch-User: ?1"] ); curl_setopt($curlproc, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlproc, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curlproc, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curlproc, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curlproc, CURLOPT_TIMEOUT, 30); $this->backend->assign_proxy($curlproc, $proxy); $data = curl_exec($curlproc); if(curl_errno($curlproc)){ throw new Exception(curl_error($curlproc)); } curl_close($curlproc); return $data; } public function web($get){ $search = $get["s"]; if(strlen($search) === 0){ throw new Exception("Search term is empty!"); } try{ $html = $this->get( $this->backend->get_ip(), // no next page! "https://mwmbl.org/app/home/", [ "q" => $search ] ); }catch(Exception $error){ throw new Exception("Failed to fetch HTML"); } $out = [ "status" => "ok", "spelling" => [ "type" => "no_correction", "using" => null, "correction" => null ], "npt" => null, "answer" => [], "web" => [], "image" => [], "video" => [], "news" => [], "related" => [] ]; $this->heckhtml->load($html); $results = $this->heckhtml ->getElementsByClassName( "result", "li" ); foreach($results as $result){ $this->heckhtml->load($result); $p = $this->heckhtml ->getElementsByTagName("p"); $out["web"][] = [ "title" => $this->titledots( $this->heckhtml ->getTextContent( $this->heckhtml ->getElementsByClassName( "title", $p )[0] ) ), "description" => $this->titledots( $this->heckhtml ->getTextContent( $this->heckhtml ->getElementsByClassName( "extract", $p )[0] ) ), "url" => $this->heckhtml ->getTextContent( $this->heckhtml ->getElementsByTagName("a") [0] ["attributes"] ["href"] ), "date" => null, "type" => "web", "thumb" => [ "url" => null, "ratio" => null ], "sublink" => [], "table" => [] ]; } return $out; } private function titledots($title){ return rtrim($title, "…"); } }