trying to get it to work by basically copying librex and trying to customize it for pinterest

This commit is contained in:
Ahwx 2023-02-14 16:02:08 +01:00
parent 830e6dfdbc
commit d55a062d4d
7 changed files with 409 additions and 33 deletions

8
README.txt Normal file
View file

@ -0,0 +1,8 @@
The main concept is that you don't want the random popups forcing you to log in, and you don't want a bunch of JS.
Credits:
https://github.com/hnhx/librex | https://femboy.hu - image proxy

View file

@ -1,22 +0,0 @@
<?php
$api_url = "https://api.pinterest.com/v1/boards/{board_id}/pins/";
$board_id = "replace_with_actual_board_id";
$access_token = "replace_with_actual_access_token";
$request_url = $api_url . "?access_token=" . $access_token;
$response = file_get_contents($request_url);
$pins = json_decode($response, true);
foreach ($pins["data"] as $pin) {
echo '<div>';
echo '<img src="' . $pin["image"]["original"]["url"] . '" alt="' . $pin["description"] . '">';
echo '<p>' . $pin["description"] . '</p>';
echo '</div>';
}
?>

View file

@ -1,7 +1,68 @@
<?php
return (object) array(
// options
// e.g.: fr -> https://google.fr/
"google_domain" => "com",
// Google results will be in this language
"google_language" => "en",
// If you have a local instance you can change this to http://localhost:3000
"invidious_instance_for_video_results" => "https://invidious.namazso.eu",
"disable_bittorent_search" => false,
"bittorent_trackers" => "&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce",
"disable_hidden_service_search" => false,
/*
Preset privacy friendly frontends for users, these can be overwritten by users in settings
e.g.: "invidious" => "https://yewtu.be",
*/
"invidious" => "", // youtube
"bibliogram" => "", // instagram
"rimgo" => "", // imgur
"scribe" => "", // medium
"librarian" => "", // odysee
"gothub" => "", // github
"nitter" => "", // twitter
"libreddit" => "", // reddit
"proxitok" => "", // tiktok
"wikiless" => "", // wikipedia
"quetre" => "", // quora
"libremdb" => "", // imdb,
"breezewiki" => "", // fandom,
"anonymousoverflow" => "", // stackoverflow
/*
To send requests trough a proxy uncomment CURLOPT_PROXY and CURLOPT_PROXYTYPE:
CURLOPT_PROXYTYPE options:
CURLPROXY_HTTP
CURLPROXY_SOCKS4
CURLPROXY_SOCKS4A
CURLPROXY_SOCKS5
CURLPROXY_SOCKS5_HOSTNAME
!!! ONLY CHANGE THE OTHER OPTIONS IF YOU KNOW WHAT YOU ARE DOING !!!
*/
"curl_settings" => array(
// CURLOPT_PROXY => "ip:port",
// CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,
CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,
CURLOPT_MAXREDIRS => 5,
CURLOPT_TIMEOUT => 18,
CURLOPT_VERBOSE => false
)
);
?>

59
engines/pinterest.php Normal file
View file

@ -0,0 +1,59 @@
<?php
require "misc/tools.php";
function get_image_results($query)
{
$url = "https://www.pinterest.com/search/pins/?q=$query";
$response = request($url);
$xpath = get_xpath($response);
$results = array();
foreach($xpath->query("//a[@rel='noopener']") as $result)
{
$image = $xpath->evaluate(".//img", $result)[0];
if ($image)
{
$encoded_url = $result->getAttribute("href");
$encoded_url_split1 = explode("==/", $encoded_url)[1];
$encoded_url_split2 = explode("?position", $encoded_url_split1)[0];
$real_url = urldecode(base64_decode($encoded_url_split2));
$real_url = check_for_privacy_frontend($real_url);
$alt = $image->getAttribute("alt");
$thumbnail = urlencode($image->getAttribute("src"));
array_push($results,
array (
"thumbnail" => urldecode(htmlspecialchars($thumbnail)),
"alt" => htmlspecialchars($alt),
"url" => htmlspecialchars($real_url)
)
);
}
}
return $results;
}
function print_image_results($results)
{
echo "<div class=\"image-result-container\">";
foreach($results as $result)
{
$thumbnail = urlencode($result["thumbnail"]);
$alt = $result["alt"];
$url = $result["url"];
echo "<a title=\"$alt\" href=\"$url\" target=\"_blank\">";
echo "<img src=\"image_proxy.php?url=$thumbnail\">";
echo "</a>";
}
echo "</div>";
}
?>

