🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
12 messages
12 total messages Started by Giz Tue, 03 Jan 2012 10:56
Allegro WebAPI - czy komus się udało?
#52326
Author: Giz
Date: Tue, 03 Jan 2012 10:56
26 lines
1652 bytes
Witam,

Czy komuś się udało zrealizować wymianę danych z Allegro WebAPI w perlu?

Mi się udało tylko wywoływać metody które wymagają na wejściu podstawowe 
typy danych
jak doLogin lub doGetCountries

use SOAP::Lite +trace => qw( debug );
my $soap = 
SOAP::Lite->service("http://webapi.allegro.pl/uploader.php?wsdl");
my @odp = $soap->doGetCountries(228,'mojwebkey');

Jednak próbując z metodą doNewAuctionExt parametry wejściwe to
doNewAuctionExt(string, ArrayOfFieldsValue[], int, int)
i tu pojawia się problem.
Nie mam pojęcia jak przekazać prawidłowo tablice jako parametr, próbowałem 
już na różne sposoby
ale zawsze w podglądzie generowanego soap jest pusty ciąg

<fields xsi:nil="true" xsi:type="typens:ArrayOfFieldsValue" />

Czy komuś udało się to przeskoczyć?

Pozdr
G.
Re: Allegro WebAPI - czy komus się udało?
#52327
Author: Stachu 'Dozzie' K.
Date: Tue, 03 Jan 2012 11:01
30 lines
2169 bytes
On 2012-01-03, Giz <giz@nospam.pl> wrote:
> Witam,
>
> Czy komuś się udało zrealizować wymianę danych z Allegro WebAPI w perlu?
>
> Mi się udało tylko wywoływać metody które wymagają na wejściu podstawowe 
> typy danych
> jak doLogin lub doGetCountries
>
> use SOAP::Lite +trace => qw( debug );
> my $soap = 
> SOAP::Lite->service("http://webapi.allegro.pl/uploader.php?wsdl");
> my @odp = $soap->doGetCountries(228,'mojwebkey');
>
> Jednak próbując z metodą doNewAuctionExt parametry wejściwe to
> doNewAuctionExt(string, ArrayOfFieldsValue[], int, int)
> i tu pojawia się problem.
> Nie mam pojęcia jak przekazać prawidłowo tablice jako parametr, próbowałem 
> już na różne sposoby
> ale zawsze w podglądzie generowanego soap jest pusty ciąg
>
><fields xsi:nil="true" xsi:type="typens:ArrayOfFieldsValue" />
>
> Czy komuś udało się to przeskoczyć?

A jakimi sposobami próbowałeś przekazać tę tablicę?

-- 
Secunia non olet.
Stanislaw Klekot
Re: Allegro WebAPI - czy komus się udało?
#52328
Author: Giz
Date: Tue, 03 Jan 2012 11:22
31 lines
1917 bytes
> A jakimi sposobami próbowałeś przekazać tę tablicę?
> Secunia non olet.
> Stanislaw Klekot

Chociażby tak:

 my @msg=(   'fid' => 1,
         'fvalue-string' => 'Aukcja testowa',
         'fvalue-int' => 0,
         'fvalue-float' => 0,
         'fvalue-image' => 0,
         'fvalue-datetime' => 0,
         'fvalue-date' => '',
         'fvalue-range-int' => (
                'fvalue-range-int-min' => 0,
                'fvalue-range-int-max' => 0),
         'fvalue-range-float' => (
                'fvalue-range-float-min' => 0,
                'fvalue-range-float-max' => 0),
         'fvalue-range-date' => (
                'fvalue-range-date-min' => '',
                'fvalue-range-date-max' => '')
  );

 my @odp = $soap->doNewAuctionExt($sesja,@msg,0,0);
ale próbowałem też na różne inne sposoby ale bez efektów.
Najgorsze jest to że w necie nie ma żadnych śladów aby komukolwiek to się 
udało zrobić w perlu jeśli chodzi o Allegro WebAPI

Pozdr
G
Re: Allegro WebAPI - czy komus się udało?
#52329
Author: Stachu 'Dozzie' K.
Date: Tue, 03 Jan 2012 11:32
34 lines
2286 bytes
On 2012-01-03, Giz <giz@nospam.pl> wrote:
>> A jakimi sposobami próbowałeś przekazać tę tablicę?

> Chociażby tak:
>
>  my @msg=(   'fid' => 1,
[...]
>          'fvalue-date' => '',
>          'fvalue-range-int' => (
>                 'fvalue-range-int-min' => 0,
>                 'fvalue-range-int-max' => 0),
>          'fvalue-range-float' => (
>                 'fvalue-range-float-min' => 0,
>                 'fvalue-range-float-max' => 0),
>          'fvalue-range-date' => (
>                 'fvalue-range-date-min' => '',
>                 'fvalue-range-date-max' => '')
>   );
>
>  my @odp = $soap->doNewAuctionExt($sesja,@msg,0,0);
> ale próbowałem też na różne inne sposoby ale bez efektów.

