Python调用Gravity Forms API筛选日期失效及编码问题求助
解决Gravity Forms API调用的URL解码错误与日期筛选失效问题
一、修复URL解码错误
直接拼接含JSON的URL会触发OAuth1签名时的解码错误,原因是URL中的JSON字符未被正确编码,且OAuth1Session会自动处理参数签名,正确做法是将search参数的JSON对象序列化为字符串后,通过params传递:
import json import oauthlib from requests_oauthlib import OAuth1Session consumer_key = "你的Consumer Key" client_secret = "你的Client Secret" # 初始化OAuth1会话 session = OAuth1Session( consumer_key, client_secret=client_secret, signature_type=oauthlib.oauth1.SIGNATURE_TYPE_QUERY ) url = 'https://localhost/wp-json/gf/v2/entries' # 将筛选条件序列化为JSON字符串,放入params params = { "search": json.dumps({ "field_filters": [ {"key": "date_created", "value": "2023-09-01", "operator": "contains"} ] }) } response = session.get(url, params=params) print(response.json())
二、解决日期筛选失效的替代方案
1. 调整日期匹配逻辑
date_created字段存储的是含时分秒的完整时间戳,用is操作符需要精确匹配到秒,几乎无法命中。改用以下方式:
- 模糊匹配日期部分:用
contains操作符匹配日期字符串的前10位(YYYY-MM-DD) - 范围筛选:指定起始和结束时间,覆盖目标日期的全天
示例代码(范围筛选):
params = { "search": json.dumps({ "field_filters": [ {"key": "date_created", "value": "2023-09-01 00:00:00", "operator": "greater_than_or_equal"}, {"key": "date_created", "value": "2023-09-02 00:00:00", "operator": "less_than"} ] }) }
2. 统一使用OAuth1Session发起请求
避免混用普通requests和OAuth1会话,确保请求携带正确的认证信息,否则API可能忽略筛选参数返回全量数据。
3. 验证字段键名准确性
调用无筛选的/entries接口,返回一个条目,确认实际存储的日期字段键名是否为date_created(部分环境可能为created_date)。
4. 手动编码参数(备选方案)
如果自动参数编码仍有问题,可手动编码search参数后拼接URL:
import urllib.parse search_filter = { "field_filters": [{"key": "date_created", "value": "2023-09-01", "operator": "contains"}] } encoded_search = urllib.parse.quote(json.dumps(search_filter)) url = f'https://localhost/wp-json/gf/v2/entries?search={encoded_search}' response = session.get(url) print(response.json())
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

