PDA

View Full Version : systools.urlencode & httpgetclob



JGreim
14-11-18, 14:59
Hallo Zusammen.
Für einen Webservice soll eine Adresse eingelesen und verarbeitet werden.
Leider funktioniert das Ganze nicht wie gewünscht.

dcl-s
dcl-s tmpAddress1 VARCHAR(150);
dcl-s tmpAddress2 VARCHAR(150);

tmpAddress1 ='Schmalholzstraße 27, 86916 Kaufering';
EXEC SQL values systools.urlencode(:tmpAddress1,'UTF-8') INTO :tmpAddress2;

Damit soll dann die Google- API aufgerufen werden:

EXEC SQL DECLARE CUR01 SCROLL CURSOR FOR
select *
from XMLTABLE ('$d/GeocodeResponse/result/geometry/location'
passing xmlparse(document(
systools.httpgetclob(
'https://maps.googleapis.com/maps/api/geocode/xml?key=' concat
'GOOGLEKEY&address=' concat
:tmpAddress2 concat
'&components=country:DE','' ))) as "d"
COLUMNS
lat decimal(15, 7) PATH 'lat',
lng decimal(15, 7) PATH 'lng'
) ;


EXEC SQL OPEN CUR01;
EXEC SQL FETCH FIRST FROM CUR01 INTO :tmpLat, :tmpLng ;
EXEC SQL CLOSE CUR01;

DSPLY (%char(tmpLat));


Was mache ich falsch ?

Gruß

andreaspr@aon.at
15-11-18, 09:06
Wo genau liegt denn das Problem?
Gibt es eine Fehlermeldung und wenn ja welche?
Hast du die HTTP-URL im Browser eingegeben und probiert ob diese überhaupt Funktioniert?
Oder liegt das Problem bei der Verarbeitung des Response XML.
Wenn ja, wie sieht das XML aus?

lg Andreas

Rainer Ross
16-11-18, 11:36
Hi Joachim,

hier die funktionierende Lösung. Den Webservice habe ich im JSON Format angesprochen. Den Key bekommst Du von der Google Developer Console



ctl-opt dftactgrp(*no) main(main);
//------------------------------------------------------------------//
// //
// Get Google Data //
// //
//----------------- //
// R.Ross 11.2018 * //
//------------------------------------------------------------------//
// SQL-Options //
//------------------------------------------------------------------//

exec sql set option datfmt=*iso, timfmt=*iso, commit=*none,
decmpt=*period, closqlcsr=*endactgrp;

//------------------------------------------------------------------//
// Main //
//------------------------------------------------------------------//
dcl-proc main;

dcl-s LocLat packed(11:8);
dcl-s LocLon packed(11:8);
dcl-s LocURL varchar(256);
dcl-s LocAddress varchar(256);

exec sql
set :LocAddress =
systools.urlencode('Bgm.-Hollweck-Straße 6, 85599 Parsdorf',
'UTF-8');

LocURL =
'https://maps.googleapis.com/maps/api/geocode/json?address=' +
LocAddress +
'&key=AaaaaaaaaaaaaaaaK_PYp2iSKKNVJow7Q3-MsmSvo' +
'&components=country:DE';

exec sql
Select Latitude, Longitude into :LocLat, :LocLon
from JSON_TABLE(
SYSTOOLS.HTTPGETCLOB(:LocUrl,''), '$'
Columns(
Latitude dec(11, 8) path '$.results.geometry.location.lat',
Longitude dec(11, 8) path '$.results.geometry.location.lng'
)
);

end-proc;
//------------------------------------------------------------------//


Viele Grüße
Rainer