Web API eine Zip-Datei öffnen?Hallo zusammen,
Ich arbeite mit einem Kunden, der Daten von einer Web-API erhält, die die Daten in einem ZIP-Format an den Benutzer sendet. Es ist mir gelungen, herauszufinden, wie der Standard von XML im Archiv in CSV geändert werden kann, aber ich stehe immer noch vor der Herausforderung, die Daten in JMP anstelle des Download-Ordners abrufen zu lassen.
Daten kommen von:
Mit dem Webbefehl werden die Daten schön heruntergeladen. Für den Kunden wäre es jedoch nur dann wirklich nützlich, wenn die Daten von der Web-API in JMP übertragen werden. @Craige_Hales hatte einige großartige Beiträge, die mich weiter unten im Run Program () - und cURL-Pfad zeigen:
Ich stehe jedoch immer noch fest. Vielleicht muss ich mehr über die Anweisung zum Ausführen des Programms lesen oder die cURL-Optionen besser verstehen.
/* generating a start time string for query injection */
starttime = "20160418T07:00-0000";
startdatetime = "&startdatetime=" || starttime;
If( starttime == "",startdatetime = "");
/* generating a end time string for query injection */
endtime = "";
enddatetime = "&enddatetime=" || endtime;
If( endtime == "",enddatetime = "");
/* FILENAME */
FILENAME = "CURR_LMP_GRP";
// CAISO (california energy pricing API)
oasis = "http://oasis.caiso.com/oasisapi/";
query = "GroupZip?groupid="|| FILENAME || startdatetime || "&version=1&resultformat=6";
url = oasis || query;
// download the data
web(url);
// the goal is to directly pull the item into JMP
/* RunProgram to pull the table into JMP (taken from a Craig Hales Post) */
If( HostIs("Windows"),
data = RunProgram(
executable( Convert File Path( "$desktop", windows ) || "curl.exe" ),
options( "-k -s --basic " || url ),
readfunction( "blob" )
);
, // else mac version
data = RunProgram(
executable( "/usr/bin/curl" ),
options( {"-k", "-s", "--basic", url} )
, readfunction( "blob" )
);
);
try( dt = open(data, "text"); error="", error=exception_msg; dt=empty() );
show(dt,error);
Es gibt auch eine mögliche Erweiterbarkeit dieses Problems für uns. Denken Sie an die Demo-Fähigkeit, Amazon Web-API für Kundenbewertungen zu kratzen. Starten Sie das Programm () und a Python-Skript könnte den Trick tun.
--Nat
Re: Web API öffnet eine ZIP-Datei?Das Schreiben auf die Festplatte zu vermeiden, bevor ich eine JMP-Datei habe, war in der Tat meine Absicht. Danke für die Einsicht!
Re: Web API öffnet eine ZIP-Datei?Das erste zu öffnende Argument ist normalerweise eine Zeichenfolge ... der * Name * einer Datei. Wenn es sich um ein Blob handelt, behandelt open es so, als wäre es der * Inhalt * einer Datei, aber es gibt keine Erweiterung (.jmp usw.) ). (Intern schreibt open möglicherweise den Blob an einen temporären Ort, abhängig davon, welches Subsystem das Open ausführt. Das Quellenskript Öffnen ("/ 000000002A75C3D0 /" ... sagt mir, dass es NICHT auf die Festplatte geschrieben wurde, worauf Sie hoffen.)Re: Web API öffnet eine ZIP-Datei?Nochmals vielen Dank Craige!
Nachfolgend finden Sie ein vollständiges JSL-Beispiel mit den vorgeschlagenen Elementen.
/* generating a start time string for query injection */
starttime = "20160418T07:00-0000";
startdatetime = "&startdatetime=" || starttime;
If( starttime == "",startdatetime = "");
/* generating a end time string for query injection */
endtime = "";
enddatetime = "&enddatetime=" || endtime;
If( endtime == "",enddatetime = "");
/* FILENAME */
FILENAME = "CURR_LMP_GRP";
// CAISO (california energy pricing API)
oasis = "http://oasis.caiso.com/oasisapi/";
query = "GroupZip?groupid="|| FILENAME || startdatetime || "&version=1&resultformat=6";
url = oasis || query;
//open the zip download which may have multiple files
za = open( url, "zip"); // 2nd zip important!
zaList = za << dir; //get a list of the files in the archive
for( i = n items(zaList), i > 0, i--,
blob = za<<READ></READ>
Die Faszination, dass das Angeben des Formats (BLOB) die Funktion des Öffnungsbefehls aktiviert, das Format (Text) jedoch nicht.
Re: Web API öffnet eine ZIP-Datei?try(deletefile("$temp/deleteme.zip"));
za = open("$temp/deleteme.zip","zip");
member = za<<WRITE></WRITE>
Mit einem Klecks öffnen. Verwenden Sie charToBlob (), wenn Sie keinen Blob haben.
Re: Web API öffnet eine ZIP-Datei?Im Folgenden wird eine Textdatei zum Öffnen erstellt, aber ich kann mir nicht helfen, aber es sollte ein besserer Weg sein.
Save Text File("$TEMP/" || FILENAME || Char(i) || ".txt",txt);
open("$TEMP/" || FILENAME || Char(i) || ".txt");
--Nat
Re: Web API öffnet eine ZIP-Datei?Danke, Craig!
Das hat mich fast bis dorthin gebracht. Ich hätte schwören können, dass ich zip als Argument in der Open-Anweisung ohne Erfolg versucht habe (die Chancen sind unpassender Fall oder String im Gegensatz zu nicht), aber mit Ihrem Beispielcode konnte ich die Daten tatsächlich einlesen lassen!
//open the zip download
za = open( url, "zip"); // 2nd zip important!
zaList = za << dir; //get a list of the files in the archive
for( i = n items(zaList), i > 0, i--,
txt = za<<READ></READ>
Mein nächster Schritt ist das Konvertieren von TXT in eine Tabelle.
Re: Web API öffnet eine ZIP-Datei?versuche so etwas:
za = offen (" http://someurl.that.downloads.a.zip "," zip "); // 2. zip wichtig!
show (za << Mitglieder);
txt = za << read ("member1"); // Name aus der Liste oben
za ist das ZipArchive-Objekt im Skriptindex. Die URL endet nicht mit .zip, sondern muss eine ZIP-Datei herunterladen.