#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::Entities; use Unicode::String qw(utf8 latin1); my %groups = ( 'Union pour un Mouvement Populaire' => 'UMP', 'Socialiste' => 'PS', 'Union pour la Démocratie Française' => 'UDF', 'Député-e-s Communistes et Républicains' => 'PCF', 'Députés n\'appartenant à aucun groupe' => '?', ); my %no_groups = ( 'M. Gérard Charasse' => 'PRG', 'M. Émile Zuccarelli' => 'PRG', 'M. Noël Mamère' => 'Verts', 'Mme Martine Billard' => 'Verts', 'M. Yves Cochet' => 'Verts', 'M. Édouard Leveau' => 'CNIP (divers-droite)', 'Mme Véronique Besse' => 'MPF', 'M. Joël Sarlot' => 'MPF', 'M. Alfred Marie-Jeanne' => 'MIM (divers-gauche)', 'Mme Huguette Bello' => 'PCR', ); # Create a user agent object my $ua = LWP::UserAgent->new; $ua->agent("Mozilla"); my $headers = HTTP::Headers->new('Accept-Language' => 'fr'); # Fetch list of departments my $departments_url = 'http://www.assemblee-nationale.fr/12/qui/circonscriptions/'; # Create a request my $departments_req = HTTP::Request->new(GET => $departments_url, $headers); # Pass request to the user agent and get a response back my $departments_res = $ua->request($departments_req); # Check the outcome of the response unless ($departments_res->is_success) { die "Error fetching list of departments: $departments_url: ", $departments_res->status_line, "\n"; } print <<"HTML"; Mon Député

Mon Député

Il est urgent de contacter MAINTENANT votre député pour lui dire d'empêcher la loi sur le droit d'auteur et les droits voisins dans la société de l'information (DADVSI) de dénaturer le droit d'auteur et la liberté culturelle. Pour ceci, conseiller lui de suivre les recommandations de EUCD.info, pour le vote des amendements prévu les 20 et 21 décembre 2005.

Vous trouverez ci-dessous les information pour contacter le député de votre circonscription. L'idéal est d'aller le rencontrer en personne. Sinon téléphonez-lui ou envoyez-lui un fax. Lorsque vous aurez contacté votre député, merci de nous rapporter un bref compte-rendu de votre échange sur la page WIKI indiquée.

Pour plus d'informations sur ce que vous pouvez faire, voir http://eucd.info

Les tableaux ci-dessous donnent les coordonnées des députés par département :
AIN (01) AISNE (02) ALLIER (03) ALPES-DE-HAUTE-PROVENCE (04) HAUTES-ALPES (05) ALPES-MARITIMES (06) ARDÈCHE (07) ARDENNES (08) ARIÈGE (09) AUBE (10) AUDE (11) AVEYRON (12) BOUCHES-DU-RHÔNE (13) CALVADOS (14) CANTAL (15) CHARENTE (16) CHARENTE-MARITIME (17) CHER (18) CORRÈZE (19) CORSE-DU-SUD (2A) HAUTE-CORSE (2B) CÔTE-D'OR (21) CÔTES-D'ARMOR (22) CREUSE (23) DORDOGNE (24) DOUBS (25) DRÔME (26) EURE (27) EURE-ET-LOIR (28) FINISTÈRE (29) GARD (30) HAUTE-GARONNE (31) GERS (32) GIRONDE (33) HÉRAULT (34) ILLE-ET-VILAINE (35) INDRE (36) INDRE-ET-LOIRE (37) ISÈRE (38) JURA (39) LANDES (40) LOIR-ET-CHER (41) LOIRE (42) HAUTE-LOIRE (43) LOIRE-ATLANTIQUE (44) LOIRET (45) LOT (46) LOT-ET-GARONNE (47) LOZÈRE (48) MAINE-ET-LOIRE (49) MANCHE (50) MARNE (51) HAUTE-MARNE (52) MAYENNE (53) MEURTHE-ET-MOSELLE (54) MEUSE (55) MORBIHAN (56) MOSELLE (57) NIÈVRE (58) NORD (59) OISE (60) ORNE (61) PAS-DE-CALAIS (62) PUY-DE-DÔME (63) PYRÉNÉES-ATLANTIQUES (64) HAUTES-PYRÉNÉES (65) PYRÉNÉES-ORIENTALES (66) BAS-RHIN (67) HAUT-RHIN (68) RHÔNE (69) HAUTE-SAÔNE (70) SAÔNE-et-LOIRE (71) SARTHE (72) SAVOIE (73) HAUTE-SAVOIE (74) PARIS (75) SEINE-MARITIME (76) SEINE-ET-MARNE (77) YVELINES (78) DEUX-SÈVRES (79) SOMME (80) TARN (81) TARN-ET-GARONNE (82) VAR (83) VAUCLUSE (84) VENDÉE (85) VIENNE (86) HAUTE-VIENNE (87) VOSGES (88) YONNE (89) TERRITOIRE DE BELFORT (90) ESSONNE (91) HAUTS-DE-SEINE (92) SEINE-SAINT-DENIS (93) VAL-DE-MARNE (94) VAL-D'OISE (95) MARTINIQUE (972) GUYANE (973) RÉUNION (974) ST-PIERRE ET MIQUELON (975) MAYOTTE (976) WALLIS-ET-FUTUNA (977) NOUVELLE CALÉDONIE (978) POLYNÉSIE FRANÇAISE (979)

