divination/extract_divination.py
2025-12-20 22:55:26 -05:00

79 lines
3 KiB
Python

import os
import re
from datetime import datetime
markdown_dir = r"c:\Users\David\Resilio Sync\CODE\disinfozone\divination\markdown"
images_dir = r"c:\Users\David\Resilio Sync\CODE\disinfozone\divination\images"
essays = []
def parse_frontmatter(content):
# Very basic frontmatter parser for +++ blocks
match = re.search(r'^\+\+\+\s*(.*?)\s*\+\+\+', content, re.DOTALL)
if not match:
return None
fm_text = match.group(1)
data = {}
for line in fm_text.split('\n'):
if '=' in line:
key, val = line.split('=', 1)
key = key.strip()
val = val.strip().strip('"').strip("'")
if key == 'images':
# Parse list like ['/images/wide29.jpg']
images = re.findall(r"['\"](.*?)['\"]", val)
data[key] = images
else:
data[key] = val
return data
for filename in os.listdir(markdown_dir):
if filename.endswith(".md"):
path = os.path.join(markdown_dir, filename)
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
data = parse_frontmatter(content)
if data:
# Add slug
data['slug'] = filename.replace('.md', '.html')
if data['slug'] == 'the-weight-of-wonder.html':
data['slug'] = 'the-weight-of-wonder-v3.html'
# Infer sigil
sigil = None
if 'images' in data and data['images']:
banner = data['images'][0]
# banner is like '/images/wide54.jpg' or '/images/onlinemadness-wide.jpg'
basename = os.path.basename(banner)
name_part = basename.replace('-wide.jpg', '').replace('wide', '').replace('.jpg', '')
if basename.startswith('wide'):
sigil_path = f"/images/div{name_part}.png"
else:
sigil_path = f"/images/{name_part}.png"
# Verify if sigil exists (rough check)
# For now just use the path
data['sigil'] = sigil_path
# Parse date for sorting
# format can be 2025-02-09T13:13:13-03:33 or 2025-10-20T22:11:33
date_str = data.get('date', '1970-01-01')
try:
# Strip timezone for simple sorting
clean_date = date_str.split('T')[0]
data['sort_date'] = datetime.strptime(clean_date, "%Y-%m-%d")
except:
data['sort_date'] = datetime(1970, 1, 1)
essays.append(data)
# Sort by date descending
essays.sort(key=lambda x: x['sort_date'], reverse=True)
# Output summary
print(f"Total essays found: {len(essays)}")
for e in essays[:5]:
print(f"[{e.get('date')}] {e.get('title')} -> {e.get('slug')}")
print(f" Image: {e.get('images')} | Sigil: {e.get('sigil')}")