Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自Python的QPX Express API_Python_Post_Python 3.x_Google Api_Urllib - Fatal编程技术网

来自Python的QPX Express API

来自Python的QPX Express API,python,post,python-3.x,google-api,urllib,Python,Post,Python 3.x,Google Api,Urllib,我正在尝试使用来自python的Google的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": [{"ki

我正在尝试使用来自python的Google的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)
根据以下代码:

运行上述代码时,我收到以下错误消息:

TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
urllib.error.HTTPError: HTTP Error 400: Bad Request
我搜索了一个解决方案,并根据以下问题修改了我的代码:

我将代码更改为:

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)
但是,当我运行此代码时,会收到以下错误消息:

TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
urllib.error.HTTPError: HTTP Error 400: Bad Request

我还尝试将utf-8更改为ascii,但没有成功。如何使其正常工作?

下面是一个使用卓越请求库的解决方案

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

我不知道你的请求为什么不起作用。也许是请求参数真的错了。日期一定要在将来

下面是一个使用卓越请求库的解决方案

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

我不知道你的请求为什么不起作用。也许是请求参数真的错了。日期一定要在将来

False在JSON中必须是小写的,所以您需要在Python中引用它,如下面的
“returnable”:“False”
。否则,您的查询看起来不错(显然您需要更新日期)。顺便说一句,在公共论坛中包含API密钥不是一个好的做法。

False需要在JSON中使用小写字母,因此您需要在Python中引用它,如下面的
“Retreable”:“False”
。否则,您的查询看起来不错(显然您需要更新日期)。顺便说一句,在公共论坛中包含API密钥不是一个好做法。

我认为json对象不是correct@Vincent贝尔特曼,请详细说明。是使用{'Content-Type':'application/json'}、使用json.dumps(值)还是定义变量值让您感到困扰?因为您得到了状态代码400,所以您的请求有一些问题。由于您的内容类型是正确的,json.dumps也是正确的,所以我认为您的值有问题。我认为您的json对象不是correct@Vincent贝尔特曼,请详细说明。是使用{'Content-Type':'application/json'}、使用json.dumps(值)还是定义变量值让您感到困扰?因为您得到了状态代码400,所以您的请求有一些问题。由于您的内容类型是正确的,json.dumps也是正确的,我认为您的值有问题。这是不正确的。引用它将使它成为一个字符串。从python标记
False
到JSON标记
False
的转换由
JSON.dumps
函数完成。这是不正确的。引用它将使它成为一个字符串。从python标记
False
到JSON标记
False
的转换由
JSON.dumps
函数完成。