Web-Api per Json oder/und Http abfragen
#1
Hallo zusammen,

ich beschäftige mich in letzter Zeit intensiver mit ODBC und SQL abfragen in der Arbeit und wollte das jetzt auch privat umsetzen. 

Ich spiele gerne das Spiel Guild Wars2 wobei ich zum spielen selbst kaum Zeit finde sondern hauptsächlich dort Waren kaufe und verkaufe und digitales Gold anhäufe (ja der Mensch und seine triebe... :19:).
Bisher habe ich über eine Fan-Schnittstelle die Daten gezogen, wobei ich ein vorgefertigtes Excel benutzt hatte. Da der Fan-Server abgeschaltet wird muss ich das Zepter in die eigene Hand nehmen.

Guild Wars 2 bietet über eine Web-Api an Informationen aus dem Spiel zu holen. 

Für mich von Interesse:
Wie sieht die Api aus?
https://wiki-de.guildwars2.com/wiki/API

Hilfreiches Tool (zumindest für mich)
http://apps.keeky.net/Guild-Wars-2-API-E...e/listings

Was mir geholfen hat:
https://gw2developers.github.io/forum-ba...ng-Co-API/


Was habe ich bisher erreicht?
Ich kann ein Json erstellen und bei Excel per Query als Tabelle einfügen.
Ich kann bei Listings einzelne Items abfragen aber bekomme Sie nicht in Excel rein. 
Ich kann Codeschnippsel zusammen kopieren über die 2 Links dir mir geholfen haben aber so richtig weiter komm ich nicht. 
Im großen und ganzen hat sich bisher alles nach Fehlschlag angefühlt. 

Wo will ich hin?
Ich hätte gerne eine Excel in dem pro Arbeitsblatt eine Abfrage auf die 3 jeweils oben genannten API's machen kann und dann in Excel verformeln kann.

Wie komme ich hin?
Ich wäre froh wenn ich es selbst erstmal schaffe NUR diese API https://api.guildwars2.com/v2/commerce/prices in Excel abzufragen.
Als nächstes dann die anderen schnitt stellen. 

Zum Testen:
Ich habe auf einem Free2play Account eine Test-Api generiert. 
6919FC2D-B6FD-0D4F-B6B0-3160E8E3D49D5CFF009F-FE41-4D82-B364-BF77FC6ECBE3
Ich schaue das ich heute Abend noch einen Charakter erstelle und ein paar Daten generiere. Meine holde zwingt mich aber jetzt zum Küchen-spülen Wink

Ich danke euch für eure Hilfe. Ich bin über jeden Link oder einen ähnlichen Fall erfreut an dem ich lernen kann. 

Viele Grüße

Stefan
Top
#2
Hallo,

um JSON-Daten abzurufen, bietet sich generell z.B. ab Excel 2016 PowerQuery an: Daten / Daten abrufen und transformieren / Aus dem Web.
Ich würde empfehlen, das mal auszuprobieren. Was eine Authentifizierung per API-Token betrifft, würde ich auf diesen englischen Artikel
verweisen: https://blog.crossjoin.co.uk/2014/03/26/...wer-query/ (Ungetestet, mit der Guild Wars2 API).

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#3
Wenn ich Prices abfrage bekomme ich nur folgendes:

[
  24,
  68,
  69,
  70,
  71,
  72,
  73,
  74,
  75,
  76,
  77,
  78,
  79,
  80,
  usw. 

Das sind glaube ich nur die Items-ID's aber eigentlich müsste er mir ja noch Item-Name Verkaufspreis, Einkaufspreis usw. rausgeben. Tut er aber nicht. 

wenn ich z.B. das hier abfrage, bekomme ich:

https://api.guildwars2.com/v2/commerce/prices?id=24

{
 "id": 24,
 "whitelisted": false,
 "buys": {
   "quantity": 68250,
   "unit_price": 263
 },
 "sells": {
   "quantity": 60909,
   "unit_price": 584
 }
}


Aber dann habe ich ja nur eine ID von 50.000 abgefragt.  ID=0 bringt gar kein ergebnis zurrück. Wie bekomme ich alle ID's?
Und auch die Abfrage von Oben bekomme ich nicht schön in Excel rein. Ich glaube da fehlen mir einfach Grundlagen. Ich nutze auch Excel 2016 erst seit 6 Tagen.
Top
#4
Hallo,

Aber jede ID aus dem Listing ist eine Gegenstands ID. Du kannst mit der Enstsprechenden ID und der API dann auf den Gegenstand zugreifen und dir die Daten ziehen.

Man müsste sich jetzt wesentlich mehr in die API Doku einlesen um die Beziehungen zu verstehen.
Suchst du grundsätzlich alles oder nur nach bestimmten Gegenständen. Daraufhin muss man den HTTP Request bauen und absenden und den Reponse verarbeiten.

Ich glaube das dies mit Excel recht schwer sein wird.
Top
#5
Hallo MajorOli,

eigentlich würde ich gerne alles abrufen wollen. Hatte es mir ähnlich wie eine SQL-Abfrage vorgestellt, aber diese anmahne ist wohl falsch. Ich glaube diese Abfrage werde ich dann wieder von einer Fan-Datenbank beziehen müssen. 



Dann gehe ich zum nächsten Punkt über und versuche die Account gebundenen Daten abzufragen für die der API-Key benötigt wird.
Das mache ich wahrscheinlich am Wochenende. Ich melde mich dann nochmal ob ich es geschafft habe oder nicht Smile
Top
#6
Hallo,

mit Python ist es recht einfach json-Formate abzufragen und auszuwerten. Ein lauffähiger Code:

Code:
import requests
import json

no = 2
c_url = 'https://cc.the-morpheus.de/challenges/' + str(no) + '/'
s_url = 'https://cc.the-morpheus.de/solutions/' + str(no) + '/'

resp = requests.get(c_url)

task = json.loads(resp.text)
k = task["k"]
liste = task["list"]

if (no = 2):
    print (liste[0:5])
    for i in range(len(liste)):
        if liste[i] == k:
            solution = i
            break

data = {"token": solution}
result = requests.post(s_url, json.dumps(data))

print (result.text)

Eine Anpassung auf deine Fragestellung müßtest du selbst hinbekommen.

mfg
Top
#7
Hallo,

es gibt zwar Themen, bei denen ich aus Prinzip nicht antworte (z.B. Videospiele), aber Python interessiert mich im Moment.

Dieser Code liest das erste Beispiel aus, die ID kann auch varibel gemacht werden:

Code:
import requests
import json

url = 'http://api.guildwars2.com/v2/commerce/listings/19684'

resp = requests.get(url)
js = json.loads(resp.text)
id = js['id']
buys = js['buys']
sell = js['sells']

print (id)
#print (buys)
print ('\n ------- \n')
for i in range(len(buys)):
        print (buys[i])
print ('\n ------- \n')
for i in range(len(sell)):
        print (sell[i])

Etwas Fleißarbeit ist noch nötig.

mfg
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste