Python EAN-Abfrage funktioniert nicht

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
Python123.py
User
Beiträge: 12
Registriert: Freitag 20. Dezember 2019, 12:39

Hallo,
ich habe gestern aus Spaß versucht, eine Abfrage zu programmieren, die auf eine EAN-API zugreift.
Leider funktioniert diese nicht.
Ich habe versucht, diese Abfrage in eine JSON-Datei zu packen, bekomme aber jedes mal einen Error.

Folgenden Error erhalte ich:

Code: Alles auswählen

Traceback (most recent call last):
  File "/Users/leon/PycharmProjects/ean_api.py", line 28, in <module>
    data = request.json()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)

Das steht auf der Website:
War die Abfrage erfolgreich, so erhalten Sie Daten im Textformat (MIME-Typ text/plain) zurück.
Hier ist mein Code:

Code: Alles auswählen

import json
import requests

userid = "&queryid=400000000"
# url sample: http://opengtindb.org/?ean=[ean]&cmd=query&queryid=[userid]

base_url = "http://opengtindb.org/?ean="
query = "&cmd=query"

while True:
    print("Welcome to the EAN Database!")
    print()
    print("1: Search for API")
    print("2: Exit")
    choice = input("> ")

    if choice == "2":
        break

    if choice == "1":
        print("Enter the EAN Number")
        print()
        ean = input("> ")
        ean_call = base_url + ean + query + userid
        request = requests.get(ean_call)
        print(request)
        data = request.json()
        print(data)
        data = data['body']
        print(ean)
        print(ean_call)


Kann mir vielleicht jemand weiterhelfen?

Ich wünsche noch einen schönen Abend! :)

Mit freundlichen Grüßen
Leon
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Python123.py: und wie bist Du auf die Idee gekommen, dass das, was da zurückkommt im JSON-Format ist? Wo doch die Webseite von text/plain spricht?

Statt die URL mit + zusammenzustückeln, solltest Du das params-Argument von requests.get benutzen. json wird importiert aber nicht benutzt. Das was requests.get zurückliefert ist auch kein `request` sondern ein `response`.
Zuletzt geändert von Sirius3 am Montag 24. Februar 2020, 18:49, insgesamt 1-mal geändert.
Python123.py
User
Beiträge: 12
Registriert: Freitag 20. Dezember 2019, 12:39

Sirius3 hat geschrieben: Montag 24. Februar 2020, 18:47 @Python123.py: und wie bist Du auf die Idee gekommen, dass das, was da zurückkommt im JSON-Format ist? Wo doch die Webseite von text/plain spricht?

Statt die URL mit + zusammenzustückeln, solltest Du das params-Argument von requests.get benutzen. json wird importiert aber nicht benutzt.

Hallo,
ich dachte, dass es als JSON-Format gemacht werden soll.
Wie funktioniert der params-Befehl?
Kenne den leider nicht, da ich noch nicht allzu lange mit Python arbeite :)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Denken hilft nicht viel, wenn auf der Homepage ja eindeutig etwas anderes steht.

Du hast schon die Dokumentation gelesen, bevor Du mit requests losgelegt hast?
https://2.python-requests.org/en/v2.9.1 ... uickstart/
Antworten