#!/usr/bin/perl -w # # Angelo Conforti based on # http://km.krot.org/code/gc2fab.pl # # Install instruction on Debian: # apt-get install libwww-perl libcrypt-ssleay-perl libjson-perl # # Dump della base dati di googlecontacts su sqlite locale # Version 0.1 # use JSON; use LWP::UserAgent; use Getopt::Long; Getopt::Long::Configure ("bundling"); GetOptions( 'username:s' => \$username, 'password:s' => \$password, ); my $ua = LWP::UserAgent->new(); my $res = $ua->post('https://www.google.com/accounts/ClientLogin', {accountType => 'HOSTED_OR_GOOGLE', Email => $username, Passwd => $password, service => 'cp', source => 'krot-gmail2fastmail-1'}); die $res->status_line if !$res->is_success; my %params = map { split /=/ } split /\n/, $res->content; my ($sid, $lsid, $token) = @params{qw(SID LSID Auth)}; my $req_url = 'https://www.google.com/m8/feeds/contacts/default/thin'; my %req_hdr = (Authorization => "GoogleLogin auth=$token",'GData-Version' => 2); my %req_params = (alt => 'json', showdeleted => 'false' ); my $res = $ua->get(urlqq($req_url, %req_params, 'max-results' => 32768), %req_hdr); my $gdata = from_json($res->content(), {utf8 => 1}); for my $i (@{$gdata->{'feed'}->{'entry'}}) { my $full = $i->{'title'}->{'$t'}; $full =~ s/[\;]+//gi; for my $n (@{$i->{'gd$phoneNumber'}}) { my $num = $n->{'$t'}; $num =~ s/\+39//gi; $num =~ s/[\(\)\+\s]+//gi; printf "%s:%s\n",$num,$full; } } sub urlqq { my ($url, %args) = @_; my $uri = URI->new($url); while (my ($key, $val ) = each %args) { $args{$key} = ref $val eq 'HASH' ? [%{$val}] : $val; } $uri->query_form(%args) if %args; return $uri->canonical(); }