Index
Le 10 vendémiaire an CCXXXIII

Open data

Récemment j'ai reçu des amendes de stationnement impayées. Les amendes c'est ma faute et je sais bien que j'ai parfois oublié de payer le stationnement. Comme j'utilise rarement ma voiture ici c'est en général quand je rentre le lundi en voiture et que mon vélo n'est pas au parking P+R, donc que je me gare près de chez moi, et c'est le mardi soir que je me dis "ah putain, mais la voiture était garée dans la rue". Bref, c'est pas la fin du monde et de toute façon il faut payer.

Sauf que là ce sont des "rappels" d'amendes impayées depuis 2021, pour lesquelles j'aurais déjà reçu un premier rappel (rappels envoyés en masse le 8 juillet 2024) et que j'aurais refusé de payer. Bon, je peux oublier des trucs mais là c'est un peu gros quand même, je ne rate pas autant de courrier.

Bon en tout cas, j'ai dû rechercher quelles amendes j'avais déjà payées dans le passé, quels stationnements j'avais payés, etc, pour vérifier un peu tout ça.

Seulement voilà, c'est une vraie jungle pour récupérer mes données. Et puis entre la France et la Belgique c'est un peu le bazar pour mes comptes.

Finalement voici ce que j'ai fait :

Banque Postale

C'est mon compte le plus ancien. On peut exporter au maximum les 90 derniers jours au format CSV, comme si je n'avais rien d'autre à faire que de me connecter tous les trois mois pour télécharger le truc à la main.

Heureusement, on peut télécharger l'historique des relevés en PDF, je n'ai pas automatisé le truc, juste choisi une année, ctrl-cliqué sur chaque relevé, enregistré les PDF ouverts dans Firefox, et rebelotte pour l'année suivante jusqu'à avoir tout téléchargé.

D'abord j'ai fait du pdftotext -layout mais j'ai ensuite trouvé https://github.com/oaubert/banquepostale-pdf-to-tsv qui marche très bien, et qui m'a donné une belle liste de transactions facilement utilisable. J'en ai profité pour faire une petite Makefile pour faciliter le processus dans le futur (pas besoin d'un truc super robuste, l'important c'est de retrouver comment ça marche) :

pdf_files  := $(wildcard *.pdf)
txt_files  := $(pdf_files:.pdf=.txt)
tsv_files  := $(pdf_files:.pdf=.tsv)

all: $(txt_files) $(tsv_files) collate

%.tsv: %.pdf
    python3 ../banquepostale_to_tsv.py $< > $@

%.txt: %.pdf
    pdftotext -layout $< $@

collate: $(tsv_files)
    cat $(tsv_files) > relevé.tsv

Hello Bank

Je me suis bien fait chier à télécharger tous les PDF à partir de l'app et à les parser, avant de découvrir qu'on peut télécharger du CSV sur la version web. C'est très bien, et ça marche, on a tout l'historique.

Tout le reste était disponiblement relativement facilement en CSV ou TSV. Je n'ai pas fusionné l'ensemble des comptes dans un seul gros TSV parce que je pense que ça rendrait les choses plus compliquées pour pas grand chose à ce stade.

Seety

Pour payer le stationnement à Anvers j'utilise une application, Seety, c'est la seule qui permet de payer le tarif standard sans ajouter 50 centimes de frais, donc aucune raison de faire autrement. Il y a aussi des parcmètres mais ils sont de plus en plus clairsemés, c'est pénible.

Seety met à disposition un relevé PDF par jour de stationnement. J'en ai donc plein et c'est bien pénible de les récupérer un par un, et uniquement sur le portable puisqu'il n'y a pas de site à proprement parler. Apparemment les comptes "pro" ont des vraies factures, mais bon.

Après avoir téléchargé une facture j'ai remarqué qu'elle était hébergée quelque part chez Google, avec une URL du style :

https://storage.googleapis.com/seety_invoices/invoices/invoice-e772646977eae3917f837cb165ab761fc8FghmKK4uOQzZlxfDq1qlc0Xd1w5Of7ZmqX9i8QVBe65fQ2tBMJbIZpDXSAEBWQ.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=cloud-storage%40plop-1234.iam.gserviceaccount.com%2F20240930%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240930T210256Z&X-Goog-Expires=14400&X-Goog-SignedHeaders=host&X-Goog-Signature=222854c6a65049f39cba53373a7a1ec5a6c2ce7fef492b07b10d4b053110836ead9834e5853afc858c2e60787694fd0f3ebe3bfc37a481700d92b6d9a2ae8b8d09301f526df3ca2d7956b8ceb89dad2d97b6a30c896da29918b416f1c1365f63ca706b716737bf8c168cdf2a78e2e1ce03eef0c7af22c09a0c2035a76f0f8c9f852abce4fcec36b4f5c40f4cc80a1ea5a91091d0cdba30cb8d30a32997e1751285f56fa85e608b1b0cce292f70f5da0326ae1b97992dd2bafd76b1a31a97f65df1090ad3dfb96fae882f437c2fef326cc97a450c7b536863b9fc0874e07e3bc9f51685a9ba5d746f9587ff8b72a2652a960bf8535657828717be4b620860a82c

Ce n'est pas le genre d'URL qu'on peut utiliser pour télécharger les factures en série en changeant juste un ID, mais heureusement mon portable est rooté et j'ai accès aux données de l'application, bizarrement nommée com.sparks, j'ai donc fait un grep dans le dossier idoine :

grep -RI invoice-e77 /data/data/com.sparks

Et donc j'ai pu retrouver un fichier de cache http contenant la liste des URL de toutes les factures. Un petit coup de grep -o bien placé pour récupérer les URL et les envoyer sur une machine normale, un wget -i, et voilà toutes les factures !

Je les ai parsées à coups de pdftotext -layout, grep -o, sed et d'abominables substitutions bash du style DATE=${DATE// août /-08-/} et j'ai aussi mis ça dans une Makefile.

Conclusion

Bref, c'est un peu la galère de récupérer mes propres données sous un format utilisable, et je ne sais même pas si c'est une vraie volonté de nuire (Seety fait probablement payer pour les comptes pro qui ont accès à un vrai historique ?) ou juste de l'incompétence (la Banque Postale ne supprime certainement pas leur base de données des transactions après 90 jours ?).

Je passe sur l'application Belfius qui a décidé de ne plus tourner sur un portable rooté justement le jour où j'en avais besoin. Je vais encore devoir installer des extensions LSposed ou Magisk ou trucs louches dans le genre téléchargés sur des forums à la con juste pour pouvoir l'utiliser, au lieu de garder mon système propre et sûr. Mais c'est un autre problème.

Et donc non, je n'ai aucune trace de ces amendes, pas non plus dans mes papiers, donc je suis certain de ne jamais les avoir reçues. Je vais essayer de leur expliquer ça pour ne payer que le tarif normal et pas le tarif majoré parce que ça me semble quand même totalement injuste.

@contact