generate tree of items
[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
30 foreach my $entry ( keys %{ $feed->{entry} } ) {
31         warn "ENTRY $entry\n";
32         my $id = $entry;
33         $id =~ s{.+/items/}{}; # leave just ID
34
35         my $e = $feed->{entry}->{$entry};
36
37         foreach my $link ( @{ $e->{link} } ) {
38                 warn "# link ",dump($link);
39                 if ( $link->{rel} eq 'up' ) {
40                         my $up = $link->{href};
41                         $up =~ s{.+/items/}{};
42                         $up =~ s{\?.+}{};
43                         push @{ $tree->{$up} }, $id;
44                 }
45         }
46
47         if ( $e->{content}->{'zapi:type'} eq 'json' ) {
48                 my $json = $e->{content}->{content};
49                 warn "# $json\n";
50                 $e->{json} = decode_json $json;
51                 warn ">> $id ", dump $e->{json};
52         }       
53
54
55 }
56
57 warn "# tree ",dump( $tree );