JSON
Взаимодействие с API на Perl с использованием библиотеки JSON.
Пример демонстрирует вызов метода GetClientInfo.
#!/usr/bin/perl -w
=head1 NAME
Пример работы с API Яндекс Директа на языке Perl
с использованием библиотеки JSON
=head1 DESCRIPTION
В примере использован рекомендуемый синтаксис для работы с API Яндекс Директа
на языке Perl с использованием протокола JSON.
Обращаем внимание, что все текстовые данные должны быть в кодировке UTF8.
Подробнее про получение токена читайте в документации:
https://tech.yandex.ru/oauth/doc/dg/
В качестве примера рассмотрен вызов метода GetClientInfo, возвращающий информацию об указанном логине.
=cut
use strict;
use JSON qw/to_json from_json/;
use Encode qw/decode_utf8/;
use HTTP::Request::Common;
use HTTP::Response;
use LWP::UserAgent;
use Data::Dumper;
# Авторизационный токен, полученный в сервисе oauth.yandex.ru
my $token = 'YANDEX-OAUTH-LOGIN-TOKEN';
# Логин учетной записи, данные о которой требуется получить
my $login = 'YANDEX-LOGIN';
my $url = "https://api.direct.yandex.ru/v/json/";
# Подготовка данных для запроса
my $data = {};
$data->{param} = [$login];
$data->{method} = 'GetClientInfo';
$data->{token} = $token;
my $json_data = to_json($data);
my $ua = new LWP::UserAgent( timeout => 600 );
my $request = HTTP::Request->new('POST', $url, undef, $json_data);
# Запрос на сервер
my $response = $ua->request($request);
# for debug
# warn $request->as_string, "\n";
# warn $response->as_string, "\n";
if ($response->is_success) {
my $result = from_json(Encode::decode_utf8($response->decoded_content())) || {};
if (defined $result->{error_code}) {
# Если ошибку вернул сервер API Яндекс Директа
die join "\n"
, "API error:"
, "Code: ".$result->{error_code}
, "Describe: ".$result->{error_str}
, "Detail:".($result->{error_detail} || '');
} elsif (defined $result->{data}) {
print Dumper {result => $result};
}
} else {
# Если ошибка произошла при отправке запроса
die "HTTP error: ".$response->status_line;
}