Probleme mit dem Lesen von Daten aus API

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LoahL
User
Beiträge: 2
Registriert: Freitag 8. Mai 2020, 15:39

Hallo,
ich habe versucht eine Programm zu schreiben, das ein zufälliges deutsches Nomen aussuchen soll. Ich benutze dafür die API von OpenThesaurus und mein Programm sieht bisher so aus:

Code: Alles auswählen

import requests
import random
import string
import json
print("Daten werden geladen...")
tl = []
start = 250
rb1 = random.choice(string.ascii_letters)
rb2 = random.choice(string.ascii_letters)
rb3 = random.choice(string.ascii_letters)
dreiZB = rb1+rb2+rb3
print (dreiZB)
dataLOAD = requests.get(f"https://www.openthesaurus.de/synonyme/search?q={dreiZB}&format=application/json&substring=true&substringMaxResults=250")
data = dataLOAD.json
sst = str(data["substringterms"])
for words in sst:
    term = str(data["substringterms"][word]["term"])
    if term[0] in string.ascii_uppercase:
        if not( "(" in term):
            if not(")" in term):
                if not(" " in term):
                    if not(term in tl):
                        tl.append(term)
while len(tl) == 0:
    dataLOAD = requests.get(f"https://www.openthesaurus.de/synonyme/search?q={dreiZB}&format=application/json&substring=true&substringMaxResults=250&substringFromResults={start}")
    data = dataLOAD.json
    sst = str(data["substringterms"])
    for words in sst:
        term = str(data["substringterms"][word]["term"])
        if term[0] in string.ascii_uppercase:
            if not( "(" in term):
                if not(")" in term):
                    if not(" " in term):
                        if not(term in tl):
                            tl.append(term)
    start = start + 250
print(tl)
Allerdings bekomme ich einen Fehler, wenn ich versuche das Programm auszuführen:

Code: Alles auswählen

  File "C:\Users\Example\Example\Example\Wort.py", line 15, in <module>
    sst = str(data["substringterms"])
TypeError: 'method' object is not subscriptable
Woran liegt das? Ist die JSON Datei nicht geeignet zum weiterverarbeiten? Welche anderen Lösungen gibt es? Danke schon mal im Voraus.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Hast du mal geschaut was "data" ist? Du bindest da die Methode ".json" eines Response-Objekts an den Namen. Das steht auch in der Fehlermeldung: Eine Methode kann nicht per Index angesprchen werden.
Wenn du die Methode .json stattdessen aufrufen möchtest, solltest du die (leere) Argumentliste dahinter angeben. json()
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@LoahL: Man kann bei Methoden nicht mit […] zugreifen. Was sollte das auch bedeuten‽ Das `json`-Attribut vom `Response`-Objekt ist eine Methode die man aufrufen muss um die Daten von der Methode als Rückgabewert zu bekommen. Das dann in eine Zeichenkette zu wandeln und eine Schleife über die einzelnen Zeichen ist danach dann auch sowas von Banane. Wie kommt man auf solche Ideen?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Man benutzt keine Abkürzungen. Was soll denn rb bedeuten, oder die drei ZB? Variablennamen schreibt man auch komplett klein. Man benutzt bei requests das params-Argument, statt Queryparameter mit Stringformatierung irgendwie in eine URL hineinzuformatieren.
json ist eine Methode und muß auch aufgerufen werden.
`substringterms` enthält eine Liste. man arbeitet nicht mit der String-Repräsentation der Liste.
Die for-Schleife ist dann auch ziemlich unsinnig. Und der Zugriff mit einzelnen Buchstaben auf die Liste auch.
`not` ist keine Funktion, die Klammern daher überflüssig.
In der while-Schleife wiederholt sich dann der Code, das würde man wohl alles in einer Schleife lösen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@LoahL: Warum machst Du das denn und warum *so*?

Ausserdem kann man die Daten dort auch gesamt in Form einer Textdatei oder eines Datenbankabzugs herunterladen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten