Listeneintrag zerlegen und geordent ausgeben

Code-Stücke können hier veröffentlicht werden.
Antworten
Nobody0815
User
Beiträge: 16
Registriert: Dienstag 23. Februar 2021, 21:25

Hallo,

ich habe ein Problem mit einem Listeneintrag aus einem API-Request. Die "Liste" besteht nur aus einem (Multi-)Eintrag und sieht wiefolgt aus:

'data': [{'open': 237.42, 'high': 237.92, 'low': 232.4, 'close': 234.51, 'volume': 33970433.0, 'adj_high': 237.93, 'adj_low': 232.4, 'adj_close': 234.51, 'adj_open': 237.42, 'adj_volume': 36182764.0, 'symbol': 'MSFT', 'exchange': 'XNAS', 'date': '2021-02-22T00:00:00+0000'}]

Der gesamte Inhalt zwischen den eckicken Klammern --> {...} ist der erste (und einzige) Listeneintrag --> data[0]

Ich möchte aber auf die Inhalte (Bezeichner + Wert) zugreifen können --> open: 237.42, high: 237.92, usw.
Dazu muss der Listeneintrag zerlegt werden und die Inhalte einzeln ansprechbar sein. Nur wie ... :?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast Dir doch schon selbst die Lösung gegeben:

Code: Alles auswählen

irgendwas['data'][0]['open']
Nobody0815
User
Beiträge: 16
Registriert: Dienstag 23. Februar 2021, 21:25

Du hast Dir doch schon selbst die Lösung gegeben:

Code: Alles auswählen

irgendwas['data'][0]['open']


Wenn ich das versuche, bekomme ich folgenden Fehler: "TypeError: string indices must be integers"
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann zeig Deinen wirklichen Code, der den Fehler produziert. So kann man nur sagen, dass der Type von irgendwas nicht mit dem übereinstimmt, was Du gezeigt hast.
Nobody0815
User
Beiträge: 16
Registriert: Dienstag 23. Februar 2021, 21:25

Hallo Sirius3,
danke für die Hilfe! Der Fehler saß vor dem Bildschirm. :?
Ich habe meinen Code jetzt berichtigt und bekomme auch die gewünschte Ausgabe.
Falls es interessiert, hänge ich meinen Code noch unten dran. Anmerkungen dazu sind gerne gesehen. :)

VG Nobody0815

Code: Alles auswählen

import requests
import datetime

api_key = "ab853fc5f1d44dce79078df3531da2b0" 
#Aktiencode
aktie_key = "MSFT"
#Marktidentifikationscode
exchange_key = "XNAS"
from datetime import date
date_from = date(2021, 2, 22)
date_to = date(2021, 2, 22)

# creating a http request
url = f'http://api.marketstack.com/v1/eod?access_key={api_key}&symbols={aktie_key}&exchange={exchange_key}&date_from={date_from}&date_to={date_to}'
daten = requests.get(url).json()

open = daten['data'][0]['open']
print(open)
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Importe stehen ganz oben in der Datei. Konstanten schreibt man komplett GROSS, und ein API_KEY sollte nicht veröffentlicht werden.
URL-Parameter formatiert man nicht in die URL hinein, sondern benutzt das params-Argument.

Code: Alles auswählen

import requests
from datetime import date

API_KEY = "ab853fc5f1d44dce79078df3531da2b0"
MARKETSTACK_URL = "http://api.marketstack.com/v1/eod"

def main():
    #Aktiencode
    aktie_key = "MSFT"
    #Marktidentifikationscode
    exchange_key = "XNAS"
    date_from = date(2021, 2, 22)
    date_to = date(2021, 2, 22)

    daten = requests.get(url, params=dict(
        access_key=api_key,
        symbols=aktie_key,
        exchange=exchange_key,
        date_from=date_from,
        date_to=date_to,
    )).json()

    open = daten['data'][0]['open']
    print(open)

if __name__ == "__main__":
    main()
Nobody0815
User
Beiträge: 16
Registriert: Dienstag 23. Februar 2021, 21:25

Sirius3 hat geschrieben: Mittwoch 24. Februar 2021, 20:28 Importe stehen ganz oben in der Datei. Konstanten schreibt man komplett GROSS, und ein API_KEY sollte nicht veröffentlicht werden.
URL-Parameter formatiert man nicht in die URL hinein, sondern benutzt das params-Argument.
  • Importe stehen ganz oben in der Datei. --> verstanden
  • Konstanten schreibt man komplett GROSS, --> VERSTANDEN
  • ein API_KEY sollte nicht veröffentlicht werden --> ist mir bewusst, der API-Key ist nur zum Testen
  • URL-Parameter formatiert man nicht in die URL hinein, sondern benutzt das params-Argument. --> wieder was dazugelernt
Danke für die Mühe!
Antworten