从Python调用QPX Express API

1 投票
2 回答
2142 浏览
提问于 2025-04-29 11:42

我正在尝试从Python使用谷歌的QPX Express API,但在发送请求时遇到了一些问题。最开始我尝试了这个:

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)

这个代码是参考了这个链接的内容:urllib2和json

当我运行上面的代码时,出现了以下错误信息:

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

我搜索了解决方案,并根据以下问题调整了我的代码:TypeError: POST数据应该是字节或字节的可迭代对象,而不能是字符串

我把代码改成了这样:

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)

但是,当我运行这段代码时,又出现了以下错误信息:

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

我还尝试把utf-8改成ascii,但没有成功。我该如何才能让它正常工作呢?

暂无标签

2 个回答

-1

在JSON格式中,"false"这个词需要用小写字母写,所以在Python中你需要把它放在引号里,像这样 "refundable" : "false"。除此之外,你的查询看起来没问题(当然你需要更新日期)。顺便说一下,把你的API密钥放在公开论坛上并不是个好习惯。

6

这里有一个使用非常棒的requests库的解决方案。

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

我不太确定你的请求为什么不成功。可能真的是请求的参数有问题。日期肯定需要设置在未来哦!

撰写回答