Browse Source

feat(api.php): adds somewhat working API, needs more work

Ahwx 1 year ago
parent
commit
97423e05dc
1 changed files with 115 additions and 0 deletions
  1. 115 0
      api.php

+ 115 - 0
api.php

@@ -0,0 +1,115 @@
+<?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;
+
+    // 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[] = "x-csrftoken: $csrftoken";
+        $headers[] = "cookie: csrftoken=$csrftoken";
+    }
+
+    $finalurl = $url;
+    if ($bookmark == null)
+        $finalurl = "$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)
+    {
+        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 = array();
+        foreach ($data->{"resource_response"}->{"data"}->{"results"} as $result)
+        {
+            $image = $result->{"images"}->{"orig"};
+            $url = $image->{"url"};
+            array_push($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"};
+    return $result;
+};
+
+$result = $search($query, $bookmark);
+
+if ($result->bookmark != null)
+{
+    $query_encoded = urlencode($query);
+    $bookmark_encoded = urlencode($result->bookmark);
+    $csrftoken_encoded = 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>";
+}
+
+    header("Content-Type: application/json");
+
+?>