NAME WebService::DailyConnect - Web client to download events from Daily Connect VERSION version 0.02 SYNOPSIS use WebService::DailyConnect; use Term::Clui qw( ask ask_password ); use Path::Tiny qw( path ); my $user = ask("email:"); my $pass = ask_password("pass :"); my $dc = WebService::DailyConnect->new; $dc->login($user, $pass) || die "bad email/pass"; my $user_info = $dc->user_info; foreach my $kid (@{ $dc->user_info->{myKids} }) { my $kid_id = $kid->{Id}; my $name = lc $kid->{Name}; foreach my $photo_id (map { $_->{Photo} || () } @{ $dc->kid_status($kid_id)->{list} }) { my $dest = path("~/Pictures/dc/$name-$photo_id.jpg"); next if -f $dest; print "new photo: $dest\n"; $dest->parent->mkpath; $dc->photo($photo_id, $dest); } } DESCRIPTION Interface to DailyConnect, which is a service that can provide information about your kids at daycare. This is more or less a port of a node API that I found here: https://github.com/Flet/dailyconnect I wrote this module for more or less the same reasons as that author, although I wanted to be able to use it in perl. It uses HTTP::AnyUA, so should work with any Perl user agent supported by that layer. ATTRIBUTES ua An instance of HTTP::AnyUA. If a user agent supported by HTTP::AnyUA (such as HTTP::Tiny or LWP::UserAgent) is provided, a new instance of HTTP::AnyUA will wrap around that user agent instance. The only requirement is that the underlying user agent must support cookies. If a ua attribute is not provided, then an instance of HTTP::AnyUA will be created wrapped around a LWP::UserAgent using the default proxy and a cookie jar. base_url The base URL for daily connect. The default should be correct. req The most recent request. The format of the request object is subject to change, and therefore should only be used for debugging. res The most recent response. The format of the response object is subject to change, and therefore should only be used for debugging. METHODS Beside login, methods typically return a hash or file content depending on the type of object requested. On error they return undef. Further details for the failure can be deduced from the response object stored in res above. login my $bool = $dc->login($email, $pass); Login to daily connect using the given email and password. The remaining methods only work once you have successfully logged in. user_info my $hash = $dc->user_info; Get a hash of the user information. kid_summary my $hash = $dc->kid_summary($kid_id); Get today's summary for the given kid. kid_summary_by_date my $hash = $dc->kid_summary_by_date($kid_id, $date); Get the summary for the given kid on the given day. $date is in the form YYMMDD. kid_status my $hash = $dc->kid_status($kid_id); Get today's status for the given kid. kid_status_by_date my $hash = $dc->kid_status_by_date($kid_id, $date); Get the status for the given kid on the given date. $date is in the form YYMMDD. photo $dc->photo($photo_id); $dc->photo($photo_id, $dest); Get the photo with the given $photo_id. If $dest is not provided then the content of the photo in JPEG format will be returned. If $dest is a scalar reference, then the content will be stored in that scalar. If $dest is a string, then that string will be assumed to be a file, and the photo will be saved there. If a Path::Tiny or Path::Class::File object are passed in, then the content will be written to the files at that location. CAVEATS DailyConnect does not provide a standard RESTful API, so it is entirely possible they might change the interface of their app, and break this module. My kiddo is an only child so I haven't been able to test this for more than one kiddo. May be a problem if you have twins or septuplets. AUTHOR Graham Ollis COPYRIGHT AND LICENSE This software is copyright (c) 2018,2019 by Graham Ollis. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.