mirror of
https://git.lolcat.ca/lolcat/4get.git
synced 2024-11-08 17:43:07 -05:00
Compare commits
7 commits
0b68d6b2a9
...
b98a393421
Author | SHA1 | Date | |
---|---|---|---|
|
b98a393421 | ||
|
cb4d933467 | ||
|
d509effb30 | ||
|
77931f3ee9 | ||
|
640d1d1953 | ||
|
75003b6617 | ||
|
4e1df70ce6 |
6 changed files with 255 additions and 47 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,4 +1,3 @@
|
|||
<<<<<<< HEAD
|
||||
lib/test.html
|
||||
lib/postdata.json
|
||||
lib/nextpage.json
|
||||
|
@ -25,8 +24,5 @@ data/captcha/birds/
|
|||
data/captcha/fumo_plushies/
|
||||
data/captcha/minecraft/
|
||||
!banner/*default*
|
||||
=======
|
||||
banner/*
|
||||
!banner/*default*
|
||||
>>>>>>> 77293818cd213ec0ad07c573d298fff9cd5b357d
|
||||
scraper/curlie.html
|
||||
icons/*
|
||||
|
|
|
@ -75,6 +75,7 @@ class backend{
|
|||
break;
|
||||
|
||||
case "socks5_hostname":
|
||||
case "socks5a":
|
||||
curl_setopt($curlproc, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
|
||||
curl_setopt($curlproc, CURLOPT_PROXY, $address . ":" . $port);
|
||||
break;
|
||||
|
|
|
@ -424,8 +424,6 @@ class fuckhtml{
|
|||
$escape = false;
|
||||
}
|
||||
|
||||
$lastchar = $json[$i];
|
||||
|
||||
if(
|
||||
$bracket === false &&
|
||||
$is_close_bracket === false
|
||||
|
@ -436,7 +434,6 @@ class fuckhtml{
|
|||
|
||||
case "[":
|
||||
case "{":
|
||||
// dont execute whats in "default"
|
||||
$json_out .= $json[$i];
|
||||
break;
|
||||
|
||||
|
|
|
@ -295,6 +295,7 @@ class brave{
|
|||
$html = fread($handle, filesize("scraper/brave.html"));
|
||||
fclose($handle);
|
||||
*/
|
||||
|
||||
try{
|
||||
$html =
|
||||
$this->get(
|
||||
|
@ -406,9 +407,9 @@ class brave{
|
|||
|
||||
if(!isset($grep[1])){
|
||||
|
||||
throw new Exception("Could not get data JS");
|
||||
throw new Exception("Could not grep JavaScript object");
|
||||
}
|
||||
|
||||
|
||||
$data =
|
||||
$this->fuckhtml
|
||||
->parseJsObject(
|
||||
|
@ -416,6 +417,24 @@ class brave{
|
|||
);
|
||||
unset($grep);
|
||||
|
||||
if($data === null){
|
||||
|
||||
throw new Exception("Failed to decode JavaScript object");
|
||||
}
|
||||
|
||||
if(
|
||||
isset($data[2]["data"]["title"]) &&
|
||||
stripos($data[2]["data"]["title"], "PoW Captcha") !== false
|
||||
){
|
||||
|
||||
throw new Exception("Brave returned a PoW captcha");
|
||||
}
|
||||
|
||||
if(!isset($data[1]["data"]["body"]["response"])){
|
||||
|
||||
throw new Exception("Brave did not return a result object");
|
||||
}
|
||||
|
||||
$data = $data[1]["data"]["body"]["response"];
|
||||
|
||||
/*
|
||||
|
|
|
@ -2591,6 +2591,12 @@ class google{
|
|||
|
||||
foreach($relateds as $related){
|
||||
|
||||
if(!isset($related["innerHTML"])){
|
||||
|
||||
// found an image
|
||||
continue;
|
||||
}
|
||||
|
||||
$text =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
|
@ -3192,41 +3198,52 @@ class google{
|
|||
|
||||
$this->fuckhtml->load($header[0]);
|
||||
|
||||
$title_tag =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"title",
|
||||
"div"
|
||||
);
|
||||
|
||||
if(count($title_tag) !== 0){
|
||||
$title =
|
||||
// g-snackbar-action present: we found a button instead
|
||||
if(
|
||||
count(
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$title_tag[0]
|
||||
);
|
||||
->getElementsByTagName(
|
||||
"g-snackbar-action"
|
||||
)
|
||||
) !== 0
|
||||
){
|
||||
|
||||
$header[0]["innerHTML"] =
|
||||
str_replace(
|
||||
$title_tag[0]["outerHTML"],
|
||||
"",
|
||||
$header[0]["innerHTML"]
|
||||
);
|
||||
|
||||
// if header still contains text, add it as a subtitle in description
|
||||
$subtitle =
|
||||
$title_tag =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$header[0]
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"title",
|
||||
"div"
|
||||
);
|
||||
|
||||
if(strlen($subtitle) !== 0){
|
||||
if(count($title_tag) !== 0){
|
||||
$title =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$title_tag[0]
|
||||
);
|
||||
|
||||
$description[] = [
|
||||
"type" => "quote",
|
||||
"value" => $subtitle
|
||||
];
|
||||
$header[0]["innerHTML"] =
|
||||
str_replace(
|
||||
$title_tag[0]["outerHTML"],
|
||||
"",
|
||||
$header[0]["innerHTML"]
|
||||
);
|
||||
|
||||
// if header still contains text, add it as a subtitle in description
|
||||
$subtitle =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$header[0]
|
||||
);
|
||||
|
||||
if(strlen($subtitle) !== 0){
|
||||
|
||||
$description[] = [
|
||||
"type" => "quote",
|
||||
"value" => $subtitle
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3386,9 +3403,117 @@ class google{
|
|||
$this->fuckhtml->load($rhs);
|
||||
}
|
||||
|
||||
// abort if we didnt find any description
|
||||
// initialize sublinks
|
||||
$sublinks = [];
|
||||
|
||||
// get description from business
|
||||
if(count($description) === 0){
|
||||
|
||||
$data_attrid =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeName(
|
||||
"data-attrid"
|
||||
);
|
||||
|
||||
$summary =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"kc:/local:one line summary",
|
||||
$data_attrid
|
||||
);
|
||||
|
||||
if(count($summary) !== 0){
|
||||
|
||||
$description[] = [
|
||||
"type" => "quote",
|
||||
"value" =>
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$summary[0]
|
||||
)
|
||||
];
|
||||
|
||||
// remove summary so it doesnt get parsed as a table
|
||||
$rhs["innerHTML"] =
|
||||
str_replace(
|
||||
$summary[0]["outerHTML"],
|
||||
"",
|
||||
$rhs["innerHTML"]
|
||||
);
|
||||
|
||||
$this->fuckhtml->load($rhs);
|
||||
}
|
||||
|
||||
$address =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"kc:/location/location:address",
|
||||
$data_attrid
|
||||
);
|
||||
|
||||
if(count($address) !== 0){
|
||||
|
||||
$description[] = [
|
||||
"type" => "text",
|
||||
"value" =>
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$address[0]
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
// get title
|
||||
$title_div =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"title",
|
||||
$data_attrid
|
||||
);
|
||||
|
||||
if(count($title_div) !== 0){
|
||||
|
||||
$title =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$title_div[0]
|
||||
);
|
||||
}
|
||||
|
||||
// get phone number
|
||||
$phone =
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeValue(
|
||||
"data-attrid",
|
||||
"kc:/local:alt phone",
|
||||
$data_attrid
|
||||
);
|
||||
|
||||
if(count($phone) !== 0){
|
||||
|
||||
$this->fuckhtml->load($phone[0]);
|
||||
|
||||
$sublinks["Call"] =
|
||||
"tel:" .
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$this->fuckhtml
|
||||
->getElementsByAttributeName(
|
||||
"aria-label",
|
||||
"span"
|
||||
)[0]
|
||||
);
|
||||
|
||||
$this->fuckhtml->load($rhs);
|
||||
}
|
||||
}
|
||||
|
||||
if(count($description) === 0){
|
||||
|
||||
// still no description? abort
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
@ -3437,7 +3562,55 @@ class google{
|
|||
": "
|
||||
);
|
||||
|
||||
if($key == ""){
|
||||
if(
|
||||
$key == "" ||
|
||||
$key == "Phone"
|
||||
){
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if($key == "Hours"){
|
||||
|
||||
$hours = [];
|
||||
|
||||
$this->fuckhtml->load($elem);
|
||||
|
||||
$trs =
|
||||
$this->fuckhtml
|
||||
->getElementsByTagName(
|
||||
"tr"
|
||||
);
|
||||
|
||||
foreach($trs as $tr){
|
||||
|
||||
$this->fuckhtml->load($tr);
|
||||
|
||||
$tds =
|
||||
$this->fuckhtml
|
||||
->getElementsByTagName(
|
||||
"td"
|
||||
);
|
||||
|
||||
if(count($tds) === 2){
|
||||
|
||||
$hours[] =
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$tds[0]
|
||||
) . ": " .
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$tds[1]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if(count($hours) !== 0){
|
||||
|
||||
$hours = implode("\n", $hours);
|
||||
$table["Hours"] = $hours;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -3451,14 +3624,10 @@ class google{
|
|||
$elem
|
||||
)
|
||||
);
|
||||
|
||||
// reset
|
||||
$this->fuckhtml->load($rhs);
|
||||
}
|
||||
|
||||
|
||||
// get sublink elements
|
||||
$sublinks = [];
|
||||
// reset
|
||||
$this->fuckhtml->load($rhs);
|
||||
|
||||
// get the website div
|
||||
$as =
|
||||
|
@ -3482,6 +3651,28 @@ class google{
|
|||
["href"]
|
||||
)
|
||||
);
|
||||
}else{
|
||||
|
||||
// get website through button
|
||||
$button =
|
||||
$this->fuckhtml
|
||||
->getElementsByClassName(
|
||||
"ab_button",
|
||||
"a"
|
||||
);
|
||||
|
||||
if(count($button) !== 0){
|
||||
|
||||
$sublinks["Website"] =
|
||||
$this->unshiturl(
|
||||
$this->fuckhtml
|
||||
->getTextContent(
|
||||
$button[0]
|
||||
["attributes"]
|
||||
["href"]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// get social media links
|
||||
|
|
|
@ -794,6 +794,10 @@ table tr a:last-child{
|
|||
background:var(--1d2021);
|
||||
}
|
||||
|
||||
.web .wiki-head table td{
|
||||
white-space:pre-line;
|
||||
}
|
||||
|
||||
.web .wiki-head td, .about table td{
|
||||
padding:4px 7px;
|
||||
vertical-align:middle;
|
||||
|
|
Loading…
Reference in a new issue