book_generator/app.py

80 lines
No EOL
2.4 KiB
Python

from flask import Flask, render_template, request, jsonify, url_for
import os
from datetime import datetime
import json
import re
app = Flask(__name__, static_folder='static')
def count_words_in_text(text):
# Supprime les lignes commençant par * (titres org)
text = re.sub(r'^\*+.*$', '', text, flags=re.MULTILINE)
# Supprime les lignes commençant par # (commentaires)
text = re.sub(r'^#.*$', '', text, flags=re.MULTILINE)
# Compte les mots (séquences de caractères non-espaces)
words = re.findall(r'\S+', text)
return len(words)
def read_org_file():
with open('livre.org', 'r', encoding='utf-8') as f:
return f.read()
def update_word_count():
try:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
except FileNotFoundError:
data = {}
today = datetime.now().strftime('%Y-%m-%d')
content = read_org_file()
current_words = count_words_in_text(content)
# Si on a déjà un compteur pour aujourd'hui, on calcule la différence
if today in data:
previous_words = data[today]
if current_words > previous_words:
data[today] = current_words - previous_words
else:
data[today] = 0
else:
data[today] = current_words
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2)
return data[today]
def count_words_today():
try:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
today = datetime.now().strftime('%Y-%m-%d')
return data.get(today, 0)
except FileNotFoundError:
return update_word_count()
@app.route('/')
def index():
content = read_org_file()
words_today = count_words_today()
return render_template('index.html', content=content, words_today=words_today)
@app.route('/update', methods=['POST'])
def update():
new_content = request.form.get('content')
with open('livre.org', 'w', encoding='utf-8') as f:
f.write(new_content)
# Met à jour le compteur de mots
words_today = update_word_count()
return jsonify({'status': 'success', 'words_today': words_today})
@app.route('/words_today')
def get_words_today():
return jsonify({'words': count_words_today()})
if __name__ == '__main__':
# Initialise le compteur de mots au démarrage si nécessaire
count_words_today()
app.run(debug=True)