diff --git a/yamd.pl b/yamd.pl new file mode 100755 index 0000000..55ccd6f --- /dev/null +++ b/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 \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"; +} +