[go: up one dir, main page]

Menu

[db5684]: / perl / fetch_wsdl  Maximize  Restore  History

Download this file

88 lines (62 with data), 1.6 kB

#!/usr/bin/perl -w

# Copyright (c) 2010 Jeffrey C Honig <jch@honig.net>

# XXX - TODO
#	Use the class
#	Discover ISYs
#	Add some docs
#	Add user and password

use HTTP::Request;
use LWP::UserAgent;
use XML::Twig;
use Getopt::Long;
use Pod::Usage;

use strict;

sub wget {
    my $url = shift;

    my $request = HTTP::Request->new(GET => $url);
    my $ua = LWP::UserAgent->new;
    my $response = $ua->request($request);

    return $response->content();
}

my $opt_addr;
my $opt_man = 0;
my $opt_help = 0;
my $opt_verbose = 0;

GetOptions (
    'verbose|v'			=> \$opt_verbose,
    'help|?'			=> \$opt_help,
    'man'			=> \$opt_man,
    'isy=s'			=> \$opt_addr,
) || pod2usage(2);

if ($opt_help) {
    pod2usage(1);
}

if ($opt_man) {
    pod2usage(-existstatus => 0, -verbose => 2);
}

# Check ennvironment for default address
if (!$opt_addr && exists $ENV{"ISY_ADDR"}) {
    $opt_addr = $ENV{"ISY_ADDR"};
}

if (!$opt_addr) {
    die "ISY address not specified";
}
    
my $parser = XML::Twig->new();

my $spec = wget("http://${opt_addr}/services.wsdl");
if ($opt_verbose) {
    printf "SERVICES %s\n", $spec;
}

my $twig = $parser->parse($spec);

my $defs = $twig->root->first_child("wsdl:import");

my $location = $defs->{"att"}->{"location"};
printf "LOCATION: %s\n", $location;

if ($location =~ m%.*/([^/]+)$%) {
    my $filename = $1;
    printf "FILENAME: %s\n", $filename;

    my $wsdl = wget("http://${opt_addr}" . $location);

    open (OUT, ">$filename");

    printf OUT "%s\n", join("\n", split(/\r\n/, $wsdl));

    close OUT;
}

exit 0;

__END__