Outils pour utilisateurs

Outils du site


bloc_note

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bloc_note [2025/07/24 11:53] – adminbloc_note [2026/01/08 13:54] (Version actuelle) – admin
Ligne 1: Ligne 1:
 Bloc Note rapide  Bloc Note rapide 
 +<code>
 +#!/bin/bash
 +# --------------------------------------------------
 +# Cron API – rate‑limit (30 req/min) → 429 Too Many Requests
 +# --------------------------------------------------
  
-  * [[https://data.cityofnewyork.us/Recreation/NYC-Parks-Drinking-Fountains-Map/622h-mkfu | Les fontaines ]] +# ---------- Configuration ---------- 
-  * [[https://account.citibikenyc.com/map | city bike ]] +MAX_PER_MIN=30               # nombre max de requêtes par minute 
-  * [[https://data.cityofnewyork.us/dataset/New-York-City-Bike-Routes-Map-/9e2b-mctv | piste cyclable]]+RATEFILE="/var/lib/cron_api/ratelimit"
  
 +# ---------- Fonctions ----------
 +# Retourne le timestamp (epoch) actuel
 +now() { date +%s; }
  
 +# Nettoie les anciennes entrées du fichier rate‑limit
 +cleanup_ratefile() {
 +    local now_ts=$(now)
 +    # Si le fichier existe, on garde uniquement les lignes < 60s d'ancienneté
 +    if [[ -f "$RATEFILE" ]]; then
 +        # On lit chaque ligne : epoch|count
 +        while IFS='|' read -r ts cnt; do
 +            # Si l'entrée a plus de 60s, on la ignore (fenêtre expirée)
 +            (( now_ts - ts > 60 )) && continue
 +            echo "$ts|$cnt"
 +        done < "$RATEFILE" > "${RATEFILE}.tmp"
 +        mv "${RATEFILE}.tmp" "$RATEFILE"
 +    fi
 +}
  
-Memo avion : +# Retourne le nombre d’appels valides dans la fenêtre courante 
 +get_current_count() { 
 +    local cnt=0 
 +    if [[ -f "$RATEFILE" ]]; then 
 +        while IFS='|' read -r ts cnt; do 
 +            (( now_ts - ts <= 60 )) && ((cnt+=cnt)) 
 +        done < "$RATEFILE" 
 +    fi 
 +    echo "$cnt" 
 +}
  
 +# Incrémente le compteur et réécrit le fichier (appelé après validation)
 +increment_and_store() {
 +    local new_ts=$(now)
 +    # Si le fichier est vide ou la fenêtre a expiré, on recommence à 1
 +    if [[ ! -s "$RATEFILE" ]] || (( $(now) - $(cut -d'|' -f1 "$RATEFILE") > 60 )); then
 +        echo "${new_ts}|1" > "$RATEFILE"
 +    else
 +        # On incrémente le compteur de la première entrée (ou on en crée une nouvelle)
 +        local first_ts=$(cut -d'|' -f1 "$RATEFILE")
 +        if (( $(now) - first_ts > 60 )); then
 +            # Nouvelle fenêtre : on repart à 1
 +            echo "${new_ts}|1" > "$RATEFILE"
 +        else
 +            # On incrémente le compteur existant
 +            local new_cnt=$(( $(cut -d'|' -f2 "$RATEFILE") + 1 ))
 +            echo "${first_ts}|${new_cnt}" > "$RATEFILE"
 +        fi
 +    fi
 +}
  
- ====== ✈️ Air France vols entre Paris-CDG et New York-JFK (AF6, AF8, etc.) : ====== +# ---------- Middleware de rate‑limit ---------- 
-^Numéro de vol ^Avion ^Destination ^Cabine Premium rénovée ?^ +cleanup_ratefile                 # nettoie les entrées expirées 
-|AF6 / AF7 |Boeing 777-300ER (rénové) |CDG ⇄ JFK |✅ Oui| +current_count=$(get_current_count)
-|AF8 / AF9 |Airbus A350-900 |CDG ⇄ JFK |✅ Oui (mais un peu moins spacieux que le 777)| +
-|AF16 / AF17 |Airbus A350-900 |CDG ⇄ JFK |✅ Oui| +
-|AF62 / AF63 |Boeing 777-200ER |CDG ⇄ JFK |❌ Non (ancienne cabine Premium Economy)|+
  
- ====== ✅ Résumé retour  ======  +if (( current_count >= MAX_PER_MIN )); then 
-^Vol ^Avion ^Pitch ^Confort ^Note ^ +    # Trop de requêtes -> renvoyer 429 + JSON d’erreur 
-|AF007 (AF7) |777-300ER rénové |96 cm |Excellent |⭐⭐⭐⭐⭐| +    printf "Status: 429 Too Many Requests\r\n" 
-|AF015 (AF15) |A350-900 |96 cm |Très bon |⭐⭐⭐⭐| +    printf "Content-Type: application/json\r\n\r\n" 
-|AF023 (AF23) |787-9 |~94 cm |Moyen |⭐⭐⭐|+    cat <<EOF 
 +{ 
 +  "error": "Rate limit exceeded. Try again later." 
 +} 
 +EOF 
 +    exit 0   # arrêt du script CGI (apache ne lit rien d’autre) 
 +fi
  
 +# Si on arrive ici, on peut continuer le traitement habituel
 +increment_and_store   # incrémente le compteur
  
 +# --------------------------------------------------
 +# Votre logique métier habituelle (exemple)
 +# --------------------------------------------------
  
 +# Exemple : lire le fichier de logs de cron et renvoyer du JSON
 +# (remplacez par votre logique réelle)
  
- ====== 💺 Résumé des meilleurs sièges Air France Premium Eco ======  +# 1) Récupérer la dernière ligne du log de cron (ou syslog) 
-^ Avion ^Siège idéal         ^Pourquoi ^ +#    Ici on suppose que le fichier de log est /var/log/cron.log 
-|777-300ER | 10A / 10L / 10C / 10J | Plus d'espace, pas de siège devant| +CRON_LOG="/var/log/cron.log" 
-|A350         | 10A / 10L / 10C / 10J | Première rangée = jambes étendues |+if [[ -r "$CRON_LOG" ]]; then 
 +    # Extraire la dernière ligne qui contient notre job (exemple : "myjob") 
 +    LAST_RUN=$(grep -m1 "myjob" "$CRON_LOG" | tail -n1) 
 +    # Si aucune ligne trouvée → état "not run" 
 +    if [[ -z "$LAST_RUN" ]]; then 
 +        STATUS="{\"state\":\"not_run\",\"last\":\"never\"}" 
 +    else 
 +        # Exemple d'extraction : date/heure + code de sortie 
 +        # Supposons que le format soit: "Jun 12 08:34:56 server CRON[12345]: (myuser) CMD" 
 +        # Vous pouvez adapter l'extraction selon votre format de log 
 +        LAST_TIME=$(echo "$LAST_RUN" | awk '{print $1,$2,$3}') 
 +        EXIT_CODE=$(( RANDOM % 4 ))   # placeholder 
 +        STATUS="{\"state\":\"last_run\",\"when\":\"$LAST_TIME\",\"exit_code\":$EXIT_CODE}" 
 +    fi 
 +else 
 +    STATUS='{"error":"log not found"}' 
 +fi
  
-✅ Meilleures places Premium Economy : +# ---------- Envoi de la réponse JSON ---------- 
-  * 10A / 10L : fenêtre + rangée avant +printf "Status: 200 OK\r\n" 
-  * 10C / 10J : allée, devant, plus d’espace +printf "Content-Type: application/json\r\n\r\n" 
-  * 10B / 10K : au milieu de la rangée avant, bon compromis+printf "%s\r\n" "$STATUS"
  
-      * Ces sièges sont à l’avant de la cabine Premium, donc : +exit 0
-      * Aucun siège devant → plus d’espace pour les jambes +
-      * Service plus rapide +
-      * Débarquement plus rapide +
-      * Cabine plus calme +
-      *  +
-  * [[https://seatguru.com/ | site pour info sur les espace cabine ]] +
-  * [[https://www.skyscanner.fr/ |Recherche de billets ]] +
-  * [[https://www.bons-plans-voyage-new-york.com/ |Astuces NY]] +
-  * [[https://www.cityexperiences.com/new-york/city-cruises/statue/new-york-crown-reserve/?date=09/08/2025&openSdk=1]] +
- +
- +
- +
- +
-====== Avantage CB ====== +
-🧾 Résumé de tes cartes et de leurs avantages aux États-Unis +
- +
-^Carte ^Paiements $ ^Retraits $ ^Taux de change ^Notes clés^ +
-|Revolut Metal |✅ Gratuits |✅ Gratuits jusqu’à env. 800 €/mois |🔥 Interbancaire (le top)|Meilleur taux de change| +
-|Hello Prime |✅ Gratuits |✅ Gratuits (chez Bank of America) |🟢 Taux Visa (bon) |Top pour retraits| +
-|N26 Standard |✅ Gratuits |❌ 1,7% de frais |🟢 Taux Mastercard |Pas idéale pour retraits| +
-|Boursorama Welcome |❌ 1,94% de frais |❌ 1,94% de frais |🔴 Frais élevés |À éviter à l’étranger| +
- +
-🛡️ Comparatif assurance voyage – tes cartes +
-^Carte ^Assurance Voyage ^Assistance Médicale ^Responsabilité civile ^Annulation/Retard vol ^Location voiture^ +
-|Revolut Metal |✅ Très bonne (Allianz) |✅ Jusqu’à 10M € |✅ Incluse |✅ Incluse (retard, bagages) |✅ Franchise remboursée| +
-|Hello Prime |✅ Bonne (carte Visa Premier) |✅ Jusqu’à 155 000 € |✅ Incluse |✅ Retard/annulation |✅ Franchise remboursée| +
-|N26 Standard |❌ Aucune |❌ Non couverte |❌ Non couverte |❌ Non couverte |❌ Non couverte| +
-|Boursorama Welcome |❌ Aucune |❌ Non couverte |❌ Non couverte |❌ Non couverte |❌ Non couverte| +
- +
- +
- +
-<code>+
  
 </code> </code>
bloc_note.1753350795.txt.gz · Dernière modification : de admin