8 use Data::Dump qw(dump);
10 my $UserID = $ENV{UserID} || die "usage: UserID=1234 key=abcd $0";
11 my $key = $ENV{key} || die "key required";
13 my $FETCH = $ENV{FETCH} || 0;
15 my $url = "https://api.zotero.org/users/$UserID/items?key=$key&format=atom&content=json&order=dateModified&sort=desc";
17 my $file = "$UserID.atom";
20 if ( $FETCH && mirror( $url => $file ) == RC_NOT_MODIFIED ) {
25 my $feed = XMLin( $file );
26 #warn "# feed ",dump($feed);
31 foreach my $entry ( keys %{ $feed->{entry} } ) {
32 warn "# entry $entry ",dump($entry);
34 $id =~ s{.+/items/}{}; # leave just ID
36 my $item = $feed->{entry}->{$entry};
38 foreach my $link ( @{ $item->{link} } ) {
39 warn "# link $id ",dump($link);
40 if ( $link->{rel} eq 'up' ) {
41 my $up = $link->{href};
42 $up =~ s{.+/items/}{};
44 push @{ $tree->{$up} }, $id;
48 if ( $item->{content}->{'zapi:type'} eq 'json' ) {
49 my $json = $item->{content}->{content};
51 $json = $item->{json} = decode_json $json;
52 warn "# json $id ", dump $json;
54 foreach my $tag ( @{ $json->{tags} } ) {
56 warn "# tag $id $tag\n";
57 next unless $tag =~ m/#(\d+)/;
58 push @{ $ticket->{$1} }, $id;
65 warn "# tree ",dump( $tree );
67 warn "# ticket ",dump( $ticket );