Récupérer des données Google Agenda avec Perl

Dans la série apprendre en s’amusant, nous allons voir aujourd’hui comment récupérer les évènements d’un agenda public Google, en utilisant Perl et le module Net::Google::Calendar. Plutôt que de longs discours, voici le code !

use Net::Google::Calendar;
my $agenda_public_url = 'http://www.google.com/calendar/feeds/foobar@gmail.com/public/full';
my $calendar = Net::Google::Calendar->new( url => $agenda_public_url );
foreach my $evt ( $calendar->get_events() ) {
    my $title= $evt->title;
    my @dates = $evt->when;
    #when retourne une liste composée ainsi : (date_debut,date_fin,flag evenement_sur_toute_la_journee)
    #Les dates récupérées sont des objets DateTime, on va les formatter en dd/MM/yyyy
    my $start_date= $dates[0]->strftime('%e/%m/%Y');
    my $end_date= $dates[1]->strftime('%e/%m/%Y');
    my is_all_day_event= $dates[2];
}

Si vous souhaitez afficher ces évènements sur une page web, je vous recommande chaudement l’excellent PerlDancer.
L’exemple suivant utilise Moose, il y avait certes plus simple, mais après m’être battu pendant des heures avec les tableaux de hashes, j’ai fini par craquer (mais si quelqu’un peut m’expliquer comment faire la même chose avec un tableau de hashes, je suis preneur !)
Nous allons donc créer une classe Event, qui contiendra les données reçues de Google :

package Event;
use Moose;
 has 'title' => (is => 'rw', isa => 'Str');
 has 'date_deb' => (is => 'rw', isa => 'Str');

  1;

Côté Dancer :

use Net::Google::Calendar;
use DateTime;
use Event;
get '/agenda' => sub {
	my $url =
'http://www.google.com/calendar/feeds/foobar@gmail.com/public/full';
	my @events;
	my $cal = Net::Google::Calendar->new( url => $url );
	foreach my $evt ( $cal->get_events() ) {
		my $event = Event->new();
		$event->title( $evt->title );
		my @dates = $evt->when;

		my $date_deb = $dates[0]->strftime('%e/%m/%Y');
		$event->date_deb($date_deb);
		push( @events, $event );
	}
	template 'agenda', { title => 'agenda', events => [@events] };
};

Vous noterez les crochets autour de @events, sur la dernière ligne de code, ne les oubliez surtout pas !
Pour la page html, en utilisant TemplateToolkit :

<table>
[ FOREACH event IN events ]
<tr>
<td>
<h1>[ event.title ]</h1>
</td>
<td>[ event.date_deb ]</td>
</tr>
[ END ]
</table>

Bon, je n’ai pas géré le cas de l’évènement sur une journée complète, mais vous avez l’idée générale, faites-en bon usage !

This entry was posted in perl. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>