🔍 sitemap
This commit is contained in:
88
scripts/generate_sitemap.py
Normal file
88
scripts/generate_sitemap.py
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python3
|
||||
# Sunday Comics - Sitemap generator
|
||||
# Copyright (c) 2025 Tomasita Cabrera
|
||||
# Licensed under the MIT License - see LICENSE file for details
|
||||
|
||||
"""
|
||||
Script to generate a sitemap.xml file for the comic
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
from xml.etree.ElementTree import Element, SubElement, tostring
|
||||
from xml.dom import minidom
|
||||
|
||||
# Add parent directory to path so we can import comics_data
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from comics_data import COMICS, SITE_URL
|
||||
|
||||
|
||||
def generate_sitemap():
|
||||
"""Generate sitemap.xml from COMICS data"""
|
||||
# Create sitemap root
|
||||
urlset = Element('urlset', xmlns='http://www.sitemaps.org/schemas/sitemap/0.9')
|
||||
|
||||
# Add homepage
|
||||
if COMICS:
|
||||
latest_date = COMICS[-1]['date']
|
||||
url = SubElement(urlset, 'url')
|
||||
SubElement(url, 'loc').text = f'{SITE_URL}/'
|
||||
SubElement(url, 'lastmod').text = latest_date
|
||||
SubElement(url, 'changefreq').text = 'weekly'
|
||||
SubElement(url, 'priority').text = '1.0'
|
||||
|
||||
# Add archive page
|
||||
if COMICS:
|
||||
latest_date = COMICS[-1]['date']
|
||||
url = SubElement(urlset, 'url')
|
||||
SubElement(url, 'loc').text = f'{SITE_URL}/archive'
|
||||
SubElement(url, 'lastmod').text = latest_date
|
||||
SubElement(url, 'changefreq').text = 'weekly'
|
||||
SubElement(url, 'priority').text = '0.9'
|
||||
|
||||
# Add about page
|
||||
url = SubElement(urlset, 'url')
|
||||
SubElement(url, 'loc').text = f'{SITE_URL}/about'
|
||||
SubElement(url, 'changefreq').text = 'monthly'
|
||||
SubElement(url, 'priority').text = '0.7'
|
||||
|
||||
# Add all individual comic pages
|
||||
for comic in COMICS:
|
||||
url = SubElement(urlset, 'url')
|
||||
SubElement(url, 'loc').text = f"{SITE_URL}/comic/{comic['number']}"
|
||||
SubElement(url, 'lastmod').text = comic['date']
|
||||
SubElement(url, 'changefreq').text = 'never'
|
||||
SubElement(url, 'priority').text = '0.8'
|
||||
|
||||
# Convert to pretty XML
|
||||
xml_str = minidom.parseString(tostring(urlset)).toprettyxml(indent=' ')
|
||||
|
||||
# Remove extra blank lines
|
||||
xml_str = '\n'.join([line for line in xml_str.split('\n') if line.strip()])
|
||||
|
||||
return xml_str
|
||||
|
||||
|
||||
def main():
|
||||
"""Generate and save sitemap"""
|
||||
# Get path to static folder
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
parent_dir = os.path.dirname(script_dir)
|
||||
static_dir = os.path.join(parent_dir, 'static')
|
||||
|
||||
# Create static directory if it doesn't exist
|
||||
os.makedirs(static_dir, exist_ok=True)
|
||||
|
||||
# Generate sitemap
|
||||
sitemap_content = generate_sitemap()
|
||||
|
||||
# Save to file
|
||||
sitemap_file = os.path.join(static_dir, 'sitemap.xml')
|
||||
with open(sitemap_file, 'w', encoding='utf-8') as f:
|
||||
f.write(sitemap_content)
|
||||
|
||||
print(f"Sitemap generated: {sitemap_file}")
|
||||
print(f"Total URLs: {len(COMICS) + 3}") # comics + homepage + archive + about
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user