PDA

View Full Version : Datei aus dem Web laden und im IFS speichern



sargejogi
11-01-17, 10:40
Hallo zusammen,

gibt es eine Möglichkeit, mit Bordmitteln, eine Datei aus dem Internet ins IFS zu laden ?
Normal würde ic hdas mit CURL oder WGET machen, aber beides ist auf der Maschine nicht verfügbar.

mfg
jogi

andreaspr@aon.at
11-01-17, 10:51
WGET kannst du dir installieren. Hab ich auch auf unserem System mal gemacht.
Anleitung dafür findest du im Internet.

Ansonsten könntest du dir auch die SQL Funktionen in der SYSTOOLS anschauen (z.B. HTTPGETCLOBVERBOSE).
Mit denen sollte es möglich sein den Response als BLOB in eine Temporäre Tabelle zu schreiben und diese kannst du dann ins IFS exportieren.

Für den HTTP Aufruf selbst gibt es sowohl im Internet als auch im Forum Beispiele.
So wie dieses hier von Rainer Ross http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/19548-REST-Webservices-Verwendung-von-SYSTOOLS?p=97034#post97034

lg Andreas

Rainer Ross
11-01-17, 14:05
Hallo,
@Andreas, danke für den Hinweis auf den Link

Für alle, die sich für das Thema interessieren, hier der Source für den Zugriff auf den Webservice von Google Maps, incl. dem Speichern des Ergebnisses ins IFS. Das geht ab 7.1. Das Parsen von XML-Daten geht mit XML-Into. Das Parsen von JSON-Daten geht mit JSON_TABLE. Auch hier gibt es bereits Post's zum Thema.

HTTPGETCLOB ist für Character-Daten vorgesehen. Für Bilder, PDF's oder MP3 nimmt man HTTPGETBLOB. Analog verwendet man für POST-Requests HTTPPOSTCLOB und HTTPPOSTBLOB.

@Birgitta Hauser, vielen Dank für Deine hervorragende Unterstützung im Bereich SQL



ctl-opt main(main) dftactgrp(*no) option(*nounref);
//------------------------------------------------------------------//
// //
// GETHTTPCLOB from Google Maps API //
// //
//----------------- //
// R.Ross 01.2017 * //
//------------------------------------------------------------------//
// Variables //
//------------------------------------------------------------------//

dcl-s myfile sqltype(CLOB_FILE); // CLOB-File

dcl-s myurl varchar(256); // URL
dcl-s myheader varchar(256); // HTTP-Header
dcl-s query varchar(256); // QueryString

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

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

myurl = 'https://maps.googleapis.com/maps/api/geocode/xml?' +
'address=';
query = '3605 US-52, Rochester, MN';

// URL-Encoding

exec sql set :query = systools.urlencode(:query,'UTF-8');
myurl += query; // URL + QueryString

myfile_name = '/tmp/test.xml'; // StreamFile
myfile_nl = %len(%trim(myfile_name)); // NameLength
myfile_fo = SQFOVR; // FileOverwrite

exec sql values systools.httpgetclob (:myurl, :myheader)
into :myfile;

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


Herzliche Grüße

Rainer

sargejogi
12-01-17, 08:05
Hallo,

Danke für eure Antworten.
Leider läuft auf der AS400 noch 6.1 :-)
Lässt sich das dort auch zum Laufen bringen ?

LG
Jogi

Rainer Ross
12-01-17, 08:44
Dir kann geholfen werden. Für Systeme ab V4.2 gibt es die HTTPAPI von Scott Klement unter folgendem Link https://www.scottklement.com/httpapi/httpapi_zip.html

Anbei ein Beispiel-CL mit Aufruf des Google-Maps Webservice



/************************************************** *******************/
/* */
/* GET GOOGLE-MAPS XML-DATA */
/* */
/****************** */
/* R.ROSS 01.2017 * */
/************************************************** *******************/

PGM

DCL VAR(&URL) TYPE(*CHAR) LEN(256)
DCL VAR(&STMF) TYPE(*CHAR) LEN(256)

MONMSG MSGID(CPF0000)
/************************************************** *******************/
/* GET XML-DATA */
/************************************************** *******************/

CHGVAR VAR(&URL) +
VALUE('http://maps.googleapis.com/maps/api/+
geocode/xml?address=schmalholzstr. +
27,kaufering&components=country:DE')

CHGVAR VAR(&STMF) VALUE('/tmp/googmaps.xml')

HTTPAPI URL(&URL) DOWNLOAD(&STMF) DEBUG(*NONE)

CHGATR OBJ(&STMF) ATR(*CCSID) VALUE(1208)

/************************************************** *******************/
/* ENDE */
/************************************************** *******************/
ENDE: ENDPGM
/************************************************** *******************/



Herzliche Grüße

Rainer