PDA

View Full Version : HTTPS Seiten vom System I aufrufen



HWeber
17-05-19, 10:06
Hallo,

ich möchte vom System I google maps aufrufen, weil ich eine Entfernungsberechnung per Postleitzahl Von / Bis machen möchte.

Nun habe ich bereits gefunden, das mit SQL RPG das aufrufen kann.

Wie bekomme ich den API Key und kann ich einfach ein RPG Programm mit SQL programmieren, wie unten folgt.

Ich bitte um Hilfe.

Siehe Beispiele unten:

<code class="plain">https://maps.googleapis.com/maps/api/distancematrix/xml?origins=33397 Lange Str. 2+DE&destinations=33098 Marienstr. 29+DE&mode=driving&language=de-DE&sensor=</code><code class="functions">false</code><code class="plain">&key={YOUR-API-KEY}</code>



<code>exec sql values SYSTOOLS</code><code>.</code><code>HTTPGETCLOB</code><code>(</code>
<code>'https://maps.googleapis.com/maps/api/geocode/xml?address=' </code><code>concat </code>
<code> systools</code><code>.</code><code>urlencode</code><code>(</code><code>'Schmalholzstraße 27, 86916 Kaufering'</code><code>,</code><code>'UTF-8'</code><code>) </code><code>concat</code>
<code>'&components=country:DE'</code><code>,</code><code>''</code><code>) </code><code>into </code><code>:</code><code>result</code><code>; </code>

prsbrc
17-05-19, 10:42
Hallo.

Diesen Key bekommst du wenn man sich bei Google anmeldet:
https://developers.google.com/maps/documentation/embed/get-api-key

Natürlich kann man ein RPG mit SQL programmieren.
Schau dich mal im Internet um.
Es gibt mittlerweile viele Beispiele im Internet.
Unter anderem https://www.rpgpgm.com

Tipp: Ich persönlich würde aber abraten diese HTTPGETCLOB oder HTTPGETBLOB immer interaktiv ausführen zu lassen da sie für jede Sitzung eine JVM im Hintergrund starten.
Besser wäre es diese Angelegenheiten in den Hintergrund sprich Batch zu verbannen.

HWeber
17-05-19, 10:55
Danke für die Info, werde das ausprobieren.

Es wird sich um einen Batch Job handeln.

Rainer Ross
17-05-19, 11:00
Hallo,

mit HTTPGETCLOB sieht das Statement so aus. Die beiden Adressen müssen URL-Encoded werden. Das geht mit URLENCODE




Values SYSTOOLS.HTTPGETCLOB
('https://maps.googleapis.com/maps/api/distancematrix/xml?origins=33397+Lange+Str.+2+DE&destinations=33098+Marienstr.+29+DE&mode=driving&language=de-DE&key=deinKey',
''
);


Ergebnis




<?xml version="1.0" encoding="UTF-8"?>
<DistanceMatrixResponse>
<status>OK</status>
<origin_address>Lange Str. 2, 33397 Rietberg, Deutschland</origin_address>
<destination_address>Marienstraße 29, 33098 Paderborn, Deutschland</destination_address>
<row>
<element>
<status>OK</status>
<duration>
<value>2188</value>
<text>36 Minuten</text>
</duration>
<distance>
<value>28748</value>
<text>28,7 km</text>
</distance>
</element>
</row>
</DistanceMatrixResponse>



Wenn man Bedenken wegen der JVM hat, dann geht es auch mit den AXIS-Tools, mit cURL (ist unter 5733OPS kostenlos verfügbar) oder mit den HTTP-Tools von Scott Klement

Herzliche Grüße
Rainer

Rainer Ross
17-05-19, 11:25
Die zweite Variante habe ich gleich mit dem Parsen der Werte verbunden



SELECT DauerValue, DauerText, EntfernungValue, EntfernungText FROM
XMLTABLE('DistanceMatrixResponse/row/element' PASSING
XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB(
'https://maps.googleapis.com/maps/api/distancematrix/xml?origins=33397+Lange+Str.+2+DE&destinations=33098+Marienstr.+29+DE&mode=driving&language=de-DE&key=deinKey',''
))
COLUMNS
DauerValue VARCHAR(20) PATH 'duration/value',
DauerText VARCHAR(20) PATH 'duration/text',
EntfernungValue VARCHAR(20) PATH 'distance/value',
EntfernungText VARCHAR(20) PATH 'distance/text'
);



Ergebnis



DauerValue DauerText EntfernungValue EntfernungText
2188 36 Minuten 28748 28,7 km