MetadataResolverからタグ情報を保存できるようにした
This commit is contained in:
parent
1322e89b86
commit
e4c942263a
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
|
|||||||
|
|
||||||
use App\Metadata;
|
use App\Metadata;
|
||||||
use App\MetadataResolver\MetadataResolver;
|
use App\MetadataResolver\MetadataResolver;
|
||||||
|
use App\Tag;
|
||||||
use App\Utilities\Formatter;
|
use App\Utilities\Formatter;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@ -41,6 +42,13 @@ class CardController
|
|||||||
'image' => $resolved->image,
|
'image' => $resolved->image,
|
||||||
'expires_at' => $resolved->expires_at
|
'expires_at' => $resolved->expires_at
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$tagIds = [];
|
||||||
|
foreach ($resolved->tags as $tagName) {
|
||||||
|
$tag = Tag::firstOrCreate(['name' => $tagName]);
|
||||||
|
$tagIds[] = $tag->id;
|
||||||
|
}
|
||||||
|
$metadata->tags()->sync($tagIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = response($metadata);
|
$response = response($metadata);
|
||||||
|
@ -5,6 +5,7 @@ namespace App\Listeners;
|
|||||||
use App\Events\LinkDiscovered;
|
use App\Events\LinkDiscovered;
|
||||||
use App\Metadata;
|
use App\Metadata;
|
||||||
use App\MetadataResolver\MetadataResolver;
|
use App\MetadataResolver\MetadataResolver;
|
||||||
|
use App\Tag;
|
||||||
use App\Utilities\Formatter;
|
use App\Utilities\Formatter;
|
||||||
use GuzzleHttp\Exception\TransferException;
|
use GuzzleHttp\Exception\TransferException;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
@ -47,12 +48,19 @@ class LinkCollector
|
|||||||
if ($metadata == null || ($metadata->expires_at !== null && $metadata->expires_at < now())) {
|
if ($metadata == null || ($metadata->expires_at !== null && $metadata->expires_at < now())) {
|
||||||
try {
|
try {
|
||||||
$resolved = $this->metadataResolver->resolve($url);
|
$resolved = $this->metadataResolver->resolve($url);
|
||||||
Metadata::updateOrCreate(['url' => $url], [
|
$metadata = Metadata::updateOrCreate(['url' => $url], [
|
||||||
'title' => $resolved->title,
|
'title' => $resolved->title,
|
||||||
'description' => $resolved->description,
|
'description' => $resolved->description,
|
||||||
'image' => $resolved->image,
|
'image' => $resolved->image,
|
||||||
'expires_at' => $resolved->expires_at
|
'expires_at' => $resolved->expires_at
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$tagIds = [];
|
||||||
|
foreach ($resolved->tags as $tagName) {
|
||||||
|
$tag = Tag::firstOrCreate(['name' => $tagName]);
|
||||||
|
$tagIds[] = $tag->id;
|
||||||
|
}
|
||||||
|
$metadata->tags()->sync($tagIds);
|
||||||
} catch (TransferException $e) {
|
} catch (TransferException $e) {
|
||||||
// 何らかの通信エラーによってメタデータの取得に失敗した時、とりあえずエラーログにURLを残す
|
// 何らかの通信エラーによってメタデータの取得に失敗した時、とりあえずエラーログにURLを残す
|
||||||
Log::error(self::class . ': メタデータの取得に失敗 URL=' . $url);
|
Log::error(self::class . ': メタデータの取得に失敗 URL=' . $url);
|
||||||
|
@ -6,9 +6,21 @@ use Carbon\Carbon;
|
|||||||
|
|
||||||
class Metadata
|
class Metadata
|
||||||
{
|
{
|
||||||
|
/** @var string タイトル */
|
||||||
public $title = '';
|
public $title = '';
|
||||||
|
|
||||||
|
/** @var string 概要 */
|
||||||
public $description = '';
|
public $description = '';
|
||||||
|
|
||||||
|
/** @var string サムネイルのURL */
|
||||||
public $image = '';
|
public $image = '';
|
||||||
/** @var Carbon|null */
|
|
||||||
|
/** @var Carbon|null メタデータの有効期限 */
|
||||||
public $expires_at = null;
|
public $expires_at = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string[] タグ
|
||||||
|
* チェックインタグと同様に保存されるため、スペースや改行文字を含めてはいけません。
|
||||||
|
*/
|
||||||
|
public $tags = [];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user