Browse Source

yamd.pl - Реализована основная функциональность:

1. Контроль обязательных параметров запроса (domain, token, etc.);
2. Сборка URI запроса (service, sub_service, command, параметры запроса, etc.);
3. Собственно выполнение запроса к API и вывод результатов.
master
Sergey Kiselev 7 years ago
parent
commit
a33b52251e
  1. 71
      yamd.pl

71
yamd.pl

@ -0,0 +1,71 @@
#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use YAML::XS qw/LoadFile/;
our $api_url = "https://pddimp.yandex.ru/api2/admin";
our $query_options = LoadFile("./yamd_query_options.yml")
or die "Query parameters file not found\n";
our $task_file = shift or die "Usage: yamd.pl <file.yml>\n";
our $task = LoadFile($task_file)
or die "Unable to open file '$task_file'\n";
foreach my $check ("domain", "token", "service", "query") {
if (!defined $task->{yamd}->{$check}) {
die "'$check' is undefined in '$task_file'\n";
}
}
my $request_url = "";
my $request_type = "";
my $request_content_type = "";
{
my $service = $task->{yamd}->{service};
my $sub_service = $task->{yamd}->{sub_service};
my $query = $task->{yamd}->{query};
$request_url = $api_url . "/" .$service;
$request_url .= (defined $sub_service) ? "/" . $sub_service : "";
$request_url .= "/" . $query;
if (defined $sub_service) {
$request_type = $query_options->{$service}->{$sub_service}->{$query}->{query_type};
$request_content_type = $query_options->{$service}->{$sub_service}->{$query}->{content_type};
} else {
$request_type = $query_options->{$service}->{$query}->{query_type};
$request_content_type = $query_options->{$service}->{$query}->{content_type};
}
if (!defined $request_content_type) {
$request_content_type = $query_options->{default_content_type};
}
}
my $ua = new LWP::UserAgent;
my $request = new HTTP::Request($request_type => $request_url);
$request->header(
'PddToken' => $task->{yamd}->{token},
'Content-type' => $request_content_type
);
my $request_content = "domain=" . $task->{yamd}->{domain};
foreach my $k (keys %{$task->{yamd}->{options}}) {
$request_content .= "&" . $k . "=" . $task->{yamd}->{options}->{$k};
}
$request->content($request_content);
my $response = $ua->request($request);
if ($response->is_success) {
print $response->content . "\n\n";
} else {
print $response->status_line . "\n\n";
}