QPX Express API from Python

一个人想着一个人 提交于 2020-01-03 03:20:14

问题


I am trying to use Google's QPX Express API from python. I keep running into a pair of issues in sending the request. At first what I tried is this:

url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=MY_KEY_HERE"
values = {"request": {"passengers": {"kind": "qpxexpress#passengerCounts", "adultCount": 1}, "slice": [{"kind": "qpxexpress#sliceInput", "origin": "RDU", "destination": location, "date": dateGo}]}}
data = json.dumps(values)
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
f.close()
print(response)

based upon the code from: urllib2 and json

When I run the above code I get the following error message:

TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.

I searched for a solution and adapted my code based upon the following question: TypeError: POST data should be bytes or an iterable of bytes. It cannot be str

I changed my code to this:

url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=AIzaSyCMp2ZnKI3J91sog7a7m7-Hzcn402FyUZo"
values = {"request": {"passengers": {"kind": "qpxexpress#passengerCounts", "adultCount": 1}, "slice": [{"kind": "qpxexpress#sliceInput", "origin": "RDU", "destination": location, "date": dateGo}]}}
data = json.dumps(values)
data = data.encode("utf-8")
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
f.close()
print(response)

However, when I run this code I get the following error message:

urllib.error.HTTPError: HTTP Error 400: Bad Request

I also tried changing utf-8 to ascii but I was unsuccessful. How can I get this working properly?


回答1:


Here is a solution using the excelent requests library.

import json
import requests

api_key = "YOUR API KEY HERE"
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=" + api_key
headers = {'content-type': 'application/json'}

params = {
  "request": {
    "slice": [
      {
        "origin": "TXL",
        "destination": "LIM",
        "date": "2015-01-19"
      }
    ],
    "passengers": {
      "adultCount": 1
    },
    "solutions": 2,
    "refundable": False
  }
}

response = requests.post(url, data=json.dumps(params), headers=headers)
data = response.json()
print data

I am not sure why you request is not working. Maybe it is really the request parameters that were wrong. The date definitely needs to be in the future!




回答2:


False needs to be in lowercase in JSON, so you need to quote it in Python, like this "refundable" : "false". Otherwise, your query looks good (obviously you'll need to update the date). By the way, it isn't good practice to include your API key in a public forum.



来源:https://stackoverflow.com/questions/26550213/qpx-express-api-from-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!