Ah so. Trzeba było od razu mówić, że nie umiesz się posługiwać
strukturami złożonymi w Perlu.

perldoc perllol
perldoc Data::Dumper

> Najgorsze jest to że w necie nie ma żadnych śladów aby komukolwiek to się 
> udało zrobić w perlu jeśli chodzi o Allegro WebAPI

-- 
Secunia non olet.
Stanislaw Klekot
Re: Allegro WebAPI - czy komus się udało?
#52330
Author: Giz
Date: Tue, 03 Jan 2012 11:59
15 lines
1468 bytes
> Ah so. Trzeba było od razu mówić, że nie umiesz się posługiwać
> strukturami złożonymi w Perlu.
> perldoc perllol
> perldoc Data::Dumper

Dzięki ale niestety to mi nic nie daje, juz tam zaglądałem
i próbowałem w różny sposób tworzyć tablice ale zawsze bez rezultatu.

Ponawiam więc pytanie czy komus się już udało stworzyc
prawidłową tablicę dla metod które wymagają jako jeden z parametrów
typ ArrayOfFieldsValue[]
i mógłby zapodać przykład?

Pozdr
G.
Re: Allegro WebAPI - czy komus się udało?
#52333
Author: wozniak grzegorz
Date: Tue, 03 Jan 2012 12:02
7 lines
1195 bytes
Giz wrote:

> my @odp = $soap->doNewAuctionExt($sesja,@msg,0,0);
> ale próbowałem też na różne inne sposoby ale bez efektów.
mała podpowiedź: referencja ;)
-- 
Pozdrawiam
Re: Allegro WebAPI - czy komus się udało?
#52331
Author: Stachu 'Dozzie' K.
Date: Tue, 03 Jan 2012 12:14
25 lines
2061 bytes
On 2012-01-03, Giz <giz@nospam.pl> wrote:
>> Ah so. Trzeba było od razu mówić, że nie umiesz się posługiwać
>> strukturami złożonymi w Perlu.
>> perldoc perllol
>> perldoc Data::Dumper
>
> Dzięki ale niestety to mi nic nie daje, juz tam zaglądałem
> i próbowałem w różny sposób tworzyć tablice ale zawsze bez rezultatu.

Przepraszam, ale bez zrozumienia jak działają struktury złożone nie uda
ci się dobrać do API Allegro. A że nie rozumiesz, to widać z daleka po
konstrukcji
#v+
my @msg=(
        'fvalue-range-int' => (
               'fvalue-range-int-min' => 0,
               'fvalue-range-int-max' => 0),
);
#v-

Nawet nie sprawdziłeś, jak wygląda taka tablica po przypisaniu.

-- 
Secunia non olet.
Stanislaw Klekot
Re: Allegro WebAPI - czy komus się udało?
#52334
Author: wozniak grzegorz
Date: Tue, 03 Jan 2012 12:28
31 lines
2021 bytes
Giz wrote:

> my @msg=(   'fid' => 1,
> 'fvalue-string' => 'Aukcja testowa',
> 'fvalue-int' => 0,
> 'fvalue-float' => 0,
> 'fvalue-image' => 0,
> 'fvalue-datetime' => 0,
> 'fvalue-date' => '',
> 'fvalue-range-int' => (
> 'fvalue-range-int-min' => 0,
> 'fvalue-range-int-max' => 0),
> 'fvalue-range-float' => (
> 'fvalue-range-float-min' => 0,
> 'fvalue-range-float-max' => 0),
> 'fvalue-range-date' => (
> 'fvalue-range-date-min' => '',
> 'fvalue-range-date-max' => '')
> );
> 
> my @odp = $soap->doNewAuctionExt($sesja,@msg,0,0);
jak widzisz funkcja przyjmuje 4 parametry a ty tworząc tablice jak wyżej i
podajac ją bezpośrednio w funkcji przekazujesz  ich do funkcji... nie chce
mi się liczyć :P
jak napisałem referencja czyli takie wywołanie: 
my @odp = $soap->doNewAuctionExt($sesja,\@msg,0,0);
to samo tyczy się zawartości @msg.
Tu masz to przedstawione dość przystępnie:
http://www.cs.cf.ac.uk/Dave/PERL/node63.html#SECTION00940000000000000000
-- 
Pozdrawiam
Re: Allegro WebAPI - czy komus się udało?
#52332
Author: Giz
Date: Tue, 03 Jan 2012 13:50
52 lines
3260 bytes
> Przepraszam, ale bez zrozumienia jak działają struktury złożone nie uda
> ci się dobrać do API Allegro. A że nie rozumiesz, to widać z daleka po
> konstrukcji
> Nawet nie sprawdziłeś, jak wygląda taka tablica po przypisaniu.

