Afrique XXI by Kabonix

This commit is contained in:
Kovid Goyal 2025-01-19 09:00:40 +05:30
parent e71f77ea4b
commit 337a0c352c
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

112
recipes/afrique_21.recipe Normal file
View File

@ -0,0 +1,112 @@
#!/usr/bin/env python
'''
afriquexxi.info
'''
from datetime import datetime
from zoneinfo import ZoneInfo
from calibre import browser
from calibre.web.feeds.news import BasicNewsRecipe
class AfriqueXXIRecipe(BasicNewsRecipe):
title = 'Afrique XXI'
__author__ = 'Kabonix'
description = 'Journal panafricain en ligne'
language = 'fr'
oldest_article = 30
max_articles_per_feed = 50
auto_cleanup = False
encoding = 'utf-8'
use_embedded_content = True
no_stylesheets = True
remove_javascript = True
scale_news_images_to_device = True
feeds = [
('Afrique XXI', 'https://afriquexxi.info/?page=backend&lang=fr')
]
extra_css = '''
img { max-width: 100%; height: auto; display: block; margin: 1em auto; }
h1 { font-size: 2em; margin: 1em 0; }
h2 { font-size: 1.5em; margin: 1em 0; }
'''
def default_cover(self, cover_file):
"""
Crée une couverture personnalisée avec le logo
"""
from qt.core import QColor, QFont, QImage, QPainter, QPen, QRect, Qt
from calibre.gui2 import ensure_app, load_builtin_fonts, pixmap_to_data
try:
ensure_app()
load_builtin_fonts()
today = datetime.now(ZoneInfo('Europe/Paris'))
wkd = today.weekday()
french_weekday = {0:'Lundi',1:'Mardi',2:'Mercredi',3:'Jeudi',4:'Vendredi',5:'Samedi',6:'Dimanche'}
french_month = {1:'janvier', 2:'février', 3:'mars', 4:'avril', 5:'mai', 6:'juin',
7:'juillet', 8:'août', 9:'septembre', 10:'octobre', 11:'novembre', 12:'décembre'}
weekday = french_weekday[wkd]
month = french_month[today.month]
date_str = f"{weekday} {today.day} {month} {today.year}"
edition = today.strftime('Édition de %Hh')
# Image de base
img = QImage(1400, 1920, QImage.Format_RGB888)
img.fill(QColor('lightgreen'))
# Charger le logo
logo_url = 'https://upload.wikimedia.org/wikipedia/fr/7/74/Afrique_xxi.png'
logo_data = browser().open(logo_url).read()
logo = QImage()
logo.loadFromData(logo_data)
# Redimensionner le logo (garder les proportions)
logo_width = 800 # Largeur souhaitée
scaled_logo = logo.scaledToWidth(logo_width, Qt.SmoothTransformation)
# Position du logo (centré)
x = (img.width() - scaled_logo.width()) // 2
y = (img.height() - scaled_logo.height()) // 2 - 100 # Un peu au-dessus du centre
# Dessiner le logo
p = QPainter(img)
p.drawImage(x, y, scaled_logo)
p.end()
# Ajouter la date
p = QPainter(img)
p.setPen(QPen(QColor('black')))
font = QFont('Liberation Sans', 36)
p.setFont(font)
r = QRect(0, y + scaled_logo.height() + 50, img.width(), 100)
p.drawText(r, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, date_str)
# Ajouter l'édition
font.setItalic(True)
font.setPointSize(32)
p.setFont(font)
r = QRect(0, y + scaled_logo.height() + 150, img.width(), 100)
p.drawText(r, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, edition)
p.end()
# Sauvegarder
img_data = pixmap_to_data(img)
cover_file.write(img_data)
cover_file.flush()
return True
except Exception as e:
self.log.error(f'Erreur lors de la création de la couverture: {e}')
return False