/[A3C]/lib/A3C/AAIEduHr.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /lib/A3C/AAIEduHr.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 91 - (show annotations)
Wed Apr 30 16:15:25 2008 UTC (11 years, 2 months ago) by dpavlin
File size: 2447 byte(s)
if key and value is different, prepare { display => 'xx', value => 'yy' }
1 package A3C::AAIEduHr;
2
3 use strict;
4 use warnings;
5
6 =head1 NAME
7
8 AAAIEduHr
9
10 =head1 DESCRIPTION
11
12 Pull varios stuff from XML at L<http://shema.aaiedu.hr/> and cache it as
13 JSON on disk
14
15 =head1 METHODS
16
17 =cut
18
19 #use base 'Jifty::Object';
20
21 use XML::Rules;
22 use Data::Dump qw/dump/;
23 use File::Slurp;
24 use JSON::XS;
25
26 =head2 vocabulary
27
28 valid are A3C::AAIEduHr->vocabulary('hrEdu001'),
29
30 =cut
31
32 sub vocabulary {
33 my $self = shift;
34
35 my $name = shift;
36 die "invalid format of name" unless $name =~ /^hrEdu\d\d\d$/;
37
38 my $url = "http://shema.aaiedu.hr/aosi/$name.xml";
39 my $xml_path = Jifty::Util->absolute_path( "var/$name.xml" );
40 my $data_path = Jifty::Util->absolute_path( "var/$name.js" );
41
42 # sanity cleanup
43 unlink $xml_path if -s $xml_path == 0;
44 unlink $data_path if -s $data_path == 0;
45
46 # FIXME expire on some other way than rm?
47 if ( ! -e $xml_path ) {
48
49 my $ua = LWP::UserAgent->new;
50 my $res = $ua->get( $url );
51
52 die "can't get $url status: ", $res->status_line
53 unless $res->is_success;
54
55 write_file( $xml_path, $res->content );
56 Jifty->log->info("saved $url into $xml_path");
57 }
58
59 die "can't find xml $xml_path: $!" unless -s $xml_path;
60
61 my $data;
62
63 if ( ! -e $data_path ) {
64 my $rules = XML::Rules->new(
65 stripspaces => 8,
66 rules => [
67 _default => sub {
68 my ($tag_name, $tag_hash, $context, $parent_data) = @_;
69 warn "_default $tag_name ",dump( $tag_hash );
70 return;
71 },
72 vocabulary => 'no content',
73 vocabularyentry => sub {
74 die "no key attribute?" unless defined( $_[1]->{key} );
75 my $v = {
76 display => $_[1]->{_content},
77 value => $_[1]->{key},
78 };
79 # if same, just store key
80 $v = $_[1]->{key} if ( $v->{display} eq $v->{value} );
81 '@' . $_[0] => $v;
82 },
83 ]);
84 $data = $rules->parsefile( $xml_path )
85 || die "can't parse $xml_path: $!";
86
87 $data = $data->{vocabulary} || die "no vocabulary in data: ", dump( $data );
88
89 write_file( $data_path, encode_json( $data )) || die "can't save into $data_path: $!";
90 Jifty->log->info("saved dump into $data_path");
91 } else {
92 $data = decode_json( read_file( $data_path ) ) || die "can't read $data_path: $!";
93 Jifty->log->info("loaded dump from $data_path");
94 }
95
96 # warn '## ',ref($data),' = ',dump($data);
97
98 die "data not for for $name" unless $data->{name} eq $name;
99 warn "no vocabularyentry for $name from $data_path" unless defined( $data->{vocabularyentry} );
100
101 return $data->{vocabularyentry};
102 }
103
104 warn "# AAUEduHr loaded\n";
105
106 1;

  ViewVC Help
Powered by ViewVC 1.1.26