Archived
1
0
Fork 0

Starting to talk with API

This commit is contained in:
Mercier Pierre-Olivier 2013-09-02 19:12:00 +02:00
parent e243e7bbcf
commit 5709fa03d2
2 changed files with 147 additions and 0 deletions

98
ACU/API/Base.pm Normal file
View file

@ -0,0 +1,98 @@
#! /usr/bin/env perl
package Base;
use v5.10.1;
use strict;
use warnings;
use HTTP::Request::Common qw(GET POST);
use LWP::UserAgent;
use XML::LibXML;
use XML::SAX::ParserFactory;
sub parse($$)
{
my $mod = shift;
my $parsed = {};
my $sax_handler;
$sax_handler = ResultHandler->new($parsed) if ($mod eq "ResultHandler");
my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler );
$parser->parse_string(shift);
return $parsed;
}
sub get($$)
{
my $next = shift;
my $url = shift;
my $ua = LWP::UserAgent->new;
my $req = GET 'https://lerdorf.acu.epita.fr/intra/api/' . $url;
return parse($next, $ua->request($req)->as_string);
}
sub send($$@)
{
my $next = shift;
my $url = shift;
my $ua = LWP::UserAgent->new;
my $req = POST 'https://lerdorf.acu.epita.fr/intra/api/' . $url, @_;
return parse($next, $ua->request($req)->as_string);
}
package ResultHandler;
use v5.10.1;
use strict;
use warnings;
sub new ($$)
{
my $class = shift;
my $self = {
parsed => shift,
inResult => 0,
values => ""
};
bless $self, $class;
return $self;
}
sub start_element
{
my ($self, $element) = @_;
if ($element->{Name} eq "result") {
$self->{inResult} = 1;
}
}
sub characters
{
my ($self, $characters) = @_;
if ($self->{inResult}) {
$self->{values} .= $characters->{Data};
}
}
sub end_element
{
my ($self, $element) = @_;
if ($element->{Name} eq "result") {
$self->{parsed}{result} = $self->{values};
$self->{inResult} = 0;
$self->{values} = "";
}
}
1;

49
ACU/API/Submission.pm Normal file
View file

@ -0,0 +1,49 @@
#! /usr/bin/env perl
package Submission;
use v5.10.1;
use strict;
use warnings;
use ACU::API::Base;
sub add($$$$$)
{
my $year = shift;
my $project = shift;
my $tag = shift;
my $user = shift;
my $log = shift;
my $res = Base::send('ResultHandler', "projects/submissions/add.xml", [ leader_login => $user, project_name => $project, year => $year, log => $log, tag => $tag ]);
if ($res->{result} == '0') {
say "Rendu ok";
}
else {
say "Rendu non ok : retour de l'API non nul.";
}
}
sub get($$$$)
{
my $year = shift;
my $project = shift;
my $tag = shift;
my $user = shift;
my $res = Base::get('ResultHandler', "projects/submissions/get/$project/$year/$user/$tag.xml");
if ($res->{result} == '0') {
say "Rendu ok";
}
elsif ($res->{result} == '1') {
say "Pas encore rendu";
}
else {
say "Erreur: retour de l'API non valide.";
}
}
1;