123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php require "misc/header.php"; ?>
- <title>
- <?php
- $query = htmlspecialchars(trim($_REQUEST["q"] ?? ''));
- echo $query ?: 'Search' . ' - Binternet';
- ?> - Binternet</title>
- </head>
- <body>
- <form class="search-container" method="get" autocomplete="off">
- <h1><a class="no-decoration accent" href="./">Binternet</a></h1>
- <input type="text" name="q" placeholder="Search Image"
- <?php
- // Validate query length
- if (strlen($query) < 1 || strlen($query) > 64) {
- header("Location: ./");
- exit();
- }
- echo "value=\"" . htmlspecialchars($query) . "\"";
- ?>
- >
- </form>
- <?php
- $bookmark = $_GET["bookmark"] ?? null;
- $csrftoken = $_GET["csrftoken"] ?? null;
- $url = "https://www.pinterest.com/resource/BaseSearchResource/get/";
- class SearchResult
- {
- public $images;
- public $bookmark;
- }
- $header_function = function ($ch, $rawheader) use (&$csrftoken) {
- if (preg_match('/^set-cookie:\s*csrftoken=([^;]*)/', $rawheader, $matches)) {
- $csrftoken = $matches[1];
- }
- return strlen($rawheader);
- };
- $prepare_search_curl_obj = function ($query, $bookmark) use ($url, $header_function, $csrftoken) {
- $data_param_obj = [
- "options" => [
- "query" => $query,
- ],
- ];
-
- if ($bookmark !== null) {
- $data_param_obj["options"]["bookmarks"] = [$bookmark];
- }
- $data_param = urlencode(json_encode($data_param_obj));
- $headers = [];
-
- if ($csrftoken !== null) {
- $headers[] = "x-csrftoken: $csrftoken";
- $headers[] = "cookie: csrftoken=$csrftoken";
- }
- $finalurl = $bookmark === null ? "$url?data=$data_param" : $url;
-
- $ch = curl_init($finalurl);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADERFUNCTION, $header_function);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-
- if ($bookmark !== null) {
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, "data=$data_param");
- }
-
- return $ch;
- };
- $search = function ($query, $bookmark) use ($prepare_search_curl_obj) {
- $ch = $prepare_search_curl_obj($query, $bookmark);
- $response = curl_exec($ch);
- $data = json_decode($response);
-
- $images = [];
- echo "<div class='img-container'>";
-
- if ($data && isset($data->resource_response->data->results)) {
- foreach ($data->resource_response->data->results as $result) {
- $image = $result->images->orig;
- $url = $image->url;
- $images[] = $url;
- echo "<a class='img-result' href='/image_proxy.php?url=" . htmlspecialchars($url) . "'>";
- echo "<img loading='lazy' src='/image_proxy.php?url=" . htmlspecialchars($url) . "'></a>";
- }
- } else {
- echo "<p>No results found.</p>";
- }
-
- echo "</div>";
-
- $result = new SearchResult();
- $result->images = $images;
-
- if (isset($data->resource_response->bookmark)) {
- $result->bookmark = $data->resource_response->bookmark;
- }
-
- return $result;
- };
- $result = $search($query, $bookmark);
- if ($result->bookmark !== null) {
- $query_encoded = urlencode($query);
- $bookmark_encoded = urlencode($result->bookmark);
- $csrftoken_encoded = $csrftoken ? urlencode($csrftoken) : "";
- echo "<h2 style=\"text-align: center;\"><a href=\"/search.php?q=$query_encoded&bookmark=$bookmark_encoded&csrftoken=$csrftoken_encoded\">Next page</a></h2><br><br><br>";
- }
- include "misc/footer.php";
- ?>
|