|
@@ -1,115 +1,83 @@
|
|
|
<?php
|
|
|
|
|
|
-$query = $_GET['q'];
|
|
|
-
|
|
|
-$bookmark = null;
|
|
|
-if (array_key_exists("bookmark", $_GET)) {
|
|
|
- $bookmark = urldecode($_GET["bookmark"]);
|
|
|
-}
|
|
|
-
|
|
|
-$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;
|
|
|
-
|
|
|
-
|
|
|
- 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)
|
|
|
- {
|
|
|
+
|
|
|
+function prepareSearchCurlObj($query, $bookmark = null, $url, $csrftoken = null, $header_function) {
|
|
|
+ $data_param_obj = [
|
|
|
+ "options" => [
|
|
|
+ "query" => $query,
|
|
|
+ "bookmarks" => $bookmark ? [$bookmark] : null
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ $data_param = urlencode(json_encode(array_filter($data_param_obj['options'])));
|
|
|
+
|
|
|
+ $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);
|
|
|
+
|
|
|
+function search($query, $bookmark, $url, $csrftoken, $header_function) {
|
|
|
+ $ch = prepareSearchCurlObj($query, $bookmark, $url, $csrftoken, $header_function);
|
|
|
+
|
|
|
$response = curl_exec($ch);
|
|
|
+
|
|
|
+ if ($response === false) {
|
|
|
+
|
|
|
+ $error = curl_error($ch);
|
|
|
+ curl_close($ch);
|
|
|
+ return json_encode(['error' => 'CURL Error: ' . $error]);
|
|
|
+ }
|
|
|
+
|
|
|
+ curl_close($ch);
|
|
|
+
|
|
|
$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;
|
|
|
+ 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);
|
|
|
+
|
|
|
+header("Content-Type: application/json");
|
|
|
+$result = search($query, $bookmark, $url, $csrftoken, $header_function);
|
|
|
|
|
|
-if ($result->bookmark != null)
|
|
|
-{
|
|
|
+
|
|
|
+if ($result->bookmark) {
|
|
|
$query_encoded = urlencode($query);
|
|
|
$bookmark_encoded = urlencode($result->bookmark);
|
|
|
$csrftoken_encoded = urlencode($csrftoken);
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
|
- header("Content-Type: application/json");
|
|
|
-
|
|
|
+echo json_encode($result);
|
|
|
?>
|