Google 推送通知给出 ParseError

Google Push notification giving ParseError

我正在尝试使用 google 日历推送通知,以便在用户事件的开始 or/and 结束日期时间发生变化时收到通知。

我已按照 push doc 中关于注册和验证我的域的所有步骤进行操作。

我的代码如下:

@blueprint.route("/notifications", methods={'GET','POST'})
def timeBlocker():
    email = '....@gmail.com'
    user = User.query.filter_by(email=email).first()  
    thecredentials = { 
    'client_id': os.getenv('client_id'),
    'client_secret':os.getenv('client_secret'),
    'refresh_token':user.refresh,
    'grant_type': 'refresh_token',
    }
    req = requests.post(url='https://oauth2.googleapis.com/token', data = thecredentials) 
    req_ = req.json()
    accessToken = req_["access_token"]
    print('access token is ' + accessToken)
    body = {
        'id': '01234567-89ab-cdef-0123456789ab', 
        'type': 'web_hook',
        'address': 'https://dayliii.com/notifications'
    }
    headers = {'Authorization': 'Bearer ' + accessToken,
               'Content-Type': 'application/json'
               }
    calendar = '....@group.calendar.google.com'
    req = requests.post(url='https://www.googleapis.com/calendar/v3/calendars/....@group.calendar.google.com/events/watch', data = body, headers=headers) 
    return str(req.json())

错误:

{'error': {'errors': [{'domain': 'global', 'reason': 'parseError', 'message': 'Parse Error'}], 'code': 400, 'message': 'Parse Error'}}

我尝试将双引号转换为单引号 但它没有用。

最后,我想知道在开发模式下使用推送通知时是否应该注册并验证 'http://localhost:5000/' 的域所有权?因为这是我期望得到的错误,所以不确定它的解决方法。

request()函数中的data参数接受json格式。

您可以尝试使用 json.dumps() 将 body 变量转换为 json 字符串。

您的请求代码应如下所示:

req = requests.post(url='https://www.googleapis.com/calendar/v3/calendars/....@group.calendar.google.com/events/watch', data = json.dumps(body), headers=headers)