Seite 1 von 1

Probleme mit dem Lesen von Daten aus API

Verfasst: Mittwoch 15. Juli 2020, 20:38
von LoahL
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.

Re: Probleme mit dem Lesen von Daten aus API

Verfasst: Mittwoch 15. Juli 2020, 21:23
von sparrow
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()

Re: Probleme mit dem Lesen von Daten aus API

Verfasst: Mittwoch 15. Juli 2020, 21:26
von __blackjack__
@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?

Re: Probleme mit dem Lesen von Daten aus API

Verfasst: Mittwoch 15. Juli 2020, 21:38
von Sirius3
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.

Re: Probleme mit dem Lesen von Daten aus API

Verfasst: Donnerstag 16. Juli 2020, 15:02
von __blackjack__
@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.