ok stworzylem już prawdopodobnie dobrą strukturę ale to i tak nie działa.
XML nadal nie jest tworzony w oparciu o tę tablice.
Przydałby się jakiś działający przykład w perlu.

@fields =
(
    {'man' => {
            'fie1'=>
                    {'fid' => 1,
                     'fvalue-string' => 'Aukcja testowa',
                     'fvalue-int' => 0,
                     'fvalue-float' => 0,
                     'fvalue-image' => 0,
                     'fvalue-datetime' => 0,
                     'fvalue-date' => '',
                     'fvalue-range-int' => {
                                'fvalue-range-int-min' => 0,
                                'fvalue-range-int-max' => 0},
                     'fvalue-range-float' => {
                                'fvalue-range-float-min' => 0,
                                'fvalue-range-float-max' => 0},
                     'fvalue-range-date' => {
                                'fvalue-range-date-min' => '',
                                'fvalue-range-date-max' => ''}
                    },
            'fie2'=>
                    {'fid' => 2,
                     'fvalue-string' => 'Aukcja testowa',
                     'fvalue-int' => 0,
                     'fvalue-float' => 0,
                     'fvalue-image' => 0,
                     'fvalue-datetime' => 0,
                     'fvalue-date' => '',
                     'fvalue-range-int' => {
                     'fvalue-range-int-min' => 0,
                     'fvalue-range-int-max' => 0},
                     'fvalue-range-float' => {
                                'fvalue-range-float-min' => 0,
                                'fvalue-range-float-max' => 0},
                     'fvalue-range-date' => {
                                'fvalue-range-date-min' => '',
                                'fvalue-range-date-max' => ''}
                    }

          }
    }
); 
Re: Allegro WebAPI - czy komus się udało?
#52335
Author: Giz
Date: Tue, 03 Jan 2012 13:55
17 lines
1559 bytes
> jak napisałem referencja czyli takie wywołanie:
> my @odp = $soap->doNewAuctionExt($sesja,\@msg,0,0);
> to samo tyczy się zawartości @msg.
> Tu masz to przedstawione dość przystępnie:
> http://www.cs.cf.ac.uk/Dave/PERL/node63.html#SECTION00940000000000000000

ok dzięki
Dużo mi to wyjaśniło.
Stworzyłem już tablicę i być może parametry dobrze przekazuje ale teraz 
kwestia
aby tę tablicę dobrze zinterpetował SOAP::Lite a to narazie nie następuje.

Tworzy się xml z pustą wartością
<fields xsi:nil="true" xsi:type="typens:ArrayOfFieldsValue" />

Pozdr
G
Re: Allegro WebAPI - czy komus się udało?
#52336
Author: Giz
Date: Wed, 11 Jan 2012 08:12
58 lines
2764 bytes
> Czy komuś udało się to przeskoczyć?


Jako że nikomu się nie udało stworzyć komunikacji SOAP w perlu z 
AllegroWebApi lub stworzył ale siedzi cicho.
Wnioskuje to z tego że na grupach są tylko same pytania bez konkretnych 
odpowiedzi, także na forum WebApi na Allegro.
Wklejam tu swoje rozwiązanie.
Stety lub niestety musiałem skorzystać z kodu php który łączy się z 
AllegroWebApi.
Na szczęście w php musiałem zrobić tylko mały skrypcik a główna część jest 
nadal w perlu.
W skrócie wygląda to tak:

W perlu zrobiona jest cała obsługa  która  gdy potrzebuje wywołąć jakąś 
funckcję z AllegroWebApi to tworzę xml
który wysyłany jest do skryptu w php.
Skrypt w php ma za zadanie zamienić xml na Array i wysłać do Allegro.
Odpowiedź ponownie trafia do skryptu w perlu.

Wywołanie skryptu z poniomu perl wygląda tak:
my $res= `./SOAP.php \"$xml\"`;     # w $res mamy odpowiedź z allegro


natomiast sam skrypt SOAP.php to:

<?php
  require_once 'nusoap.php';
  require_once "class.xmltoarray.php";

  // skrypt oczekuje tylko jednego parametru w ktorym bedzie xml
  if(empty($argv[1])) {exit;}
  $xml=$argv[1];

  // zaczynamy przerabiac xml na array
  // funkcje xmlToArray znalazlem w necie i lekko
  // przerobiłem na własne potrzeby
  // Takich funkcji jest w necie sporo, wystarczy poszukac i dostosowac
  $xmlObj    = new XmlToArray($xml);
  $array = $xmlObj->createArray();


  $metoda=$array["xml"]["metoda"];  // moj xml zawiera tez info o 
wywolywanej metodzie
  $msg=$array["xml"]["dane"];       // tu wydzielam same dane z xml

     $client = new SoapClient('http://webapi.allegro.pl/uploader.php?wsdl', 
true);
     $client->soap_defencoding = 'UTF-8';
     $client->decode_utf8 = false;
     $response = $client->call("$metoda", $msg);

     print_r($response);
?>


Pozdr
G
Re: Allegro WebAPI - czy komus się udało?
#52337
Author: wozniak grzegorz
Date: Mon, 16 Jan 2012 22:58
100 lines
4559 bytes
Giz wrote:

>> Czy komuś udało się to przeskoczyć?
> 
> 
> Jako że nikomu się nie udało stworzyć komunikacji SOAP w perlu z
> AllegroWebApi lub stworzył ale siedzi cicho.
> Wnioskuje to z tego że na grupach są tylko same pytania bez konkretnych
> odpowiedzi, także na forum WebApi na Allegro.
> Wklejam tu swoje rozwiązanie.
Dobrze że je zamieściłeś, co pobudziło mnie do zgłębienia tematu :) 

#!/usr/bin/perl
use strict;
use warnings;
use SOAP::Lite +trace=>qw(debug);
sub create_range_int {
        my $fval_min_int=SOAP::Data->name("fvalue-range-int-min")->value(0);
        my $fval_max_int=SOAP::Data->name("fvalue-range-int-max")->value(0);
        my $ret=SOAP::Data->name("fvalue-range-date")->value($fval_min_int
$fval_max_int);
        return \$ret;
}
sub create_range_float {
        my
$fval_min_float=SOAP::Data->name("fvalue-range-float-min")->value(0);
        my
$fval_max_float=SOAP::Data->name("fvalue-range-float-max")->value(0);
        my
$ret=SOAP::Data->name("fvalue-range-float")->value($fval_min_float
$fval_max_float);
        return \$ret;

}
sub create_range_date {
        my
$fval_min_date=SOAP::Data->name("fvalue-range-date-min")->value('');
        my
$fval_max_date=SOAP::Data->name("fvalue-range-date-max")->value('');
        my $ret=SOAP::Data->name("fvalue-renge-date")->value($fval_min_date
$fval_max_date);
        return \$ret;

}
sub create_field {
        my (%params)=@_;
        my @values=(
        SOAP::Data->new(name=>"fid",value=>$params{fid}),
       
SOAP::Data->new(name=>"fvalue-string",value=>defined($params{fvalue_string})
$params{fvalue_string}:''),
       
SOAP::Data->new(name=>"fvalue-int",value=>defined($params{fvalue_int})
$params{fvalue_int}:0),
       
SOAP::Data->new(name=>"fvalue-float",value=>defined($params{fvalue_float})
$params{fvalue_float}:0),
       
SOAP::Data->new(name=>"fvalue-image",value=>defined($params{fvalue_image})
$params{fvalue_image}:0),
       
SOAP::Data->new(name=>"fvalue-datetime",value=>defined($params{fvalue_datetime})
$params{fvalue_datetime}:0),
       
SOAP::Data->new(name=>"fvalue-date",value=>defined($params{fvalue_date})
$params{fvalue_date}:''),
        create_range_int,
        create_range_float,
        create_range_date,
        );
        my $ret=SOAP::Data->value(@values);
        return \$ret;
}
my $soap=SOAP::Lite->proxy("http://webapi.allegro.pl/uploader.php");
my $method=SOAP::Data->name('doCheckNewAuctionExt');
my $session="bla_bla_228";
my $ses=SOAP::Data->name('session-handle')->value($session);
my $fields=SOAP::Data->name('fields')->value(\SOAP::Data->value(
                create_field(fid=>1,fvalue_string=>"testowa2"),
                create_field(fid=>2,fvalue_int=>1840),
                create_field(fid=>4,fvalue_int=>2),
                create_field(fid=>5,fvalue_int=>2),
                create_field(fid=>8,fvalue_float=>100),
                create_field(fid=>9,fvalue_int=>228),
                create_field(fid=>10,fvalue_int=>213),
                create_field(fid=>11,fvalue_string=>"NibyMaisto"),
                create_field(fid=>12,fvalue_int=>1),
                create_field(fid=>14,fvalue_int=>1),
                create_field(fid=>24,fvalue_string=>"test opis"),
                 create_field(fid=>32,fvalue_string=>"25-944"),
                 create_field(fid=>36,fvalue_float=>15.99),
        ));
my $result=$soap->call($method,$ses,$fields);



-- 
Pozdrawiam
Grzegorz Woźniak
xmpp:skinek_at_jabster_pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads