data z kalendare z korganizer na webu - nacrt

Obrázek uživatele maleprase

vznikla mi potreba mit kdykoliv dostupny aspon trochu aktualni kalendar z korganizeru.

v prve rade bylo potreba vyresit export dat. to jednoduse resi utilita konsolekalendar s exportem do .csv

$ konsolekalendar --view --event --all --export-type CSV | ./parse_kalendar.pl 'change_date_format();' > calendar.csv

kalendar exportuje cas ve formatu: Monday 26 January 2009, ktery se spatne porovnava.

proto jsem pouzil funkci change_date_for­mat() kterra ho prevede do snadneji porovnavatelneho formatu:

sub change_date_format {
  while (<STDIN>) {
    if (/^"([^"]*)","([^"]*)","([^"]*)",(.*)/) {
      my $new_date_start = `date -d '$1' +%Y-%m-%d`;
      chomp($new_date_start);
      my $new_date_end = `date -d '$3' +%Y-%m-%d`;
      chomp($new_date_end);
      print "\"$new_date_start\",\"$2\",\"$new_date_end\",$4\n";
    }
  }
}

nasledne je potreba pushnout .csv na server. na to staci jednoduche scp s klicem:

$ scp -P $port calendar.csv $user@$host:public_html/auth

na serveru je jednoduchy perlovy CGI skript ktery pomoci modulu DBI a AnyData vybira data:

sub print_event_html {
  my $event = shift;

  my $location = $event->{'location'};
  $location =~ s/ /&nbsp;/g;
  format =
<div style="border: 1px dotted;">
@*&nbsp;@*&nbsp;-&nbsp;@*&nbsp;@* [@*]<br/>
$event->{'date_start'}, $event->{'time_start'}, $event->{'date_end'}, $event->{'time_end'}, $location
<b>@*</b><br/>
$event->{'summary'}
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~<br/>
$event->{'description'}
</div>
.

  write;
}
use DBI;
use AnyData;
use CGI qw/:standard/;

...

if ($query->param('show')) {

  my $dbh = DBI->connect('dbi:AnyData(RaiseError=>1):');
  $dbh->func( 'calendar', 'CSV', 'calendar.csv', {
      cols=>'date_start,time_start,date_end,time_end,summary,location,description,uid'},
      'ad_catalog');

  my $sth = $dbh->prepare("SELECT date_start,time_start,date_end,time_end,summary,location,description,uid FROM calendar WHERE date_start >= ? AND date_start <= ? ORDER BY date_start LIMIT $limit");

  $sth->execute($date_from, $date_to);

  print $query->h1("$date_from - $date_to");
  while (my $h_r = $sth->fetchrow_hashref) {
    print_event_html($h_r);
  }
}

takze asi tak

kdyz bude zajem, zverejnim git repo s kompletnim kodem

Komentáře

C++

ahoj. schanim nekoho, kdo by mi naprogramoval, respektive znovunaprogramoval starickou DOSovou hru achtung die kurve s nekolika zmenama a upravama. pokud by jste to nekdo umel, tak mi prosim napiste na veen (at) ema­il.cz .zaplatim, urcite se dohodnem. Dik