apiUrl = $config->getAppValue('bookmarks', 'previews.screenly.url', 'http://screeenly.com/api/v1/fullsize'); $this->apiKey = $config->getAppValue('bookmarks', 'previews.screenly.token', ''); $this->client = $clientService->newClient(); $this->logger = $logger; } /** * @param Bookmark|null $bookmark * * @return Image|null */ public function getImage($bookmark): ?IImage { if (!isset($bookmark)) { return null; } if ('' === $this->apiKey) { return null; } $url = $bookmark->getUrl(); // Fetch image from remote server return $this->fetchImage($url); } /** * @param string $url * @return Image|null */ public function fetchImage($url): ?Image { try { $response = $this->client->post($this->apiUrl, ['body' => [ 'key' => $this->apiKey, 'url' => $url, 'width' => $this->width, 'height' => $this->height, ], 'timeout' => self::HTTP_TIMEOUT, ]); $body = json_decode($response->getBody(), true, 512, JSON_THROW_ON_ERROR); } catch (Exception $e) { $this->logger->debug($e->getMessage(), ['app' => 'bookmarks']); return null; } // Some HTPP Error occured :/ if (200 !== $response->getStatusCode()) { return null; } return new Image('image/jpeg', base64_decode($body['base64_raw'])); } }