Решено: Perl ООП работа с SOAP API (Вывод массива данных на экран)

Модератор: Модераторы разделов

Аватара пользователя
omeh2003
Сообщения: 43
ОС: Linux Ubuntu

Решено: Perl ООП работа с SOAP API

Сообщение omeh2003 »

Здравствуйте!
Помогите пожалуйста разобраться с следующим кодом.

У API есть метод GetTimeZones. Он должен возвращать массив структур данных TimeZoneInfo:

Пытаюсь сделать вывод содержимого этого массива следующим кодом

Код: Выделить всё

# Создание объекта для подключения к SOAP
my $client = SOAP::Lite
    -> proxy('https://soap.direct.yandex.ru/api/v4/')
    -> uri('API');
# вызов метода
my $time_zones = $client->GetTimeZones()->result;
print @{$time_zones};


Вывод:
Spoiler

Код: Выделить всё

TimeZoneInfo=HASH(0x24a03d0)TimeZoneInfo=HASH(0x248e0e8)TimeZoneInfo=HASH(0x24891c8)TimeZoneInfo=HASH(0x24891c8)TimeZoneInfo=HASH(0x248d830)TimeZoneInfo=HASH(0x2488b80)TimeZoneInfo=HASH(0x2488808)TimeZoneInfo=HASH(0x2488430)TimeZoneInfo=HASH(0x2482a80)TimeZoneInfo=HASH(0x2482708)TimeZoneInfo=HASH(0x2482390)TimeZoneInfo=HASH(0x2481fb8) и т.д.


Если вызвать

Код: Выделить всё

my $time_zones = $client->GetTimeZones()

То дает ошибку Not an ARRAY reference.

Подключал Dumper и Смотрел содержимое Dumper($time_zones) там все данные видны, вариант неправильного запроса отпадает.

Подскажите как правильно вывести данные из полученного массива, не понимаю я эти объекты :(

P.S. На всякий случай ссылка на документацию метода.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Решено: Perl ООП работа с SOAP API

Сообщение Crazy »

omeh2003 писал(а):
03.07.2011 00:07
Подключал Dumper и Смотрел содержимое Dumper($time_zones) там все данные видны, вариант неправильного запроса отпадает.

Подскажите как правильно вывести данные из полученного массива, не понимаю я эти объекты :(

Эх школота, не в объектах дело. Открой учебник и читай про ссылки.

Desipere in loco
Спасибо сказали:
Аватара пользователя
omeh2003
Сообщения: 43
ОС: Linux Ubuntu

Re: Решено: Perl ООП работа с SOAP API

Сообщение omeh2003 »

Crazy писал(а):
03.07.2011 01:45
Эх школота, не в объектах дело. Открой учебник и читай про ссылки.


Какое конкретно место читать? Возвращаемый объект является blessed hash, и использовать его нужно через методы имхо так было в нашей школе. Еще конечно можно как я нарушая инкапсуляцию сделать $result->{something} но оно не привело к нужному результату.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Решено: Perl ООП работа с SOAP API

Сообщение diesel »

Ну вы же сами сказали "У API есть метод GetTimeZones. Он должен возвращать массив структур данных TimeZoneInfo", вот вам print этот массив и напечатал, а каждый элемент это хэш:

Код: Выделить всё

            <complexType name="TimeZoneInfo">
                <sequence>
                    <element name="TimeZone" type="xsd:string" />
                    <element name="GMTOffset" type="xsd:int" />
                    <element name="Name" type="xsd:string" />
                </sequence>
            </complexType>


то есть у вас там должно быть шото типа:

Код: Выделить всё

forearch my $item (@{$time_zones}){
     print $item->{'TimeZone'} . " " . $item->{'GMTOffset'} . " " . $item->{'Name'} . "\n";
}


ну или если не получится, посмотрите Dumper'ом что из себя $item представляет.
Спасибо сказали:
Аватара пользователя
omeh2003
Сообщения: 43
ОС: Linux Ubuntu

Re: Решено: Perl ООП работа с SOAP API

Сообщение omeh2003 »

diesel писал(а):
03.07.2011 03:16
то есть у вас там должно быть шото типа:

Код: Выделить всё

forearch my $item (@{$time_zones}){
     print $item->{'TimeZone'} . " " . $item->{'GMTOffset'} . " " . $item->{'Name'} . "\n";
}


Точно! Большое спасибо!
Как часто бывает часть ответа было в вопросе :)
А меня как то переклинило на этих "объектах" и "методах" и дальше уже думать не очень не мог :)
Спасибо сказали: