namespace App\Services;
+use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
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()
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'];