Include lead image in feed item descriptions
The API already returns image_affiche_scale/image_full_scale for every item (news and events alike), no extra request needed — just wasn't being used. Embedded as an <img> at the top of the HTML description so feed readers display it inline with the article. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+15
-5
@@ -101,14 +101,24 @@ def attachments_html(item: dict) -> str:
|
||||
return "".join(parts)
|
||||
|
||||
|
||||
def full_body_html(item: dict) -> str:
|
||||
"""Corps HTML complet (texte riche + pieces jointes), repli sur le resume court."""
|
||||
def lead_image_html(item: dict, title: str) -> str:
|
||||
"""Image principale de l'item, deja fournie par l'API (aucune requete
|
||||
supplementaire necessaire). "paysage_affiche" est une taille
|
||||
intermediaire raisonnable pour une image de flux RSS."""
|
||||
url = item.get("image_affiche_scale") or item.get("image_full_scale")
|
||||
if not url:
|
||||
return ""
|
||||
return f'<p><img src="{html.escape(url)}" alt="{html.escape(title)}" /></p>'
|
||||
|
||||
|
||||
def full_body_html(item: dict, title: str) -> str:
|
||||
"""Corps HTML complet (image + texte riche + pieces jointes), repli sur le resume court."""
|
||||
text_fr = item.get("text_fr")
|
||||
body = (text_fr.get("data") or "").strip() if isinstance(text_fr, dict) else ""
|
||||
if not body:
|
||||
summary = strip_html(item.get("description_fr") or item.get("description"))
|
||||
body = f"<p>{html.escape(summary)}</p>" if summary else ""
|
||||
return body + attachments_html(item)
|
||||
return lead_image_html(item, title) + body + attachments_html(item)
|
||||
|
||||
|
||||
def parse_dt(value: str | None) -> datetime | None:
|
||||
@@ -133,7 +143,7 @@ def build_news_items() -> list[str]:
|
||||
title = item.get("title_fr") or item.get("title") or "(sans titre)"
|
||||
guid = item.get("UID") or item_id
|
||||
link = f"{SITE}/actualites/{slugify(title)}?u={guid}"
|
||||
description = full_body_html(item)
|
||||
description = full_body_html(item, title)
|
||||
pub_dt = parse_dt(item.get("effective") or item.get("created"))
|
||||
entries.append(
|
||||
" <item>\n"
|
||||
@@ -173,7 +183,7 @@ def build_event_items() -> list[str]:
|
||||
guid = item.get("UID") or event_id
|
||||
link = f"{SITE}/agenda/{slugify(title)}?u={guid}"
|
||||
meta = format_event_meta(item)
|
||||
description = (f"<p>{html.escape(meta)}</p>" if meta else "") + full_body_html(item)
|
||||
description = (f"<p>{html.escape(meta)}</p>" if meta else "") + full_body_html(item, title)
|
||||
pub_dt = parse_dt(item.get("created") or item.get("start"))
|
||||
# Un evenement recurrent partage le meme UID sur toutes ses
|
||||
# occurrences : on suffixe le guid avec la date de debut pour
|
||||
|
||||
Reference in New Issue
Block a user