Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Calibre > Recipes

Notices

Reply
 
Thread Tools Search this Thread
Old 10-22-2025, 11:22 PM   #1
alphonk
Member
alphonk began at the beginning.
 
Posts: 13
Karma: 10
Join Date: Dec 2024
Device: kindle scribe
Afrique XXI - Journal panafricain en ligne (French) - UPDATE

update


Quote:
#!/usr/bin/env python

'''
afriquexxi.info
'''

from calibre.web.feeds.news import BasicNewsRecipe
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
import urllib.request
import tempfile
import os

class AfriqueXXIRecipe(BasicNewsRecipe):
title = 'Afrique XXI'
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 pour Afrique XXI
"""
from qt.core import QFont, QImage, QPainter, QPen, QRect, Qt, QColor
from calibre.gui2 import ensure_app, load_builtin_fonts, pixmap_to_data

try:
# Préparation de l'environnement Qt
ensure_app()
load_builtin_fonts()

# Date en français
today = datetime.now(ZoneInfo('Europe/Paris'))
wkd = today.weekday()
french_weekday = {0:'Lundi',1:'Mardi',2:'Mercredi',3:'Jeudi',4:'Ven dredi',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%M')

# Création de l'image de base (ratio ~1.6 pour format livre)
img = QImage(1200, 1920, QImage.Format_RGB888)
img.fill(QColor(0, 255, 0)) # Fond vert électrique (lime)

# Télécharger le logo
logo_url = "https://upload.wikimedia.org/wikipedia/fr/7/74/Afrique_xxi.png"

# Utiliser urllib pour télécharger l'image
try:
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
temp_file.close()

urllib.request.urlretrieve(logo_url, temp_file.name)

# Charger le logo téléchargé
logo_img = QImage(temp_file.name)

if not logo_img.isNull():
# Calculer la largeur proportionnelle pour une hauteur de 300px
logo_height = 300
logo_width = int(logo_img.width() * (logo_height / logo_img.height()))

# Texte du titre
p = QPainter(img)

# Centrer le logo
logo_x = (1200 - logo_width) // 2
logo_y = 300 # Positionnement au-dessus du titre

# Dessiner le logo
p.drawImage(QRect(logo_x, logo_y, logo_width, logo_height), logo_img)

# Couleur texte (noir)
pen = QPen(QColor('black'))
p.setPen(pen)

# Titre principal
font = QFont()
font.setFamily('Liberation Sans')
font.setPointSize(60)
font.setBold(True)
p.setFont(font)

# Ajuster la position du titre pour être sous le logo
title_rect = QRect(0, 700, 1200, 100)
p.drawText(title_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, 'AFRIQUE')

# Sous-titre
font.setPointSize(40)
p.setFont(font)
subtitle_rect = QRect(0, 800, 1200, 100)
p.drawText(subtitle_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, 'XXI')

# Date et édition
font.setPointSize(36)
font.setBold(False)
p.setFont(font)
date_rect = QRect(0, 950, 1200, 100)
p.drawText(date_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, date_str)

font.setPointSize(32)
font.setItalic(True)
p.setFont(font)
edition_rect = QRect(0, 1050, 1200, 100)
p.drawText(edition_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, edition)

p.end()

# Supprimer le fichier temporaire
try:
os.unlink(temp_file.name)
except:
pass

except Exception as e:
self.log.error(f"Erreur lors du téléchargement ou du traitement du logo: {e}")

# Si échec du téléchargement du logo, créer quand même la couverture sans logo
p = QPainter(img)
pen = QPen(QColor('black'))
p.setPen(pen)

# Titre principal
font = QFont()
font.setFamily('Liberation Sans')
font.setPointSize(60)
font.setBold(True)
p.setFont(font)

# Positions standard sans logo
title_rect = QRect(0, 700, 1200, 100)
p.drawText(title_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, 'AFRIQUE')

# Sous-titre
font.setPointSize(40)
p.setFont(font)
subtitle_rect = QRect(0, 800, 1200, 100)
p.drawText(subtitle_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, 'XXI')

# Date et édition
font.setPointSize(36)
font.setBold(False)
p.setFont(font)
date_rect = QRect(0, 950, 1200, 100)
p.drawText(date_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, date_str)

font.setPointSize(32)
font.setItalic(True)
p.setFont(font)
edition_rect = QRect(0, 1050, 1200, 100)
p.drawText(edition_rect, Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter, edition)

p.end()

# Sauvegarde de l'image
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
alphonk is offline   Reply With Quote
Reply


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Orient XXI - Magazine en ligne sur le Monde arabe et musulman (French) - UPDATE alphonk Recipes 0 10-22-2025 11:21 PM
Orient XXI - Magazine en ligne sur le Monde arabe et musulman (French) - Recipe alphonk Recipes 0 01-18-2025 12:05 PM
Afrique XXI - Journal panafricain en ligne (French) - Recipe alphonk Recipes 0 01-18-2025 12:03 PM
Other Non-Fiction Guérin, Eugénie de: Journal et lettres(1862)[French]V.1 -- 09 Févr 2021 bathop ePub Books 0 02-09-2021 11:58 AM
History Blanc Alphonse-Michel: Récits d'un officier d'Afrique. V1 FRENCH. 16 MAY 2012 roger64 ePub Books 0 05-16-2012 04:35 AM


All times are GMT -4. The time now is 07:36 AM.


MobileRead.com is a privately owned, operated and funded community.