2024-11-02 18:30:04 +01:00
import os
import re
from datetime import datetime
# Chemin du dossier source
source_dir = " source "
# Expression régulière pour extraire la date du contenu de l'article
2024-11-10 00:01:15 +01:00
date_regex = re . compile ( r " \ b( \ d {14} ) \ b " )
2024-11-02 18:30:04 +01:00
# Liste des fichiers org-mode trouvés
org_files = [ ]
# Parcourt le dossier source à la recherche de fichiers org-mode
for root , dirs , files in os . walk ( source_dir ) :
for file in files :
if file . endswith ( " .org " ) :
# Ouvre le fichier et recherche la première date dans le contenu de l'article
with open ( os . path . join ( root , file ) , " r " , encoding = " utf-8 " ) as f :
content = f . read ( )
match = date_regex . search ( content )
if match :
date = datetime . strptime ( match . group ( 1 ) , " % Y- % m- %d " )
# Ajoute le fichier à la liste avec sa date correspondante
org_files . append ( ( date , os . path . join ( root , file ) ) )
# Tri des fichiers par ordre décroissant de date
org_files . sort ( reverse = True )
# Génération du flux Atom
atom_feed = { " title " : " Flux Atom des articles GMI " , " link " : " http://www.example.com/atom " , " updated " : org_files [ 0 ] [ 0 ] . strftime ( " % Y- % m- %d T % H: % M: % SZ " ) , " entries " : [ ] }
for date , file in org_files :
# Parse le fichier org-mode pour extraire le titre, la description et la date de publication
with open ( file , " r " , encoding = " utf-8 " ) as f :
content = f . read ( )
title = re . search ( r " \ *+ (.+) \ n " , content ) . group ( 1 )
description = re . search ( r " \ n+ (.+) \ n " , content , re . DOTALL ) . group ( 1 )
published = date . strftime ( " % Y- % m- %d T % H: % M: % SZ " )
# Ajoute l'article au flux Atom
atom_entry = { " title " : title , " link " : file , " summary " : description , " published " : published }
atom_feed [ " entries " ] . append ( atom_entry )
if published > atom_feed [ " updated " ] :
atom_feed [ " updated " ] = published
# Enregistrement du flux Atom dans un fichier
with open ( " atom.xml " , " w " , encoding = " utf-8 " ) as f :
f . write ( ' <?xml version= " 1.0 " encoding= " UTF-8 " ?> \n ' )
f . write ( ' <feed xmlns= " http://www.w3.org/2005/Atom " > \n ' )
f . write ( f ' <title> { atom_feed [ " title " ] } </title> \n ' )
f . write ( f ' <link href= " { atom_feed [ " link " ] } " /> \n ' )
f . write ( f ' <updated> { atom_feed [ " updated " ] } </updated> \n ' )
for entry in atom_feed [ " entries " ] :
f . write ( ' <entry> \n ' )
f . write ( f ' <title> { entry [ " title " ] } </title> \n ' )
f . write ( f ' <link href= " { entry [ " link " ] } " /> \n ' )
f . write ( f ' <summary> { entry [ " summary " ] } </summary> \n ' )
f . write ( f ' <published> { entry [ " published " ] } </published> \n ' )
f . write ( ' </entry> \n ' )
f . write ( ' </feed> ' )