HTML # Parse each department foreach my $department_line (split /\n/, $departments_res->content) { $department_line = latin1($department_line)->utf8; next unless $department_line =~ /([^<]+)<\/font><\/b> ([^<]+)<\/a>/o; my ($department_name, $department_url, $department_number) = ($1, $2, $3); print <<"HTML";

$department_name ($department_number)

HTML my $constituencies_html; my @constituencies; # Hack for DOM/TOM with one contituency by department if ($department_url =~ /^\d\d[ab\d]\.asp$/) { # Fetch list of constituencies $department_url = "http://www.assemblee-nationale.fr/12/qui/circonscriptions/$department_url"; my $department_req = HTTP::Request->new(GET => $department_url, $headers); my $department_res = $ua->request($department_req); unless ($department_res->is_success) { die "Error fetching list of constituencies: $department_url: ", $department_res->status_line, "\n"; } $constituencies_html = latin1($department_res->content)->utf8; @constituencies = ($constituencies_html =~ /^c\d+ = "([^"]+)"/gom); } else { $constituencies_html = "HREF=\"$department_url\" onMouseOver=\"affiche\(c1\)"; push @constituencies, $department_name; } $constituencies_html =~ s/\015\012?/\n/go; # Parse each constituency foreach my $constituency_line (split /\n/, $constituencies_html) { next unless $constituency_line =~ /^\s+new(GET => $mp_url, $headers); my $mp_res = $ua->request($mp_req); unless ($mp_res->is_success) { die "Error fetching deputy: $mp_url: ", $mp_res->status_line, "\n"; } my $mp_html = latin1($mp_res->content)->utf8; (my $mp_name) = ($mp_html =~ /^<\/TABLE>

    ([^>]+)<\/font>/om); my $mp_initial = (split //, (split / /, $mp_name)[-1])[0]; my ($mp_address, $mp_city, $mp_tel, $mp_tel2, $mp_fax) = ($mp_html =~ /

    · ([^<]+)<\/font><\/p>

    ([^<]+)<\/font><\/p>

    Téléphone : ([\d ]+)<\/font><\/p>(?:

    Téléphone : ([\d ]+)<\/font><\/p>)?(?:

    Télécopie : ([\d ]+)<\/font>)?/om); if ($mp_address and $mp_city) {$mp_address.= $mp_city;} else {$mp_address='-';} if ($mp_tel and $mp_tel2) {$mp_tel.=" / $mp_tel2";} else {$mp_tel='-'unless $mp_tel;} $mp_fax='-' unless $mp_fax; my ($mp_grp, $mp_prof) = ($mp_html =~ /Groupe politique\s+: ([^<]+)<\/font><\/p>(?:

    Profession\s+: ([^<]+)<\/font>)?/moi); $mp_prof='?' unless $mp_prof; my $ap = ''; if ($mp_grp =~ s/^Apparenté //o) { $ap = 'Ap. '; } warn "Unknown group for <$department_url> <$constituency_url>\n" unless exists $groups{$mp_grp}; $mp_grp = $groups{$mp_grp}; $mp_grp = $no_groups{$mp_name} if $mp_grp eq '?' and exists $no_groups{$mp_name}; $mp_grp = $ap.$mp_grp; warn "Unknown constituency for <$department_url> <$constituency_url>\n" unless $constituency_name; warn "Unknown name for <$department_url> <$constituency_url>\n" unless $mp_name; warn "Unknown profession for <$department_url> <$constituency_url>\n" unless $mp_prof; warn "Unknown telephone for <$department_url> <$constituency_url>\n" unless $mp_tel; warn "Unknown fax for <$department_url> <$constituency_url>\n" unless $mp_fax; warn "Unknown address for <$department_url> <$constituency_url>\n" unless $mp_address; print <<"HTML";

HTML } print <<"HTML";
Circonscription Député Parti Profession Téléphone Fax Adresse Page wiki de compte-rendu
$constituency_name $mp_name $mp_grp $mp_prof $mp_tel $mp_fax $mp_address compte-rendu
HTML } print <<"HTML"; HTML