formatter = $formatter; $this->metadataResolver = $metadataResolver; } /** * Handle the event. * * @param LinkDiscovered $event * @return void */ public function handle(LinkDiscovered $event) { // URLの正規化 $url = $this->formatter->normalizeUrl($event->url); // 無かったら取得 // TODO: ある程度古かったら再取得とかありだと思う $metadata = Metadata::find($url); if ($metadata == null || ($metadata->expires_at !== null && $metadata->expires_at < now())) { try { $resolved = $this->metadataResolver->resolve($url); Metadata::updateOrCreate(['url' => $url], [ 'title' => $resolved->title, 'description' => $resolved->description, 'image' => $resolved->image, 'expires_at' => $resolved->expires_at ]); } catch (TransferException $e) { // 何らかの通信エラーによってメタデータの取得に失敗した時、とりあえずエラーログにURLを残す Log::error(self::class . ': メタデータの取得に失敗 URL=' . $url); report($e); } } } }