#!/bin/env perl # Copyright (c) 2014, 2015 Daniel Jakots # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. use strict; use warnings; binmode STDOUT, ":utf8"; use utf8; use JSON; # FAI variables my $nb_adh = 0; # nombre d'adhérents my $nb_abo = 0; # nombre d'abonnés my $nb_adh_ffdn_old = 0; # avant le passage du script my $nb_abo_ffdn_old = 0; # avant le passage du script my $nb_adh_ffdn = 0; # nombre d'adhérents de la fédé my $nb_abo_ffdn = 0; # nombre d'abonnés de la fédé my $site = ""; # site web my $salon = ""; # salon irc/xmpp my $statut = 0; # étape de 1 à 8 du FAI my $date_crea = ""; # date de la création de l'asso my $date_jffdn = ""; # date de la rentrée dans la fédé my $contact = ""; # email de contact my $description = ""; # description de l'asso # variables des dossiers my $dump_dir = "dump"; my $wrk_dir = "wrk-dir"; # récupère les infos du json et les mets dans le ficher au nom du FAI sub info{ my $fai = shift @_; my $json; { local $/; #Enable 'slurp' mode open my $fh, "<", "/home/daga/bot-irc/". $dump_dir."/". $fai; $json = <$fh>; close $fh; } my $data = decode_json($json); # pour chaque valeur on vérifie que ce n'est pas nul, si c'est le cas on # indique N/A (not available) if (!length $data->{"ispformat"}->{"memberCount"}) { $nb_adh = "N/A"; } else { $nb_adh = $data->{"ispformat"}->{"memberCount"}; } if (!length $data->{"ispformat"}->{"subscriberCount"}) { $nb_abo = "N/A"; } else { $nb_abo = $data->{"ispformat"}->{"subscriberCount"}; } if (!length $data->{"ispformat"}->{"website"}) { $site = "N/A"; } else { $site = $data->{"ispformat"}->{"website"}; } if (!length $data->{"ispformat"}->{"chatrooms"}) { $salon = "N/A"; } else { $salon = $data->{"ispformat"}->{"chatrooms"}->[0]; } if (!length $data->{"ispformat"}->{"progressStatus"}) { $statut = "N/A"; } else { $statut = $data->{"ispformat"}->{"progressStatus"}; } if (!length $data->{"ispformat"}->{"creationDate"}) { $date_crea = "N/A"; } else{ $date_crea = $data->{"ispformat"}->{"creationDate"}; } if (!length $data->{"ispformat"}->{"ffdnMemberSince"}) { $date_jffdn = "N/A"; } else { $date_jffdn = $data->{"ispformat"}->{"ffdnMemberSince"}; } if (!length $data->{"ispformat"}->{"email"}) { $contact = "N/A"; } else { $contact = $data->{"ispformat"}->{"email"}; } if (!length $data->{"ispformat"}->{"description"}) { $description = "N/A"; } else { $description = $data->{"ispformat"}->{"description"}; } my $filename = "/home/daga/bot-irc/wrk-dir/". $fai.".info"; # On indique dans le fichier la phrase que le bot va répondre my $fh2; open ($fh2, '>', $filename) or die "Impossible d'ouvrir le fichier $filename en écriture"; print $fh2 $description . ". Site : ". $site ." - Salon de discussion : ". $salon ." - Adresse de contact : ". $contact . " - Créé le ". $date_crea .", il a rejoint la fédé le ". $date_jffdn ."\n"; close $fh2; } # récupère les infos du json et les mets dans le ficher au nom du FAI.adh sub adh{ my $fai = shift @_; my $json; { local $/; #Enable 'slurp' mode open my $fh, "<", "/home/daga/bot-irc/dump/". $fai; $json = <$fh>; close $fh; } my $data = decode_json($json); # pour chaque valeur on vérifie que ce n'est pas nul, si c'est le cas on # indique N/A (not available) if (!length $data->{"ispformat"}->{"memberCount"}) { $nb_adh = "N/A"; } else { $nb_adh = $data->{"ispformat"}->{"memberCount"}; $nb_adh_ffdn += $nb_adh; } if (!length $data->{"ispformat"}->{"subscriberCount"}) { $nb_abo = "N/A"; } else { $nb_abo = $data->{"ispformat"}->{"subscriberCount"}; $nb_abo_ffdn += $nb_abo; } my $filename = "/home/daga/bot-irc/wrk-dir/". $fai.".adh"; my $fh2; open ($fh2, '>', $filename) or die "Impossible d'ouvrir le fichier $filename en écriture"; print $fh2 $nb_adh ." adhérent·e·s (et ".$nb_abo." abonné·e·s). C'est un ratio de ".sprintf("%.1f", $nb_abo / $nb_adh * 100)."%. Cela représente ". sprintf("%.1f", $nb_adh / $nb_adh_ffdn_old * 100) ."% et ". sprintf("%.1f", $nb_abo / $nb_abo_ffdn_old * 100) . "% des adhésions et des abonnements dans la fédération.\n"; close $fh2; } # indique le nombre d'adh et d'abo dans l'ensemble des FAI ; fichier : ffdn.adh sub adh_abo_ffdn { my $filenameadh = "/home/daga/bot-irc/wrk-dir/ffdn.adh"; my $fh3; # on met l'info dans le fichier open ($fh3, '>', $filenameadh) or die "Impossible d'ouvrir le fichier $filenameadh en écriture"; print $fh3 "La fédé compte ".$nb_adh_ffdn ." adhérent·e·s et ". $nb_abo_ffdn ." abonné·e·s"; close $fh3; } sub vieuxchiffres { my $filename = "/home/daga/bot-irc/wrk-dir/ffdn.adh"; if (-e $filename) { my $fh; open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture"; # une seule ligne my $line = <$fh>; close $fh; $line =~ s/[^0-9]//g; # gros hack qui ne marchera plus pour les chiffres > 10k ; dealwithit.jpg my @nums = $line =~/\d{4}/g; $nb_adh_ffdn_old = $nums[0]; $nb_abo_ffdn_old = $nums[1]; } } vieuxchiffres(); # pour chaque FAI on génère l'info my @filesdump = ; my $filedump; foreach $filedump (@filesdump) { $filedump =~ s{/home/daga/bot-irc/dump/}{}; info ("$filedump"); } # pour chaque FAI on génère l'info du nombre d'adhérents foreach $filedump (@filesdump) { $filedump =~ s{/home/daga/bot-irc/dump/}{}; adh ("$filedump"); } # on génère l'info du nombre d'adhérents de la fédé adh_abo_ffdn();