bundesAPI / deutschland

Die wichtigsten APIs Deutschlands in einem Python Paket.
Apache License 2.0
1.23k stars 67 forks source link

destatis - Ergebnis?! #117

Open jhums opened 1 year ago

jhums commented 1 year ago

` import time from deutschland import destatis from pprint import pprint from deutschland.destatis.api import default_api

with destatis.ApiClient() as api_client:

Create an instance of the API class

api_instance            = default_api.DefaultApi(api_client)
username                = "xxx"
password                = "xxx"
name                    = "45341-0102"    
area                    = "all" 
compress                = "false"
transpose               = "false" 
startyear               = "startyear_example" 
endyear                 = "endyear_example" 
timeslices              = "timeslices_example" 
regionalvariable        = "regionalvariable_example"
regionalkey             = "regionalkey_example"
classifyingvariable1    = "classifyingvariable1_example" 
classifyingkey1         = "classifyingkey1_example" 
classifyingvariable2    = "classifyingvariable2_example" 
classifyingkey2         = "classifyingkey2_example" 
classifyingvariable3    = "classifyingvariable3_example"
classifyingkey3         = "classifyingkey3_example" 
job                     = "false" 
stand                   = "01.01.1970 01:00" 
language                = "de" 
format                  = "csv"

try:
    api_instance.table(username=username, password=password, name=name, area=area, compress=compress, transpose=transpose, startyear=startyear, endyear=endyear, timeslices=timeslices, regionalvariable=regionalvariable, regionalkey=regionalkey, classifyingvariable1=classifyingvariable1, classifyingkey1=classifyingkey1, classifyingvariable2=classifyingvariable2, classifyingkey2=classifyingkey2, classifyingvariable3=classifyingvariable3, classifyingkey3=classifyingkey3, job=job, stand=stand, language=language)
except destatis.ApiException as e:
    print("Exception:")
    print(e)

` Ok... analog zum Standard konfiguriert - Abfrage geht fehlerfrei durch.

Wahrscheinliche eine dumme Frage, aber wie komme ich an das Ergebnis? :)

wirthual commented 1 year ago

Hi,

wenn der API call sollte ein Result object zurueck geben, also so:

res =  api_instance.table(username=username, password=password, name=name, area=area, compress=compress, transpose=transpose, startyear=startyear, endyear=endyear, timeslices=timeslices, regionalvariable=regionalvariable, regionalkey=regionalkey, classifyingvariable1=classifyingvariable1, classifyingkey1=classifyingkey1, classifyingvariable2=classifyingvariable2, classifyingkey2=classifyingkey2, classifyingvariable3=classifyingvariable3, classifyingkey3=classifyingkey3, job=job, stand=stand, language=language)

print(res)

Allerdings benoetigt man ein Username und ein Passwort soviel ich weis.

PickleRiiiick commented 5 months ago

Ich bekomme nur 'None' als Ergebnis. Ein funktionierendes Beispiel wäre womöglich hilfreich.

NiklasPrahl commented 1 week ago

@wirthual Ich habe dieses Problem ebenfalls mit allen Schnittstellen, die ich ausprobiert habe, obwohl meine Login-Daten über curl einwandfrei funktionieren.

wirthual commented 1 week ago

Hi @NiklasPrahl, kannst du den curl command und dein code teilen?

NiklasPrahl commented 1 week ago

Hi @wirthual,
gerne!

Anfrage:
curl -X GET "https://www-genesis.destatis.de/genesisWS/rest/2020/helloworld/logincheck?username=MEINUSERNAME&password=MEINPASSWORT&language=de"

Aktuelle Beispielantwort:
{"Status":"Sie wurden erfolgreich an- und abgemeldet! Bei mehr als 3 parallelen Requests wurden länger als 15 Minuten laufende Requests beendet.","Username":"MEINUSERNAME"}%

Das scheint also zu funktionieren und in der Regel klappt es auch mit get-requests in Kombination mit JSON-Files.

Hier nun einer der Codeblöcke, die ich testweise gemäß der Dokumentation übernommen und angepasst habe:


import time
from deutschland import destatis
from deutschland.destatis.api import default_api
from pprint import pprint
# Defining the host is optional and defaults to https://www-genesis.destatis.de/genesisWS/rest/2020
# See configuration.py for a list of all supported configuration parameters.
configuration = destatis.Configuration(
    host = "https://www-genesis.destatis.de/genesisWS/rest/2020"
)

# Enter a context with an instance of the API client
with destatis.ApiClient() as api_client:
    # Create an instance of the API class
    api_instance = default_api.DefaultApi(api_client)
    username = "MEINUSERNAME" # str 
    password = "MEINPASSWORT" # str 
    language = "de" # str |  (optional) if omitted the server will use the default value of "de"

    # example passing only required values which don't have defaults set
    # and optional values
    try:
       print(api_instance.logincheck(username=username, password=password, language=language))
    except destatis.ApiException as e:
        print("Exception when calling DefaultApi->logincheck: %s\n" % e)

Die Rückgabe ist immer "None", egal ob ich find, tablefile oder andere Funktionen nutze. Die optionalen Variablen habe ich auch alle testweise einmal gesetzt und meine Beispiele mit JSON und curl gegengeprüft (dort funktioniert das dann wie erwartet). Auch den Wert vorher in eine Variable zu legen bringt nichts. Ich habe mich unmittelbar an der Dokumentation orientiert, bzw. zum testen die Syntax schlussendlich kopiert und nur minimal mit den nötigen Werten angepasst und es klappt trotzdem nicht. Es lädt eine Weile und dann wird wieder "None" zurückgegeben.

wirthual commented 1 week ago

Hi, danke fuer die detailiierte Beschreibung. Ich kann das beschriebene Verhalten reproduzieren.

Der code is auto generiert von der Beschreibung. Der openapi generator den wir benutzen ist version 6, es gibt jedoch eine neue Major version 7. Es waere interesant zu sehen if die neue version des generierten Codes hier besser funktioniert.

https://github.com/OpenAPITools/openapi-generator

Ansonsten gibt es hier auch ein Python based generator den es sich lohnt auszuprobieren: https://github.com/openapi-generators/openapi-python-client