19
image_proxy.php Normal file
View file

@ -0,0 +1,19 @@
<?php
require "misc/tools.php";
$url = $_REQUEST["url"];
$requested_root_domain = get_root_domain($url);
$allowed_domains = array("pinterest.com", "i.pinimg.com", "pinimg.com");
if (in_array($requested_root_domain, $allowed_domains))
{
$image = $url;
$image_src = request($image);
header("Content-Type: image/jpeg");
echo $image_src;
}
?>

246
misc/tools.php Normal file
View file

@ -0,0 +1,246 @@
<?php
$config = require "config.php";
function get_base_url($url)
{
$split_url = explode("/", $url);
$base_url = $split_url[0] . "//" . $split_url[2] . "/";
return $base_url;
}
function get_root_domain($url)
{
$split_url = explode("/", $url);
$base_url = $split_url[2];
$base_url_main_split = explode(".", strrev($base_url));
$root_domain = strrev($base_url_main_split[1]) . "." . strrev($base_url_main_split[0]);
return $root_domain;
}
function try_replace_with_frontend($url, $frontend, $original)
{
$config = require "config.php";
if (isset($_COOKIE[$frontend]) || isset($_REQUEST[$frontend]) || !empty($config->$frontend))
{
if (isset($_COOKIE[$frontend]))
$frontend = $_COOKIE[$frontend];
else if (isset($_REQUEST[$frontend]))
$frontend = $_REQUEST[$frontend];
else if (!empty($config->$frontend))
$frontend = $config->$frontend;
if ($original == "instagram.com")
{
if (!strpos($url, "/p/"))
$frontend .= "/u";
}
if (empty(trim($frontend)))
return $url;
if (strpos($url, "wikipedia.org") !== false)
{
$wiki_split = explode(".", $url);
if (count($wiki_split) > 1)
{
$lang = explode("://", $wiki_split[0])[1];
$url = $frontend . explode($original, $url)[1] . "?lang=" . $lang;
}
}
else if (strpos($url, "fandom.com") !== false)
{
$fandom_split = explode(".", $url);
if (count($fandom_split) > 1)
{
$wiki_name = explode("://", $fandom_split[0])[1];
$url = $frontend . "/" . $wiki_name . explode($original, $url)[1];
}
}
else
{
$url = $frontend . explode($original, $url)[1];
}
return $url;
}
return $url;
}
function check_for_privacy_frontend($url)
{
if (isset($_COOKIE["disable_frontends"]))
return $url;
$frontends = array(
"youtube.com" => "invidious",
"instagram.com" => "bibliogram",
"imgur.com" => "rimgo",
"medium.com" => "scribe",
"github.com" => "gothub",
"odysee.com" => "librarian",
"twitter.com" => "nitter",
"reddit.com" => "libreddit",
"tiktok.com" => "proxitok",
"wikipedia.org" => "wikiless",
"quora.com" => "quetre",
"imdb.com" => "libremdb",
"fandom.com" => "breezewiki",
"stackoverflow.com" => "anonymousoverflow"
);
foreach($frontends as $original => $frontend)
{
if (strpos($url, $original))
{
$url = try_replace_with_frontend($url, $frontend, $original);
break;
}
}
return $url;
}
function check_ddg_bang($query)
{
$bangs_json = file_get_contents("static/misc/ddg_bang.json");
$bangs = json_decode($bangs_json, true);
if (substr($query, 0, 1) == "!")
$search_word = substr(explode(" ", $query)[0], 1);
else
$search_word = substr(end(explode(" ", $query)), 1);
$bang_url = null;
foreach($bangs as $bang)
{
if ($bang["t"] == $search_word)
{
$bang_url = $bang["u"];
break;
}
}
if ($bang_url)
{
$bang_query_array = explode("!" . $search_word, $query);
$bang_query = trim(implode("", $bang_query_array));
$request_url = str_replace("{{{s}}}", $bang_query, $bang_url);
$request_url = check_for_privacy_frontend($request_url);
header("Location: " . $request_url);
die();
}
}
function check_for_special_search($query)
{
if (isset($_COOKIE["disable_special"]) || isset($_REQUEST["disable_special"]))
return 0;
$query_lower = strtolower($query);
$split_query = explode(" ", $query);
if (strpos($query_lower, "to") && count($split_query) >= 4) // currency
{
$amount_to_convert = floatval($split_query[0]);
if ($amount_to_convert != 0)
return 1;
}
else if (strpos($query_lower, "mean") && count($split_query) >= 2) // definition
{
return 2;
}
else if (strpos($query_lower, "my") !== false)
{
if (strpos($query_lower, "ip"))
{
return 3;
}
else if (strpos($query_lower, "user agent") || strpos($query_lower, "ua"))
{
return 4;
}
}
else if (strpos($query_lower, "weather") !== false)
{
return 5;
}
else if ($query_lower == "tor")
{
return 6;
}
else if (3 > count(explode(" ", $query))) // wikipedia
{
return 7;
}
return 0;
}
function get_xpath($response)
{
$htmlDom = new DOMDocument;
@$htmlDom->loadHTML($response);
$xpath = new DOMXPath($htmlDom);
return $xpath;
}
function request($url)
{
global $config;
$ch = curl_init($url);
curl_setopt_array($ch, $config->curl_settings);
$response = curl_exec($ch);
return $response;
}
function human_filesize($bytes, $dec = 2)
{
$size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$dec}f ", $bytes / pow(1024, $factor)) . @$size[$factor];
}
function remove_special($string)
{
$string = preg_replace("/[\r\n]+/", "\n", $string);
return trim(preg_replace("/\s+/", ' ', $string));
}
function print_elapsed_time($start_time)
{
$end_time = number_format(microtime(true) - $start_time, 2, '.', '');
echo "<p id=\"time\">Fetched the results in $end_time seconds</p>";
}
function print_next_page_button($text, $page, $query, $type)
{
echo "<form class=\"page\" action=\"search.php\" target=\"_top\" method=\"get\" autocomplete=\"off\">";
foreach($_REQUEST as $key=>$value)
{
if ($key != "q" && $key != "p" && $key != "t")
{
echo "<input type=\"hidden\" name=\"$key\" value=\"$value\"/>";
}
}
echo "<input type=\"hidden\" name=\"p\" value=\"" . $page . "\" />";
echo "<input type=\"hidden\" name=\"q\" value=\"$query\" />";
echo "<input type=\"hidden\" name=\"t\" value=\"$type\" />";
echo "<button type=\"submit\">$text</button>";
echo "</form>";
}
?>

View file

@ -1,18 +1,23 @@
<?php require "static/header.php";
<?php
require "static/header.php";
require "engines/pinterest.php";
$q = $_GET['q'];
$query = $_GET['q'];
$url = "https://pinterest.com/search/pins/?q=$q";
$pinterestPage = file_get_contents($url);
//$url = "https://pinterest.com/search/pins/?q=$q";
//$pinterestPage = file_get_contents($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
//$doc = new DOMDocument();
//@$doc->loadHTML($html);
$items = $doc->getElementsByTagName('img');
//$items = $doc->getElementsByTagName('img');
foreach ($items as $item) {
echo "<img src='", $item, "'>";
}
//foreach ($items as $item) {
// echo "<img src='", $item, "'>";
//}
$imgResults = get_image_results($query);
print_image_results($imgResults);
// echo $pinterestPage;