8 use Data::Dump qw(dump);
11 my $UserID = $ENV{UserID} || die "usage: UserID=1234 key=abcd $0";
12 my $key = $ENV{key} || die "key required";
14 my $FETCH = $ENV{FETCH} || 0;
16 my $url = "https://api.zotero.org/users/$UserID/items?key=$key&format=atom&content=json&order=dateModified&sort=desc";
18 my $file = "$UserID.atom";
21 if ( $FETCH && mirror( $url => $file ) == RC_NOT_MODIFIED ) {
26 my $feed = XMLin( $file );
27 #warn "# feed ",dump($feed);
34 foreach my $entry ( keys %{ $feed->{entry} } ) {
35 warn "# entry $entry ",dump($entry);
37 $id =~ s{.+/items/}{}; # leave just ID
39 my $item = $feed->{entry}->{$entry};
41 foreach my $link ( @{ $item->{link} } ) {
42 warn "# link $id ",dump($link);
43 if ( $link->{rel} eq 'up' ) {
44 my $up = $link->{href};
45 $up =~ s{.+/items/}{};
47 push @{ $tree->{$up} }, $id;
51 if ( $item->{content}->{'zapi:type'} eq 'json' ) {
52 my $json = $item->{content}->{content};
54 $json = $item->{content} = decode_json $json;
55 warn "# json $id ", dump $json;
57 foreach my $tag ( @{ $json->{tags} } ) {
59 warn "# tag $id $tag\n";
60 next unless $tag =~ m/#(\d+)/;
61 push @{ $ticket_items->{$1} }, $id;
65 $items->{$id} = $item;
69 warn "# tree ",dump( $tree );
71 warn "# ticket_items ",dump( $ticket_items );
74 my $rt = RT::Client::REST->new(
75 server => 'http://rt.rot13.org/rt',
79 $rt->login(username => $ENV{RT_USER}, password => $ENV{RT_PASSWORD});
81 foreach my $nr ( keys %$ticket_items ) {
83 my $ticket = $rt->show(type => 'ticket', id => $nr);
84 warn "# ticket $nr ",dump($ticket);
86 if ( $ticket->{Queue} !~ m/ILL/i ) {
87 warn "SKIP $ticket not in ILL queue!";
91 foreach my $id ( @{ $ticket_items->{$nr} } ) {
92 warn "# item $id ",dump( $items->{$id} );
94 $rt->comment( ticket_id => $nr, message => dump( $items->{$id} ) );
96 last; # FIXME just first