このコミットが含まれているのは:
2026-07-15 19:33:18 +09:00
コミット eebbd5d069
11個のファイルの変更244行の追加189行の削除
+36 -2
ファイルの表示
@@ -126,7 +126,7 @@ class PostImportPreviewer
warnings_present = field_warnings.values.any?(&:present?) || base_warnings.present?
{ source_row: row[:source_row],
url: normal_url || url,
url: validation_errors[:url].present? ? url : (normal_url || url),
attributes:,
provenance:,
tag_sources:,
@@ -199,7 +199,7 @@ class PostImportPreviewer
def fetch_metadata url
return { data: { }, warnings: { 'url' => ['URL が空です.'] } } if url.blank?
data = PostMetadataFetcher.fetch(url).stringify_keys.compact
data = sanitise_metadata(PostMetadataFetcher.fetch(url).stringify_keys.compact)
warnings = { }
add_field_warning!(warnings, 'title', TITLE_FETCH_WARNING) if data['title'].blank?
if data['thumbnail_base'].blank?
@@ -215,6 +215,40 @@ class PostImportPreviewer
{ data: { }, warnings: { 'url' => [METADATA_FETCH_WARNING] } }
end
def sanitise_metadata metadata
{
'title' => sanitise_metadata_title(metadata['title']),
'thumbnail_base' => sanitise_metadata_url(metadata['thumbnail_base']),
'original_created_from' => sanitise_metadata_time(metadata['original_created_from']),
'original_created_before' => sanitise_metadata_time(metadata['original_created_before']),
'duration' => sanitise_metadata_duration(metadata['duration']),
'tags' => metadata['tags'].to_s.presence }.compact
end
def sanitise_metadata_title value
value.is_a?(String) ? value.presence : nil
end
def sanitise_metadata_url value
return nil unless value.is_a?(String)
PostUrlNormaliser.normalise(value)
end
def sanitise_metadata_time value
return nil unless value.is_a?(String)
Time.zone.parse(value)&.iso8601
rescue ArgumentError, TypeError
nil
end
def sanitise_metadata_duration value
return nil unless value.is_a?(Numeric)
value.positive? ? value.to_i : nil
end
def preload_metadata! prepared_rows, fetch_metadata, metadata_cache, existing_posts, url_counts
urls = prepared_rows.filter_map { |row|
next unless row[:normal_url].present?