iTunes : Comment avoir un fichier Excel/Numbers des factures iTunes à partir des emails ? ( sous Mac )

Rien de plus facile ! Pour informations les emails sont stockés sous : ./Library/Mail/ et les factures d’Apple ( iTunes, et non pas Apple Store )  ne sont pas des PDF. Pour rappel, si vous voulez voir la source d’un email il suffit de faire Cmd+Alt+U, ou bien aller dans le menu Présentation > Message > Contenu orginal.

Donc c’est facile l’étape n°1, vous prenez le script suivant que vous copiez à la racine de votre utilisateur c.a.d. /Users/MonLogin/ . Dans un fichier cherche_facture_Apple.bash par exemple …

Voici donc le script :

#!/bin/bash
# ARIAS Frederic
# Version V1
compteur=1
erreur=0
Somme=0
NbLu=0
chercheFichier() {
   Rep="$1"
   for item in $Rep/*
   do [ -f "$item" ] 
ext="${item##*.}"
if [ "$ext" = "emlx" ] ; then
De=`head -50 $item | grep "^X-Envelope-From:" | awk '{print $2 }' | head -1`
Sujet=`head -50 $item | grep "^Subject: " | awk '{print $2 }' | head -1`
NbLu=`expr $NbLu + 1`
#if [ "$De" == "do_not_reply@itunes.com" ]
#then
#echo "Sujet : '$Sujet'"
#echo "Fichier : $item"
#fi 
        if [ "$Sujet" == "Votre" ] || [[ "$Sujet" =~ =\?ISO\-8859\-1\?Q\?Votre_re* ]]  || [[ "$Sujet" =~ =\?ISO\-8859\-1\?Q\?Votre_facture* ]] || [[ "$Sujet" =~ =\?UTF\-8\?Q\?Votre_re* ]]
                                then
#echo "Une nouvelle facture Apple ? " 
if [ ! -n "$De" ] ;
then
De=`head -50 $item | grep "^From: " | awk -v FS="(<|>)" '{print $2}' | head -1`
fi
if [ ! -n "$De" ] ;
then
De=`head -50 $item | grep "^From: " | awk -v FS='("|")' '{print $2}' | head -1`
fi
Business=`head -50 $item | grep "^X-Business-Group:" | awk '{print $2}' | head -1`
if [ ! -n "$Business" ] ;
then
Business=`head -50 $item | grep "^X_BUSINESS_GROUP:" | awk '{print $2}' | head -1`
fi
Date=`head -50 $item | grep "^Date:" | awk '{print $2 " " $3 " " $4 " " $5 " " $6}' | head -1`
Visa=`head -100 $item | grep "^Visa ...." | awk '{print $3}' | head -1`
if [ ! -n "$Visa" ] ;
then
Visa=`head -100 $item | grep "Factur=C3=A9 =C3=A0 :" | awk '{print $6}' | head -1`
fi
Commande=`head -100 $item | grep "^N=C2=B0 DE COMMANDE:" | awk '{print $4}' | head -1`
if [ ! -n "$Commande" ] ;
then
Commande=`head -100 $item | grep "N=C2=B0 de commande :" | awk '{print $5}' | head -1`
fi
if [ ! -n "$Commande" ] ;
                                        then
                                        Commande=`head -100 $item | grep "Num=C3=A9ro de la commande :" | awk '{print $6}' | head -1`
                                fi
Document=`head -100 $item | grep "N=C2=B0 DE DOCUMENT:" | awk '{print $4}' | head -1`
if [ ! -n "$Document" ] ;
then
                         Document=`head -100 $item | grep "N=C2=B0 DU DOCUMENT:" | awk '{print $4}' | head -1`
fi
Sequence=`head -100 $item | grep "^N=C2=B0 DE S=C3=89QUENCE:" | awk '{print $4}' | head -1`
if [ ! -n "$Sequence" ] ;
then
Sequence=`head -100 $item | grep "^S=C3=89QUENCE N=C2=B0:" | awk '{print $3}' | head -1`
fi
                                if [ ! -n "$Sequence" ] ;
                                        then
                                        Sequence=`head -100 $item | grep "Num=C3=A9ro de s=C3=A9quence=C2=A0:" | awk '{print $4}' | head -1`
                                fi
DateDeLaFacture=`head -100 $item | grep "^DATE DE LA FACTURE:" | awk '{print $5 " " $6 " " $7}' | head -1`
if [ ! -n "$DateDeLaFacture" ] ;
then
DateDeLaFacture=`head -100 $item | grep "Date de la facture:" | awk '{print $5 }' | head -1`
fi
if [ ! -n "$DateDeLaFacture" ] ;
                                        then
                                        DateDeLaFacture=`head -100 $item | grep "Date du re=C3=A7u :" | awk '{print $5 }' | head -1`
fi
Total=`head -100 $item | grep "^TOTAL:" | awk '{print $2}' | sed 's/=/ /g' | awk '{print $1}' | sed 's/,/\./g' | head -1`
if [ ! -n "$Total" ] ;
then
Total=`head -100 $item | grep "Total de la commande :" | awk '{print $6}' | sed 's/=/ /g' | awk '{print $1}' | sed 's/,/\./g' | head -1`
fi
if [ -n "$Commande" ] ;
then
Somme=`echo "scale=3; $Somme + $Total " | bc` 
echo "$compteur | $De | $Date | $Business | $Commande | $Document | $Sequence | $Visa | $DateDeLaFacture | $Total | $Somme "
echo "$compteur ; $De ; $Date ; $Business ; $Commande ; $Document ; $Sequence ; $Visa ; $DateDeLaFacture ; $Total ; $Somme " >> facture_apple.csv
compteur=`expr $compteur + 1`
fi
if [ ! -n "$Commande" ] ;
then
#echo "Source : $item "
erreur=`expr $erreur + 1`
fi
fi
fi
      [ -d "$item" ] && chercheFichier "$item"
   done
}

echo "compteur ; De ; Date ; Business ; Commande ; Document ; Sequence ; Carte Visa ; DateDeLaFacture ; Prix ; Cumul " > facture_apple.csv
START=$(date +%s);
[ -d "./Library/Mail/" ] && chercheFichier "./Library/Mail/"
END=$(date +%s);
DIFF=`echo $((END-START)) | awk '{print int($1/60)":"int($1%60)}'`
echo "Fin du script : Lu : $NbLu / Bon : $compteur / Mauvais : $erreur / Temps : $DIFF ."

Désolé mais l’indexation du code a sauté … l’autre point c’est qu’il n’est pas très propre car je l’ai fait très rapidement. Désolé pour les puristes …

Ensuite vous ouvrez un terminal, et vous lancer le bash : ./cherche_facture_Apple.bash. Le résultat est dans la racine : facture_apple.csv. C’est un fichier CSV, le séparateur est un point virgule.

J’ai fait un test et le programme découpe bien les emails de 2012, 2013, 2014, 2015, 2016, 2017, 2018.

Ensuite il faut penser à prendre des kleneex quand on regarde la somme totale … au passable vous avez la possibilité de voir les performances du disque dur avec le nombre d’email lu et le temps total du script.

Frédéric.

P.S.: Si vous utilisez ce programme, j’accepte d’avoir une bière en retour 😉 .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.