SYNOPSIS
        use WWW::Google::Contacts;

        my $google = WWW::Google::Contacts->new( username => "your.username", password => "your.password" );

        my $contact = $google->new_contact;
        $contact->full_name("Emmett Brown");
        $contact->name_prefix("Dr");
        $contact->email('doctor@timetravel.org');
        $contact->hobby("Time travel");
        $contact->jot([ "Went back in time", "Went forward in time", "Became blacksmith" ]),
        $contact->create;

        my @contacts = $google->contacts->search({ given_name => "Emmett" });
        foreach my $c ( @contacts ) {
            print "Got the following jots about the good doctor\n";
            foreach my $jot ( @{ $c->jot } ) {
                print "Jot: " . $jot->value . "\n";
            }
            print "And now he goes back to the future\n";
            $c->delete;
        }


        my $groups = $google->groups;
        while ( my $group = $groups->next ) {
            print "Title = " . $group->title . "\n";
        }

DESCRIPTION
    This module implements 'Google Contacts Data API' according
    <http://code.google.com/apis/contacts/docs/3.0/developers_guide_protocol
    .html>

    NOTE This new interface is still quite untested. Please report any bugs.

CONSTRUCTOR
  new( username => .., password => .. )
    *username* and *password* are required arguments and must be valid
    Google credentials. If you do not have a Google account you can create
    one at <https://www.google.com/accounts/NewAccount>.

METHODS
  $google->new_contact
    Returns a new empty WWW::Google::Contacts::Contact object.

  $google->contact( $id )
    Given a valid contact ID, returns a WWW::Google::Contacts::Contact
    object populated with contact data from Google.

  $google->contacts
    Returns a WWW::Google::Contacts::ContactList object which can be used to
    iterate over all your contacts.

  $google->new_group
    Returns a new WWW::Google::Contacts::Group object.

  $google->group( $id )
    Given a valid group ID, returns a WWW::Google::Contacts::Group object
    populated with group data from Google.

  $google->groups
    Returns a WWW::Google::Contacts::GroupList object which can be used to
    iterate over all your groups.

DEPRECATED METHODS
    The old module interface is still available, but its use is discouraged.
    It will eventually be removed from the module.

    *   new/login

            my $gcontacts = WWW::Google::Contacts->new();
            $gcontacts->login('fayland@gmail.com', 'pass') or die 'login failed';

    *   create_contact

            $gcontacts->create_contact( {
                givenName => 'FayTestG',
                familyName => 'FayTestF',
                fullName   => 'Fayland Lam',
                Notes     => 'just a note',
                primaryMail => 'primary@example.com',
                displayName => 'FayTest Dis',
                secondaryMail => 'secndary@test.com', # optional
            } );

        return 1 if created

    *   get_contacts

            my @contacts = $gcontacts->get_contacts;
            my @contacts = $gcontacts->get_contacts( {
                group => 'thin', # default to 'full'
            } )
            my @contacts = $gcontacts->get_contacts( {
                updated-min => '2007-03-16T00:00:00',
                start-index => 10,
                max-results => 99, # default as 9999
            } );

        get contacts from this account.

        "group" refers
        <http://code.google.com/apis/contacts/docs/2.0/reference.html#Projec
        tions>

        "start-index", "max_results" etc refer
        <http://code.google.com/apis/contacts/docs/2.0/reference.html#Parame
        ters>

    *   get_contact($id)

            my $contact = $gcontacts->get_contact('http://www.google.com/m8/feeds/contacts/account%40gmail.com/base/1');

        get a contact by id

    *   update_contact

            my $status = $gcontacts->update_contact('http://www.google.com/m8/feeds/contacts/account%40gmail.com/base/123623e48cb4e70a', {
                givenName => 'FayTestG2',
                familyName => 'FayTestF2',
                fullName   => 'Fayland Lam2',
                Notes     => 'just a note2',
                primaryMail => 'primary@example2.com',
                displayName => 'FayTest2 Dis',
                secondaryMail => 'secndary@test62.com', # optional
            } );

        update a contact

    *   delete_contact($id)

            my $status = $gcontacts->delete_contact('http://www.google.com/m8/feeds/contacts/account%40gmail.com/base/1');

        The id is from "get_contacts".

    *   create_group

            my $status = $gcontacts->create_group( { title => 'Test Group' } );

        Create a new group

    *   get_groups

            my @groups = $gcontacts->get_groups;
            my @groups = $gcontacts->get_groups( {
                updated-min => '2007-03-16T00:00:00',
                start-index => 10,
                max-results => 99, # default as 9999
            } );

        Get all groups.

    *   get_group($id)

            my $group = $gcontacts->get_group('http://www.google.com/m8/feeds/groups/account%40gmail.com/base/6e744e7d0a4b398c');

        get a group by id

    *   update_group($id, { title => $title })

            my $status = $gcontacts->update_group( 'http://www.google.com/m8/feeds/groups/account%40gmail.com/base/6e744e7d0a4b398c', { title => 'New Test Group 66' } );

        Update a group

    *   delete_group

            my $status = $gcontacts->delete_contact('http://www.google.com/m8/feeds/groups/account%40gmail.com/base/6e744e7d0a4b398c');

SEE ALSO
    WWW::Google::Contacts::Contact

    WWW::Google::Contacts::ContactList

    WWW::Google::Contacts::Group

    WWW::Google::Contacts::GroupList

    <http://code.google.com/apis/contacts/docs/3.0/developers_guide_protocol
    .html>

ACKNOWLEDGEMENTS
    Fayland Lam - who wrote the first version of this module

    John Clyde - who shared his code about Contacts API with Fayland

TODO
    More POD
    Unit tests. Very lame right now
    Complete link between contact - group
    Images
    Fix bugs :)

AUTHOR
      Magnus Erixzon <magnus@erixzon.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2010 by Magnus Erixzon.

    This is free software; you can redistribute it and/or modify it under
    the same terms as perl itself.