]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6775 @0:20
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 14 Mar 2024 09:39:41 +0000 (10:39 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 14 Mar 2024 09:39:41 +0000 (10:39 +0100)
app/Services/Webflow.php

index dc4729e6ef74d51f9a44b37b87d81b93289a28da..04de2d278c4fc99395402b6267dd66d0f3c0b9b0 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Services;
 
 
+use Illuminate\Http\Client\Response;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Http;
 
@@ -39,12 +40,29 @@ class Webflow
         return $response->json()['access_token'];
     }
 
-    public static function request($url, $data = [], $method = 'get', $ttl = 7200)
+    public static function request($url, $data = [], $method = 'get', $ttl = 600, $force = false)
     {
-        return Cache::remember('webflow_' . static::getToken() . '_' . $method . '_' . $url . '_' . sha1(print_r($data, true)), $ttl, function () use ($url, $method, $data) {
+        $cacheKey = 'webflow_' . static::getToken() . '_' . $method . '_' . $url . '_' . sha1(print_r($data, true));
+        if ($force) {
+            Cache::forget($cacheKey);
+        }
+        $res = Cache::tags('webflow')->remember($cacheKey, $ttl, function () use ($url, $method, $data) {
+            /** @var Response $response */
             $response = Http::withToken(self::getToken())->$method(self::BASE_URL . $url, $data);
+            if ((int)$response->header('X-RateLimit-Remaining') <= 2) {
+                sleep(60);
+            }
             return $response->json();
         });
+        if (null === $res && !$force) {
+            return self::request($url, $data, $method, $ttl, true);
+        }
+        return $res;
+    }
+
+    public static function clearCache()
+    {
+        return Cache::tags('webflow')->flush();
     }
 
     public static function listSites()
@@ -64,12 +82,25 @@ class Webflow
     public static function getPageMeta($shortname, $pageID)
     {
         foreach (self::listPages($shortname) as $page) {
-            if($page['id']==$pageID){
+            if ($page['id'] == $pageID) {
                 return $page;
             }
         }
     }
 
+    public static function getAllPagesContents($shortname)
+    {
+        $res = [];
+        foreach (self::listPages($shortname) as $page) {
+            $res[$page['id']] = self::getPageContents($page['id']);
+        }
+    }
+
+    public static function getPageContents($pageID)
+    {
+        return self::request('pages/' . $pageID . '/dom');
+    }
+
     public static function listPages($shortname)
     {
         return self::request('sites/' . self::getSiteId($shortname) . '/pages')['pages'];