Seite 2 von 2

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Dienstag 13. Januar 2015, 14:05
von Sirius3
@SeriousRuffy: Du hast hier einen json-kodierten String, den Du wieder mit "json.loads" in ein Dictionary umwandeln kannst.

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Dienstag 13. Januar 2015, 14:46
von SeriousRuffy
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)



Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Dienstag 13. Januar 2015, 15:26
von Sirius3
@SeriousRuffy: wenn es richtigt wäre, könntest Du es ja ausprobieren und müßtest nicht fragen.

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Dienstag 13. Januar 2015, 15:35
von SeriousRuffy
Jep, war eine blöde Frage;)

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)

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Mittwoch 14. Januar 2015, 14:43
von SeriousRuffy
Hallo zusammen, habe nun grad ein anderes Problem, wo ich nicht weiterkomme

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))
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?

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Mittwoch 14. Januar 2015, 15:16
von Hyperion
SeriousRuffy hat geschrieben: Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?
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 besprochen :-)

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

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Montag 19. Januar 2015, 14:54
von SeriousRuffy
Hyperion hat geschrieben:
SeriousRuffy hat geschrieben: Könnt ihr mir Tipps geben, wie ich darauf zugreifen kann?
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 besprochen :-)

(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:)

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Montag 19. Januar 2015, 15:08
von Hyperion
Die folgenden Ausssagen widersprechen sich:
SeriousRuffy hat geschrieben: Habe das Tutorial durchgearbeitet:)
Mittlerweile weiß ich Bescheid wie ich darauf zugreifen kann, aber komme trotzdem leider nicht weiter
SeriousRuffy 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.
Entweder Du weisst darüber Bescheid, dann kannst Du den Zugriff auch programmieren, oder aber nicht ;-)

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?

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Montag 19. Januar 2015, 17:19
von SeriousRuffy
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

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"])
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.

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Montag 19. Januar 2015, 20:12
von Hyperion
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:

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'
Ehrlich, ist das jetzt so schwer? Es sind doch nur genau *zwei* verschiedene Arten des Zugriffs, wobei diese syntaktisch sogar identisch sind...

Re: Request mehrmals durchführen, wie for Schleife benutzen?

Verfasst: Dienstag 20. Januar 2015, 15:49
von SeriousRuffy
Danke für dein Feedback!:)