python - python post请求中的graphQL获取数据
问题描述
嗨,我试图弄清楚如何正确地将 graphQL 查询传递给 python 发布请求。
示例graphQL在commission junction API网站上像这样卷曲:
curl -H "Authorization: Bearer <your-personal-access-token> -XPOST
https://commissions.api.cj.com/query -d '{ publisherCommissions(forPublishers: ["999"], sincePostingDate:"2018-08-08T00:00:00Z",beforePostingDate:"2018-08-09T00:00:00Z"){count payloadComplete records {actionTrackerName websiteName advertiserName postingDate pubCommissionAmountUsd items { quantity perItemSaleAmountPubCurrency totalCommissionPubCurrency } } } }'
我尝试使用python来模拟请求:
import requests
headers = {"Authorization": "Bear token"}
def run_query(query):
request = requests.post('https://commissions.api.cj.com/query', json={'query': query}, headers=headers)
if request.status_code == 200:
return request.json()
else:
raise Exception("Query failed to run by returning code of {}. {}".format(request.status_code, query))
query="""
{
publisherCommissions(forPublishers: ["999"]) {
records
}
}
"""
result = run_query(query)
但总是得到响应 400。我不知道 python 是否可以采用 graphQL 格式?我如何格式化以便发布请求可以识别它。谢谢!
解决方案
这有效
query = """
{
advertiserCommissions(forAdvertisers: "inputID",sinceEventDate: "%s",
beforeEventDate: "%s") {
records {
commissionId
orderDiscountPubCurrency
aid
orderId
postingDate
lockingDate
actionStatus
advertiserId
advertiserName
saleAmountUsd
originalActionId
pubCommissionAmountUsd
cjFeeUsd
actionTrackerId
actionType
eventDate
original
actionTrackerName
}
limit
maxCommissionId
payloadComplete
count
}
}
""" % (beginDate, endDate)
推荐阅读
- c# - 获取CancellationToken的剩余时间
- python - Python - 从列表中提取并重塑
- wget - 如何使用wget下载到某个目录
- angular - 放大 Angular 7 构建错误 - 'NgModule' 调用'ɵmakeDecorator'
- python - 当我尝试返回通过列表理解创建的列表时,它会返回类似
- java - 如何将项目设置为在 JList 中选择
- c++ - “给定令牌的上下文字符串”是什么意思?
- elasticsearch - 如何从 ElasticSearch 记录中聚合匹配的前缀/短语?
- javascript - addEventListener 是否添加或设置?
- css - 如何选择给定集合中的第 n 个元素