Fix sitemap date format - use YYYY-MM-DD for sitemaps, proper ISO 8601 for Atom

This commit is contained in:
Russell Ballestrini 2026-01-11 09:42:05 -05:00
parent 3dfbac6f3e
commit 82327c1d0b

View file

@ -14,12 +14,20 @@ from pyramid.view import view_config
from ..models.product import Product
def timestamp_to_iso8601(timestamp):
"""Convert millisecond timestamp to ISO 8601 format."""
def timestamp_to_sitemap_date(timestamp):
"""Convert millisecond timestamp to YYYY-MM-DD format for sitemaps."""
if timestamp:
dt = datetime.fromtimestamp(timestamp / 1000.0)
return dt.strftime("%Y-%m-%dT%H:%M:%S+00:00")
return datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S+00:00")
dt = datetime.utcfromtimestamp(timestamp / 1000.0)
return dt.strftime("%Y-%m-%d")
return datetime.utcnow().strftime("%Y-%m-%d")
def timestamp_to_atom_datetime(timestamp):
"""Convert millisecond timestamp to ISO 8601 format for Atom feeds."""
if timestamp:
dt = datetime.utcfromtimestamp(timestamp / 1000.0)
return dt.strftime("%Y-%m-%dT%H:%M:%SZ")
return datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
def timestamp_to_rfc822(timestamp):
@ -58,14 +66,14 @@ def build_sitemap_xml(request, shop, products, content):
# Shop home page
url = SubElement(urlset, "url")
SubElement(url, "loc").text = shop.absolute_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(shop.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(shop.updated_timestamp)
SubElement(url, "changefreq").text = "weekly"
SubElement(url, "priority").text = "1.0"
# Shop about page
url = SubElement(urlset, "url")
SubElement(url, "loc").text = shop.absolute_about_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(shop.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(shop.updated_timestamp)
SubElement(url, "changefreq").text = "monthly"
SubElement(url, "priority").text = "0.5"
@ -73,7 +81,7 @@ def build_sitemap_xml(request, shop, products, content):
if shop.terms_of_service_raw:
url = SubElement(urlset, "url")
SubElement(url, "loc").text = shop.absolute_terms_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(shop.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(shop.updated_timestamp)
SubElement(url, "changefreq").text = "yearly"
SubElement(url, "priority").text = "0.3"
@ -81,7 +89,7 @@ def build_sitemap_xml(request, shop, products, content):
if shop.privacy_policy_raw:
url = SubElement(urlset, "url")
SubElement(url, "loc").text = shop.absolute_privacy_policy_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(shop.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(shop.updated_timestamp)
SubElement(url, "changefreq").text = "yearly"
SubElement(url, "priority").text = "0.3"
@ -89,7 +97,7 @@ def build_sitemap_xml(request, shop, products, content):
for product in products:
url = SubElement(urlset, "url")
SubElement(url, "loc").text = product.absolute_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(product.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(product.updated_timestamp)
SubElement(url, "changefreq").text = "weekly"
SubElement(url, "priority").text = "0.8"
@ -97,7 +105,7 @@ def build_sitemap_xml(request, shop, products, content):
for item in content:
url = SubElement(urlset, "url")
SubElement(url, "loc").text = item.absolute_url(request)
SubElement(url, "lastmod").text = timestamp_to_iso8601(item.updated_timestamp)
SubElement(url, "lastmod").text = timestamp_to_sitemap_date(item.updated_timestamp)
SubElement(url, "changefreq").text = "weekly"
SubElement(url, "priority").text = "0.7"
@ -150,7 +158,7 @@ def build_atom_xml(request, shop, products, content):
SubElement(feed, "title").text = shop.name
SubElement(feed, "id").text = shop.absolute_url(request)
SubElement(feed, "updated").text = timestamp_to_iso8601(shop.updated_timestamp)
SubElement(feed, "updated").text = timestamp_to_atom_datetime(shop.updated_timestamp)
# Self link
self_link = SubElement(feed, "link")
@ -177,8 +185,8 @@ def build_atom_xml(request, shop, products, content):
entry = SubElement(feed, "entry")
SubElement(entry, "title").text = item_obj.title
SubElement(entry, "id").text = item_obj.absolute_url(request)
SubElement(entry, "updated").text = timestamp_to_iso8601(item_obj.updated_timestamp)
SubElement(entry, "published").text = timestamp_to_iso8601(item_obj.created_timestamp)
SubElement(entry, "updated").text = timestamp_to_atom_datetime(item_obj.updated_timestamp)
SubElement(entry, "published").text = timestamp_to_atom_datetime(item_obj.created_timestamp)
link = SubElement(entry, "link")
link.set("href", item_obj.absolute_url(request))