J(a)SON is killing my z (fetch data semi automatically?)

Ah while ago I started to fetch specific kill reports from zKillboard (using the zKillboard API) which I represent in a viewing friendly format here.

The bare process, though, is a mess, involves Google Spreadsheets (with a importJSON script) and has the major flaw that empty values (like allianceID/allianceName) break the data collected.

An example is a table I built that contains: Losses to Drifters

The formula to fetch the data from zKillboard is initiaded from Cell zkillboard-fetch!A1 =if(query!A2="","nil!",ImportJSON(query!B$2&query!B$3,query!B$5:B$16,"noHeaders"))

if(query!A2=““,“nil!“ ImportJSON query!B$2 query!B$3 query!B$5:B$16 noHeaders
toggles the actual reuquest to zkillboard Imports the resulting json as a table row https://zkillboard.com/api/kills/shipID/
(groupID for other data collections)
34495/ /killID
/killTime
/solarSystemID
/victim/shipTypeID
/victim/characterID
/victim/characterName
/victim/corporationID
/victim/corporationName
/victim/allianceID
/victim/allianceName
/victim/damageTaken
/zkb/totalValue
prevents column headers from being added to each array called

zKillboard returns 200 sets of data for each result. To get a batch of several results, I repeat this call in cell A202 of the table that collects the data,

if(query!A2=““,“nil!“ ImportJSON query!B$2 query!B$3 query!B$4 A201 query!B$5:B$16 noHeaders
toggles the actual reuquest to zkillboard Imports the resulting json as a table row https://zkillboard.com/api/kills/shipID/ 34495/ beforeKillID/ last killID of previous call /killID
/killTime
/solarSystemID
/victim/shipTypeID
/victim/characterID
/victim/characterName
/victim/corporationID
/victim/corporationName
/victim/allianceID
/victim/allianceName
/victim/damageTaken
/zkb/totalValue
prevents column headers from being added to each array called

I download the results as a csv file which I then import into an SQL database. Currently, I already collected quite some data.

But this script will break each time there’s a result that has blank entries for one of the required xPath values, which is very likely to happen (for allianceID and allianceName in this example):

Jamyl was in no alliance
Jamyl was in no alliance

The importJSON script simply repeats the values of the previous dataset. That’s bad (just like my non existing coding skills).

My assumption is, that the best way to get valid data as its saved at zKillboard involves some python code. And that’s where I’m lost.

What do I need?

 

  • A way to sequentally fetch kill reports available on zKillboard (from newest or before/after a given killID/startDate/endDate)
  • Limited to one or several shipIDs/groupIDs
  • With all the data alailable from zKillboard
  • Formatted as CSV

 

I’m pretty sure that this is possible, but its way beyond my knowledge. Is anybody able to (and willing to) help me out here?
As another obstacle, my currently state of health also is pretty limited, but that’ll turn better soon, I guess, and only is a limiting factor of the time it takes me to achieve stuff.

4 Gedanken zu „J(a)SON is killing my z (fetch data semi automatically?)

    1. Das Problem bestand bei meiner Verarbeitung der von zKillboard gelieferten Daten (die sind ok).
      Das Script, mit dem ich bei Google Spreadsheets die Daten sequentiell in eine Tabelle schiebe (aus der eine CSV wird) hatte einen Fehler. Leere Felder (betrifft AllianceID/Name) wurden mit den Werten der vorhergehenden Killmail gefüllt (hier erkennbar). Ing Harm hat mich gestern gerettet und den Fehler im Script gefunden. Jetzt sind in Einträgen ohne Wert auch keine Werte mehr. So kann ich die Kill Daten mit den richtigen Informationen noch einmal korrekt erfassen.

      Der Weg über Google Spreadsheet -> zKillboard json Daten -> CSV ist Folge „meines Problem“.

      Einfacher wäre es, wenn ich schlicht und einfach die json Daten sequentiell lade (letzte killID eines query -> erste ID des nächsten usw.) und in eine ans Netz gehängte SQL Datenbank einfüge.
      Nur habe ich die Daten lokal bei mir auf dem PC in einer MS SQL Datenbank gespeichert und erstelle darauf die Auswertungen. Deshalb der ganze Aufwand mit dem Spreadsheet Umweg – und wegen meiner bescheidenen Programmierkenntnisse in vielen Bereich /o\

      1. Freut mich, dass sich das Problem erledigt hat.

        Wegen der Datenbank: du könntest zum Beispiel mit WAMP immer, wenn du Daten in die DB einfügen willst, lokal einen Server starten und die Skrips zum einfügen so abändern, dass sie nicht auf einen Server im Netzwerk sondern auf den localhost zugreiffen.

        Bei Fragen einfach EVE Mail 🙂

        Grüsse

Kommentare sind geschlossen.