From 16abc70a1dcc44bef44e231adf84026b07ba1c6d Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 14 Mar 2024 10:39:41 +0100 Subject: [PATCH] wip #6775 @0:20 --- app/Services/Webflow.php | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/app/Services/Webflow.php b/app/Services/Webflow.php index dc4729e6e..04de2d278 100644 --- a/app/Services/Webflow.php +++ b/app/Services/Webflow.php @@ -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']; -- 2.39.5