diff --git a/api.php b/api.php index c947b38..71a29e1 100644 --- a/api.php +++ b/api.php @@ -1,115 +1,83 @@ [ + "query" => $query, + "bookmarks" => $bookmark ? [$bookmark] : null + ] + ]; -$bookmark = null; -if (array_key_exists("bookmark", $_GET)) { - $bookmark = urldecode($_GET["bookmark"]); -} + $data_param = urlencode(json_encode(array_filter($data_param_obj['options']))); -$csrftoken = null; -if (array_key_exists("csrftoken", $_GET)) { - $csrftoken = $_GET["csrftoken"]; -} - -$url = "https://www.pinterest.com/resource/BaseSearchResource/get/"; - -class SearchResult -{ - public $images; - public $bookmark; -} - -$header_function = function($ch, $rawheader) -{ - global $csrftoken; - $len = strlen($rawheader); - - $header = explode(":", $rawheader, 2); - if (count($header) != 2) - return $len; - - // we are only interested in set-cookie header - if (trim($header[0]) != "set-cookie") - return $len; - - $cookie = explode(";", trim($header[1]), 2); - $cookie = explode("=", $cookie[0], 2); - - switch ($cookie[0]) - { - case "csrftoken": - $csrftoken = $cookie[1]; - } - - return $len; -}; - -$prepare_search_curl_obj = function($query, $bookmark) use ($url, $header_function, $csrftoken) -{ - $data_param_obj = array( - "options"=>array( - "query"=>$query - ) - ); - if ($bookmark != null) - $data_param_obj["options"]["bookmarks"] = array($bookmark); - - $data_param = urlencode(json_encode($data_param_obj)); - - $headers = array(); - if ($csrftoken != null) - { + $headers = []; + if ($csrftoken) { $headers[] = "x-csrftoken: $csrftoken"; $headers[] = "cookie: csrftoken=$csrftoken"; } - $finalurl = $url; - if ($bookmark == null) - $finalurl = "$url?data=$data_param"; + $finalurl = $bookmark ? $url : "$url?data=$data_param"; $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) - { + + if ($bookmark) { 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); + return $ch; +} + +// Search function to execute the cURL request and process the response +function search($query, $bookmark, $url, $csrftoken, $header_function) { + $ch = prepareSearchCurlObj($query, $bookmark, $url, $csrftoken, $header_function); + $response = curl_exec($ch); + + if ($response === false) { + // Handle cURL error + $error = curl_error($ch); + curl_close($ch); + return json_encode(['error' => 'CURL Error: ' . $error]); + } + + curl_close($ch); // Close cURL handle + $data = json_decode($response); - $images = array(); - foreach ($data->{"resource_response"}->{"data"}->{"results"} as $result) - { - $image = $result->{"images"}->{"orig"}; - $url = $image->{"url"}; - array_push($images, $url); + $images = []; + + if (isset($data->resource_response->data->results)) { + foreach ($data->resource_response->data->results as $result) { + $url = $result->images->orig->url ?? null; // Use null coalescing for safety + if ($url) { + $images[] = $url; + } } - echo json_encode($images); + } + $result = new SearchResult(); $result->images = $images; - if (property_exists($data->{"resource_response"}, "bookmark")) - $result->bookmark = $data->{"resource_response"}->{"bookmark"}; + $result->bookmark = $data->resource_response->bookmark ?? null; + return $result; -}; +} -$result = $search($query, $bookmark); +// Main execution +header("Content-Type: application/json"); +$result = search($query, $bookmark, $url, $csrftoken, $header_function); -if ($result->bookmark != null) -{ +// Handle bookmark for pagination +if ($result->bookmark) { $query_encoded = urlencode($query); $bookmark_encoded = urlencode($result->bookmark); $csrftoken_encoded = urlencode($csrftoken); + // Uncomment below line to display the link for next page // echo "

Next page




"; } - header("Content-Type: application/json"); - +echo json_encode($result); ?>