Python API troubles



我的任务是当场学习Python,感觉自己快要淹死了。我正在尝试翻译同事提供的内容,但我真的很挣扎。我尝试使用的 API 在这里:https://dev.skuvault.com/v1.0/reference#getonlinesalestatus 我拥有的代码是:

import requests, json
# Skuvault URIs and Token
SkuBase = "https://app.skuvault.com/api/sales/getOnlineSaleStatus"
SkuProductsUri = SkuBase + "Products(id)/Attributes('name')"
SkuAuthToken = ""
print "[+] Requesting: " + SkuProductsUri
response = requests.post(SkuProductsUri, headers={'Authorization': 'Bearer ' + SkuAuthToken})
productsJson = json.loads(response.status_code)
print "[*] Status: %dn[*] Reason: %sn[*] Message: %sn[*] Raw: %snn" 
% (response.status_code, response.reason, productsJson['Message'], response.text[:300])

尝试运行脚本时收到以下错误

[+] 请求: https://app.skuvault.com/api/sales/getOnlineSaleStatusProducts(id)/属性("名称") 回溯(最近一次调用): 文件 "test-api.py",第 11 行,在 productsJson = json.loads(response.status_code) 文件 "/usr/local/Cellar/python@2/2.7.14_3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py",第 339 行,在加载中 返回 _default_decoder.解码 文件 "/usr/local/Cellar/python@2/2.7.14_3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py",第 364 行,解码 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 类型错误:预期的字符串或缓冲区

就像我说的,在此之前我从未使用过Python,并且感到有点不知所措。谢谢。

您没有正确调用 API。请注意,API 希望您发布请求,并且它希望请求有效负载如下所示

{
"OrderIds": [
"my-id"
],
"TenantToken": "my-tenant-token",
"UserToken": "my-user-token"
}

如果我做类似的事情,我可能会这样做:

sku_base = "https://app.skuvault.com/api/sales/getOnlineSaleStatus"
response = requests.post(
sku_base, 
json={
"OrderIds": [ "my-order-id" ], 
"TenantToken": "my-tenant-token", 
"UserToken": "my-user-token"
}
)
# NOTE: you are not using the status code here. That's an int and will error.
productsJson = json.loads(response.text)
# This is also valid and will result in the same object:
productsJson = response.json()
print "[*] Status: %dn[*] Reason: %sn[*] Message: %sn[*] Raw: %snn" 
% (response.status_code, response.reason, productsJson['Message'], response.text[:300])

旁注:

Python 2 不再维护。建议您只使用 Python 3。

最新更新