Request mehrmals durchführen, wie for Schleife benutzen?
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
Danke für dein Feedback. Der Code müsste dann ja so aussehen, richtig?
Code: Alles auswählen
import json
import requests
response = requests.get("blabla")
json_data = json.loads(response.text)
Hallo = json_data[0]["responseBodies"][0].get("status")
print(Hallo)
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
Jep, war eine blöde Frage;)
Hat nicht auf Anhieb geklappt, aber mit Probieren bin ich auf das richtige Ergebnis gekommen:
Hat nicht auf Anhieb geklappt, aber mit Probieren bin ich auf das richtige Ergebnis gekommen:
Code: Alles auswählen
import requests
response = requests.get("blabla")
data = response.json()
Hallo = data[0]["status"]
print(Hallo)
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
Hallo zusammen, habe nun grad ein anderes Problem, wo ich nicht weiterkomme
Habe die folgende Response (abgekürzt):
debuggerLink': 'blabla',
'statusDetail': 0,
'status': 1,
'responseBodies': ['{
"diagnostic": {
"status": 200,
"elapsetime": "0.1441",
"memoryusage": "4.81MB",
"unix_timestamp": 1421241275,
"confirm": "success",
"lang": "id",
"currency": "IDR"
},
"output_type": "json",
Und jetzt möche ich gern auf den Wert "status": 200 zugreifen, der in den Response Bodies vorhanden ist. Das klappt ja nicht mit der get. Funktion, da es sich nicht um ein Dict. handelt sondern um eine Liste.
Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?
Code: Alles auswählen
import requests
counter = 0
times = 1
for r in range(times):
response = requests.get("http://192.168.1.52:8080/ws/Admin/JsonApi?partnerId=878&itemId=RANDOM_ITEM&localeCode=ID&languageCode=id&fromDate=2015/02/04&toDate=2015/02/07&roomType=7")
data = response.json()
Hallo = data[0]["responseBodies"].get("status")
print(Hallo)
if not Hallo:
counter = counter + 1
print("Missing: " + str(counter))
print("Successful: " + str(times-counter))
debuggerLink': 'blabla',
'statusDetail': 0,
'status': 1,
'responseBodies': ['{
"diagnostic": {
"status": 200,
"elapsetime": "0.1441",
"memoryusage": "4.81MB",
"unix_timestamp": 1421241275,
"confirm": "success",
"lang": "id",
"currency": "IDR"
},
"output_type": "json",
Und jetzt möche ich gern auf den Wert "status": 200 zugreifen, der in den Response Bodies vorhanden ist. Das klappt ja nicht mit der get. Funktion, da es sich nicht um ein Dict. handelt sondern um eine Liste.
Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Schau in der Doku zu Dicts und Listen nach, welche Zugriffe möglich sind. Oder noch besser: Arbeite das Tutorial dahingehend durch! Dort werden die wichtigsten Zugriffe für diese *essenziellen* Datentypen besprochenSeriousRuffy hat geschrieben: Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?

(Wirklich, das sind absolute Basics, die man für das Programmieren in Python "drauf haben" muss

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
Hyperion hat geschrieben:Schau in der Doku zu Dicts und Listen nach, welche Zugriffe möglich sind. Oder noch besser: Arbeite das Tutorial dahingehend durch! Dort werden die wichtigsten Zugriffe für diese *essenziellen* Datentypen besprochenSeriousRuffy hat geschrieben: Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?
(Wirklich, das sind absolute Basics, die man für das Programmieren in Python "drauf haben" muss)
Habe das Tutorial durchgearbeitet:)
Mittlerweile weiß ich Bescheid wie ich darauf zugreifen kann, aber komme trotzdem leider nicht weiter
Code: Alles auswählen
import requests
import json
response = requests.get("blabla")
data = response.json()
Hallo = data[0]["responseBodies"][0]
print(Hallo)
Bekomme die folgende Response:
Abgekürzt:
{"diagnostic":{"status":200,"elapsetime":"0.1851","memoryusage":"4.77MB","unix_timestamp":,"confirm":"success","lang":"","currency":""},"output_type":"json","result":[{"hotel_id":"19448661","hotel_description":"Tanah Papua menyimpan banyak kekayaan
Würde jetzt gerne auf die hotel_id oder die hotel_description zugreifen aber er sagt mir leider, das der Text zu lang ist. Ich könnte es jetzt quasi mit einem Delimiter rausfischen, aber das ist ja nicht Sinn der Sache, weil sich der Request bei jeden Zugriff ändern konnte.
Könnt ihr mir Tipps geben, wie ich weiter vorgehen kann? Wäre für jede Hilfe dankbar:)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die folgenden Ausssagen widersprechen sich:

Aber ich will mal nicht so sein: Der Wert von "result" ist eine *Liste* von Dictionaries. Ergo musst Du diese Liste durchlaufen und auf jedem Element (welches ja eben ein Dictionary ist), die gewünschten Schlüssel "hotel_id" und "hotel_description" abfragen. Ist doch ganz einfach, oder?
SeriousRuffy hat geschrieben: Habe das Tutorial durchgearbeitet:)
Mittlerweile weiß ich Bescheid wie ich darauf zugreifen kann, aber komme trotzdem leider nicht weiter
Entweder Du weisst darüber Bescheid, dann kannst Du den Zugriff auch programmieren, oder aber nichtSeriousRuffy hat geschrieben: Würde jetzt gerne auf die hotel_id oder die hotel_description zugreifen aber er sagt mir leider, das der Text zu lang ist. Ich könnte es jetzt quasi mit einem Delimiter rausfischen, aber das ist ja nicht Sinn der Sache, weil sich der Request bei jeden Zugriff ändern konnte.

Aber ich will mal nicht so sein: Der Wert von "result" ist eine *Liste* von Dictionaries. Ergo musst Du diese Liste durchlaufen und auf jedem Element (welches ja eben ein Dictionary ist), die gewünschten Schlüssel "hotel_id" und "hotel_description" abfragen. Ist doch ganz einfach, oder?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
In der Theorie komme ich ja klar, aber in der Praxis scheitert es;) Aber dennoch großen Dank für dein Feedback:) Bitte weiter um Verständnis, bin immer noch ein blutiger Anfänger
Response:
rooms': [{
'total_rate': 1275000,
'room_description': 'MataramSquareHotelberadadipusatkotalombokyangakrabdengankeramaian.HotelmewahiniberlokasidiJalanRSoepraptoNo.21AMataram,
Mataram,
Lombok.Hoteliniberdiridilokasiyangstrategisdanterletak40menitdaribandaraInternasionalLombok.MataramSquaredapatdicapaidalam15menitberkendaradariPantaiSenggigiyangberpasirputihdenganpemandanganpantaiyangindah,
HotelmoderniniterletakdisekitarobyekwisatapopulerKotaLomboksepertiPerpustakaanMataram,
MasjidAtTaqwa,
TamanBudayaMataramyangbisamasukdaftarkunjunganAnda.\n\nHotelmewahyangterdiridaritigalantaiini,
menawarkan44kamaryangberdesainminimalis.Andabisamemilihtipekamaryangsesuaidengankeinginandankebutuhan.AdaduatipekamaryangtersediayaitukamarSuperiordankamarStandard.SetiapkamarnyadilengkapidenganTV,
AC,
kotakpenyimpanan,
sepraiyangbersih,
ruangduduksantai,
danmeja.Setiapkamarmemilikikamarmandipribadiyangdidalamnyaterdapatfasilitasshowerdanperlengkapanmandigratis.AndajugabisamenikmatiWi-Figratisdisetiapkamardanseluruhareahotel.\n\nMataramSquareHoteljugamenawarkanHidanganIndonesia,
Tiongkok,
danInternasionalyangdisajikanolehMandasariRestaurant.AndabisamengisiwaktusantaidenganbermainditamanataubisajugakePantaiSenggigiyangberpasirputih.PijatdanspasiapmemanjakantubuhAndayanglelahsetelahseharianberaktifitas.Layananlaundry,
layananantar-jemputbandara,
areamerokok,
ruangbersantai,
pusatkebugarandanlayanankamar24jamdihotelinisiapmemanjakandanmenemaniAndaselamaberliburdipulauLombok.',
'photo_url': 'http: //www.tiket.com/img/business/s/q/business-square4.s.jpg',
'average_rate_per_night': 425000,
'room_id': '2245',
'room_available': '2',
'with_breakfast': '1',
'room_type': '-AksesInternet-Wifi',
Mein Problem ist, wie ich jetzt zum Beispiel an die 'room_description' komme. Bekomme es nicht hin, obwohl es einfach sein sollte, wie du es beschrieben hast.
Code: Alles auswählen
import requests
import json
response = requests.get("blabla")
data = response.json()
Hallo = data[0]["responseBodies"][0]
dic = json.loads(data[0]["responseBodies"][0])
print(dic["result"])
rooms': [{
'total_rate': 1275000,
'room_description': 'MataramSquareHotelberadadipusatkotalombokyangakrabdengankeramaian.HotelmewahiniberlokasidiJalanRSoepraptoNo.21AMataram,
Mataram,
Lombok.Hoteliniberdiridilokasiyangstrategisdanterletak40menitdaribandaraInternasionalLombok.MataramSquaredapatdicapaidalam15menitberkendaradariPantaiSenggigiyangberpasirputihdenganpemandanganpantaiyangindah,
HotelmoderniniterletakdisekitarobyekwisatapopulerKotaLomboksepertiPerpustakaanMataram,
MasjidAtTaqwa,
TamanBudayaMataramyangbisamasukdaftarkunjunganAnda.\n\nHotelmewahyangterdiridaritigalantaiini,
menawarkan44kamaryangberdesainminimalis.Andabisamemilihtipekamaryangsesuaidengankeinginandankebutuhan.AdaduatipekamaryangtersediayaitukamarSuperiordankamarStandard.SetiapkamarnyadilengkapidenganTV,
AC,
kotakpenyimpanan,
sepraiyangbersih,
ruangduduksantai,
danmeja.Setiapkamarmemilikikamarmandipribadiyangdidalamnyaterdapatfasilitasshowerdanperlengkapanmandigratis.AndajugabisamenikmatiWi-Figratisdisetiapkamardanseluruhareahotel.\n\nMataramSquareHoteljugamenawarkanHidanganIndonesia,
Tiongkok,
danInternasionalyangdisajikanolehMandasariRestaurant.AndabisamengisiwaktusantaidenganbermainditamanataubisajugakePantaiSenggigiyangberpasirputih.PijatdanspasiapmemanjakantubuhAndayanglelahsetelahseharianberaktifitas.Layananlaundry,
layananantar-jemputbandara,
areamerokok,
ruangbersantai,
pusatkebugarandanlayanankamar24jamdihotelinisiapmemanjakandanmenemaniAndaselamaberliburdipulauLombok.',
'photo_url': 'http: //www.tiket.com/img/business/s/q/business-square4.s.jpg',
'average_rate_per_night': 425000,
'room_id': '2245',
'room_available': '2',
'with_breakfast': '1',
'room_type': '-AksesInternet-Wifi',
Mein Problem ist, wie ich jetzt zum Beispiel an die 'room_description' komme. Bekomme es nicht hin, obwohl es einfach sein sollte, wie du es beschrieben hast.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was hast Du denn probiert? Wieso testest Du das nicht in einer *Shell*? Genau dafür sind REPLs gut! Hole Dir Deine JSON-Struktur oder paste sie in die Shell hinein. Dann veruschst Du Schritt für Schritt, Dich an die gewünschte Stelle zu "hangeln". Also Schlüssel-Zugriff bei Dictionaries und Index-Zugriffe bei Listen... mehr ist es doch nicht
Mal als Beispiel in ipython:
Ehrlich, ist das jetzt so schwer? Es sind doch nur genau *zwei* verschiedene Arten des Zugriffs, wobei diese syntaktisch sogar identisch sind...

Mal als Beispiel in ipython:
Code: Alles auswählen
In [1]: data = {"result": [{"foo": "foo value", "bar": "bar value"}, {"foo": "no
ch ein foo", "bar": "noch ein bar"}]}
In [2]: from pprint import pprint
In [3]: pprint(data)
{'result': [{'bar': 'bar value', 'foo': 'foo value'},
{'bar': 'noch ein bar', 'foo': 'noch ein foo'}]}
In [4]: data["result"]
Out[4]:
[{'bar': 'bar value', 'foo': 'foo value'},
{'bar': 'noch ein bar', 'foo': 'noch ein foo'}]
In [5]: data["result"][0]
Out[5]: {'bar': 'bar value', 'foo': 'foo value'}
In [6]: data["result"][1]
Out[6]: {'bar': 'noch ein bar', 'foo': 'noch ein foo'}
In [7]: data["result"][1]["foo"]
Out[7]: 'noch ein foo'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 32
- Registriert: Dienstag 16. Dezember 2014, 21:16
Danke für dein Feedback!:)