Seite 1 von 1

Python EAN-Abfrage funktioniert nicht

Verfasst: Montag 24. Februar 2020, 18:38
von Python123.py
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

Re: Python EAN-Abfrage funktioniert nicht

Verfasst: Montag 24. Februar 2020, 18:47
von Sirius3
@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`.

Re: Python EAN-Abfrage funktioniert nicht

Verfasst: Montag 24. Februar 2020, 18:49
von Python123.py
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 :)

Re: Python EAN-Abfrage funktioniert nicht

Verfasst: Montag 24. Februar 2020, 18:51
von Sirius3
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/