google wagies!! yellow alert!! the 4get guy patched it again, do something!!
This commit is contained in:
+155
-20
@@ -9,6 +9,9 @@ class google{
|
|||||||
|
|
||||||
include "lib/backend.php";
|
include "lib/backend.php";
|
||||||
$this->backend = new backend("google");
|
$this->backend = new backend("google");
|
||||||
|
|
||||||
|
$this->proc = curl_multi_init();
|
||||||
|
$this->handles = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getfilters($page){
|
public function getfilters($page){
|
||||||
@@ -614,6 +617,145 @@ class google{
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function redirect_add_url($url){
|
||||||
|
|
||||||
|
if(
|
||||||
|
preg_match(
|
||||||
|
'/^\/goto\?url=([^&]+)/',
|
||||||
|
$url,
|
||||||
|
$slug
|
||||||
|
) === 0
|
||||||
|
){
|
||||||
|
|
||||||
|
// not a google redirect
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
$curlproc = curl_init();
|
||||||
|
|
||||||
|
curl_setopt($curlproc, CURLOPT_URL, "https://www.google.com/goto?url=" . urlencode($slug[1]));
|
||||||
|
|
||||||
|
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,*/*;q=0.8",
|
||||||
|
"Accept-Language: en-US,en;q=0.5",
|
||||||
|
"Accept-Encoding: gzip, deflate, br, zstd",
|
||||||
|
"DNT: 1",
|
||||||
|
"Sec-GPC: 1",
|
||||||
|
"Connection: keep-alive",
|
||||||
|
"Upgrade-Insecure-Requests: 1",
|
||||||
|
"Sec-Fetch-Dest: document",
|
||||||
|
"Sec-Fetch-Mode: navigate",
|
||||||
|
"Sec-Fetch-Site: none",
|
||||||
|
"Sec-Fetch-User: ?1",
|
||||||
|
"Priority: u=0, i"]
|
||||||
|
);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
curl_multi_add_handle($this->proc, $curlproc);
|
||||||
|
$this->handles[] = [
|
||||||
|
"replacement" => $url,
|
||||||
|
"handle" => $curlproc
|
||||||
|
];
|
||||||
|
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function resolve_urls(&$scraped_data){
|
||||||
|
|
||||||
|
do{
|
||||||
|
do{
|
||||||
|
$status = curl_multi_exec($this->proc, $active);
|
||||||
|
}while($status === CURLM_CALL_MULTI_PERFORM);
|
||||||
|
|
||||||
|
if($active){
|
||||||
|
curl_multi_select($this->proc);
|
||||||
|
}
|
||||||
|
|
||||||
|
}while($active && $status === CURLM_OK);
|
||||||
|
|
||||||
|
//
|
||||||
|
// if we reach this, we're done downloading garbage
|
||||||
|
//
|
||||||
|
|
||||||
|
// parse redirect values & create data shit
|
||||||
|
$keys = [];
|
||||||
|
$replacements = [];
|
||||||
|
|
||||||
|
for($i=0; $i<count($this->handles); $i++){
|
||||||
|
|
||||||
|
$this->fuckhtml->load(
|
||||||
|
curl_multi_getcontent(
|
||||||
|
$this->handles[$i]["handle"]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$a =
|
||||||
|
$this->fuckhtml
|
||||||
|
->getElementsByTagName(
|
||||||
|
"a"
|
||||||
|
);
|
||||||
|
|
||||||
|
if(count($a) === 0){
|
||||||
|
|
||||||
|
throw new Exception("Failed to find link");
|
||||||
|
}
|
||||||
|
|
||||||
|
$link =
|
||||||
|
$this->fuckhtml
|
||||||
|
->getTextContent(
|
||||||
|
$a[0]["attributes"]["href"]
|
||||||
|
);
|
||||||
|
|
||||||
|
if(
|
||||||
|
preg_match(
|
||||||
|
'/^(https?:|)\/\//',
|
||||||
|
$link
|
||||||
|
)
|
||||||
|
){
|
||||||
|
|
||||||
|
$keys[] = $this->handles[$i]["replacement"];
|
||||||
|
$replacements[] = $link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->recursive_replace($keys, $replacements, $scraped_data);
|
||||||
|
|
||||||
|
curl_multi_close($this->proc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function recursive_replace(&$keys, &$replacements, &$pointer){
|
||||||
|
|
||||||
|
foreach($pointer as $key => &$value){
|
||||||
|
|
||||||
|
if($key == "url"){
|
||||||
|
|
||||||
|
$search =
|
||||||
|
array_search(
|
||||||
|
$value,
|
||||||
|
$keys
|
||||||
|
);
|
||||||
|
|
||||||
|
if($search !== false){
|
||||||
|
|
||||||
|
// replace url
|
||||||
|
$value = $replacements[$search];
|
||||||
|
}
|
||||||
|
|
||||||
|
}elseif(is_array($value)){
|
||||||
|
|
||||||
|
$this->recursive_replace($keys, $replacements, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function web($get){
|
public function web($get){
|
||||||
|
|
||||||
@@ -930,7 +1072,7 @@ class google{
|
|||||||
){
|
){
|
||||||
|
|
||||||
// sometimes the link is an encrypted redirect, handle redirection securely
|
// sometimes the link is an encrypted redirect, handle redirection securely
|
||||||
$notices[] = $this->unshit_url($payload[1]);
|
$notices[] = $this->redirect_add_url($link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1282,14 +1424,14 @@ class google{
|
|||||||
$this->fuckhtml
|
$this->fuckhtml
|
||||||
->getTextContent($sublink),
|
->getTextContent($sublink),
|
||||||
"date" => null,
|
"date" => null,
|
||||||
"url" => $this->unshit_url($sublink_url)
|
"url" => $this->redirect_add_url($sublink_url)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$out["web"][] = [
|
$out["web"][] = [
|
||||||
"title" => $title,
|
"title" => $title,
|
||||||
"description" => $description,
|
"description" => $description,
|
||||||
"url" => $this->unshit_url($url),
|
"url" => $this->redirect_add_url($url),
|
||||||
"date" => $date,
|
"date" => $date,
|
||||||
"type" => "web",
|
"type" => "web",
|
||||||
"thumb" => $thumb,
|
"thumb" => $thumb,
|
||||||
@@ -1298,6 +1440,8 @@ class google{
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->resolve_urls($out);
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1508,7 +1652,7 @@ class google{
|
|||||||
),
|
),
|
||||||
"source" => $source,
|
"source" => $source,
|
||||||
"url" =>
|
"url" =>
|
||||||
$this->unshit_url(
|
$this->redirect_add_url(
|
||||||
$this->fuckhtml
|
$this->fuckhtml
|
||||||
->getTextContent(
|
->getTextContent(
|
||||||
$div["attributes"]["data-lpage"]
|
$div["attributes"]["data-lpage"]
|
||||||
@@ -1537,6 +1681,8 @@ class google{
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->resolve_urls($out);
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1939,10 +2085,12 @@ class google{
|
|||||||
"duration" => $duration,
|
"duration" => $duration,
|
||||||
"views" => null,
|
"views" => null,
|
||||||
"thumb" => $thumb,
|
"thumb" => $thumb,
|
||||||
"url" => $this->unshit_url($url)
|
"url" => $this->redirect_add_url($url)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->resolve_urls($out);
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2307,6 +2455,8 @@ class google{
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->resolve_urls($out);
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2893,19 +3043,4 @@ class google{
|
|||||||
|
|
||||||
return false; // no need to bypass
|
return false; // no need to bypass
|
||||||
}
|
}
|
||||||
|
|
||||||
private function unshit_url($url){
|
|
||||||
|
|
||||||
if(
|
|
||||||
preg_match(
|
|
||||||
'/^\/goto\?url=([^&]+)/',
|
|
||||||
$url,
|
|
||||||
$piece_of_shit
|
|
||||||
)
|
|
||||||
){
|
|
||||||
|
|
||||||
// encrypted piece of shit url
|
|
||||||
return "/resolver?scraper=google&target=" . rawurlencode($piece_of_shit[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user