From 6f31273cda5cdb8f5bd5c7b52e6c7e0addff8ed0 Mon Sep 17 00:00:00 2001 From: Chris Southam Date: Fri, 22 Aug 2025 19:48:28 +0100 Subject: [PATCH] Fix PreviewLinks integration --- README.md | 28 ++++++++++++++-------------- src/SEOManager.php | 28 ++++++++++++++-------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index de652c4..31b3c76 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ By default, it uses `` and OpenGraph tags. It also ships with a Twitter e **Features**: - Setting SEO tags from PHP - Setting SEO tags from Blade -- Integration with [Flipp](https://useflipp.com) and [Previewify](https://previewify.app), to automatically generate cover images +- Integration with [Flipp](https://useflipp.com) and [PreviewLinks](https://previewlinks.io), to automatically generate cover images - Custom extension support - Expressive & simple API - Customizable views @@ -228,26 +228,26 @@ The `flipp()` method also returns a signed URL to the image, which lets you use <img alt="@seo('title')" src="@seo('flipp', 'blog')"> ``` -### Previewify integration +### PreviewLinks integration -First, you need to add your Previewify API keys: -1. Add your API key to the `PREVIEWIFY_KEY` environment variable. You can get the key [here](https://previewify.app/app/account). +First, you need to add your PreviewLinks API keys: +1. Add your API key to the `PREVIEWLINKS_API_TOKEN` environment variable. You can get the key [here](https://previewlinks.io/app/account). 2. Go to `config/services.php` and add: ```php - 'previewify' => [ - 'key' => env('PREVIEWIFY_KEY'), + 'previewlinks' => [ + 'key' => env('PREVIEWLINKS_API_TOKEN'), ], ``` Then, register your templates, for example in `AppServiceProvider`: ```php -seo()->previewify('blog', 24); -seo()->previewify('page', 83); +seo()->previewlink('blog', 24); +seo()->previewlink('page', 83); ``` -After that, you can use the templates by calling `seo()->previewify()` like this: +After that, you can use the templates by calling `seo()->previewlink()` like this: ```php -seo()->previewify('blog', ['title' => 'Foo', 'content' => 'bar'])` +seo()->previewlink('blog', ['title' => 'Foo', 'content' => 'bar'])` ``` The call will set the generated image as the OpenGraph and Twitter card images. The generated URLs are signed. @@ -257,16 +257,16 @@ If no data array is provided, the method will use the `title` and `description` ```php seo()->title($post->title); seo()->description($post->excerpt); -seo()->previewify('blog'); +seo()->previewlink('blog'); ``` -The `previewify()` method also returns a signed URL to the image, which lets you use it in other places, such as blog cover images. +The `previewlink()` method also returns a signed URL to the image, which lets you use it in other places, such as blog cover images. ```php -<img alt="@seo('title')" src="@seo('previewify', 'blog')"> +<img alt="@seo('title')" src="@seo('previewlink', 'blog')"> ``` > **Note** -> The `previewify:` prefix will be automatically prepended to all provided data keys. +> The `previewlink:` prefix will be automatically prepended to all provided data keys. ## Examples diff --git a/src/SEOManager.php b/src/SEOManager.php index b3d603a..ca4a24d 100644 --- a/src/SEOManager.php +++ b/src/SEOManager.php @@ -184,23 +184,23 @@ class SEOManager return $this->set('image', "https://s.useflipp.com/{$template}.png?s={$signature}&v={$query}"); } - /** Configure or use Previewify. */ - public function previewify(string $alias, int|string|array|null $data = null): string|static + /** Configure or use PreviewLinks. */ + public function previewlink(string $alias, int|string|array $data = null): string|static { if (is_string($data) || is_int($data)) { - $this->meta("previewify.templates.$alias", (string) $data); + $this->meta("previewlink.templates.$alias", (string) $data); return $this; } if ($data === null) { $data = [ - 'previewify:title' => $this->raw('title'), - 'previewify:description' => $this->raw('description'), + 'previewlinks:title' => $this->raw('title'), + 'previewlinks:description' => $this->raw('description'), ]; } else { $data = array_combine( - array_map(fn ($key) => str_starts_with($key, 'previewify:') ? $key : "previewify:{$key}", array_keys($data)), + array_map(fn ($key) => str_starts_with($key, 'previewlinks:') ? $key : "previewlinks:{$key}", array_keys($data)), $data, ); } @@ -208,12 +208,12 @@ class SEOManager $query = base64_encode(json_encode($data, JSON_THROW_ON_ERROR)); /** @var string $template */ - $template = $this->meta("previewify.templates.$alias"); + $template = $this->meta("previewlink.templates.$alias"); - $signature = hash_hmac('sha256', $query, config('services.previewify.key')); + $signature = hash_hmac('sha256', $query, config('services.previewlinks.key')); - return $this->set('image', "https://previewify.app/generate/templates/{$template}/signed?signature={$signature}&fields={$query}"); - } + return $this->set('image', "https://previewlinks.io/generate/templates/{$template}/signed?fields={$query}&signature={$signature}"); + } /** Enable favicon extension. */ public function favicon(): static @@ -336,11 +336,11 @@ class SEOManager */ public function render(...$args): array|string|null { - // Flipp and Previewify support more arguments - if (in_array($args[0], ['flipp', 'previewify'], true)) { + // Flipp and PreviewLinks support more arguments + if (in_array($args[0], ['flipp', 'previewlink'], true)) { $method = array_shift($args); - // The `flipp` and `previewify` methods return image URLs + // The `flipp` and `previewlink` methods return image URLs // so we don't sanitize the returned value with e() here return $this->{$method}(...$args); } @@ -353,7 +353,7 @@ class SEOManager // An array means we don't return anything, e.g. `@seo(['title' => 'foo']) if (is_array($args[0])) { foreach ($args[0] as $type => $value) { - if (in_array($type, ['flipp', 'previewify'], true)) { + if (in_array($type, ['flipp', 'previewlink'], true)) { $this->{$type}(...Arr::wrap($value)); } else { $this->set($type, $value);