6cbb8bb1274d1aa7e30bc638079e4440618a68a4
[ILL-Zotero-RT] / zotero.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 use LWP::Simple;
6 use XML::Simple;
7 use JSON;
8 use Data::Dump qw(dump);
9
10 my $UserID = $ENV{UserID} || die "usage: UserID=1234 key=abcd $0";
11 my $key    = $ENV{key}    || die "key required";
12
13 my $FETCH  = $ENV{FETCH}  || 0;
14
15 my $url = "https://api.zotero.org/users/$UserID/items?key=$key&format=atom&content=json&order=dateModified&sort=desc";
16
17 my $file = "$UserID.atom";
18
19 warn "# $url\n";
20 if ( $FETCH && mirror( $url => $file ) == RC_NOT_MODIFIED ) {
21         warn "not modified";
22 #       exit 0;
23 }
24
25 my $feed = XMLin( $file );
26 #warn "# feed ",dump($feed);
27
28 my $tree;
29 my $ticket;
30
31 foreach my $entry ( keys %{ $feed->{entry} } ) {
32         warn "# entry $entry ",dump($entry);
33         my $id = $entry;
34         $id =~ s{.+/items/}{}; # leave just ID
35
36         my $item = $feed->{entry}->{$entry};
37
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/}{};
43                         $up =~ s{\?.+}{};
44                         push @{ $tree->{$up} }, $id;
45                 }
46         }
47
48         if ( $item->{content}->{'zapi:type'} eq 'json' ) {
49                 my $json = $item->{content}->{content};
50                 warn "# $json\n";
51                 $json = $item->{json} = decode_json $json;
52                 warn "# json $id ", dump $json;
53
54                 foreach my $tag ( @{ $json->{tags} } ) {
55                         $tag = $tag->{tag};
56                         warn "# tag $id $tag\n";
57                         next unless $tag =~ m/#(\d+)/;
58                         push @{ $ticket->{$1} }, $id;
59                 }
60         }
61
62
63 }
64
65 warn "# tree ",dump( $tree );
66
67 warn "# ticket ",dump( $ticket );