获取列表事件时,如何在 Python 中获取 Google 日历 API status_code?

How can I get Google Calendar API status_code in Python when get list events?

我尝试使用 Google 日历 API

events_result = service.events().list(calendarId=calendarId,
                                          timeMax=now,
                                          alwaysIncludeEmail=True,
                                          maxResults=100, singleEvents=True,
                                          orderBy='startTime').execute()

当我有权限访问calendarId时一切正常,但是当我没有calendarId权限时出错会报错

我构建了一个 autoload.py 函数,调度 python 每 10 分钟加载一次事件,如果出现错误,该函数将停止,我必须使用 SSH 终端重新启动 autoload.py 手动 所以我想知道:

如何得到status_code,例如,如果是404,python将通过

答案:

您可以在循环中使用 try/except 块来遍历所有日历,并跳过会引发错误的访问。

代码示例:

要获取错误代码,请确保导入 json:

import json

然后就可以从Exception中得到错误代码:

calendarIds = ["calendar ID 1", "calendar ID 2", "calendar Id 3", "etc"]

for i in calendarIds:
    try:
        events_result = service.events().list(calendarId=i,
                                          timeMax=now,
                                          alwaysIncludeEmail=True,
                                          maxResults=100, singleEvents=True,
                                          orderBy='startTime').execute()
    except Exception as e:
        print(json.loads(e.content)['error']['code'])
        continue

进一步阅读:

感谢 ,我将完整的代码上传到 autoload.py 程序,但我也想知道如何获得响应 json 或 status_code请求 Google API.

解决方法:

try:
 code here
except Exception as e:
            continue
import schedule
import time
from datetime import datetime
import dir
import sqlite3
from project.function import cmsCalendar as cal
db_file = str(dir.dir) + '/admin.sqlite'

def get_list_shop_from_db(db_file):
    cur = sqlite3.connect(db_file).cursor()
    query = cur.execute('SELECT * FROM Shop')
    colname = [ d[0] for d in query.description ]
    result_list = [ dict(zip(colname, r)) for r in query.fetchall() ]
    cur.close()
    cur.connection.close()
    return result_list

def auto_load_google_database(list_shop, calendarError=False):
    shopId = 0
    for shop in list_shop:
        try:
            shopId = shopId+1
            print("dang ghi vao shop", shopId)
            service = cal.service_build()
            shop_step_time_db = list_shop[shopId]['shop_step_time']
            shop_duration_db = list_shop[shopId]['shop_duration']
            slot_available = list_shop[shopId]['shop_slots']
            slot_available = int(slot_available)
            workers = list_shop[shopId]['shop_workers']
            workers = int(workers)
            calendarId = list_shop[shopId]['shop_calendarId']
            if slot_available > workers:
                a = workers
            else:
                a = slot_available
            if shop_duration_db == None:
                shop_duration_db = '30'
            if shop_step_time_db == None:
                shop_step_time_db = '15'

            shop_duration = int(shop_duration_db)
            shop_step_time = int(shop_step_time_db)

            shop_start_time = list_shop[shopId]['shop_start_time']
            shop_start_time = datetime.strptime(shop_start_time, "%H:%M:%S.%f").time()
            shop_end_time = list_shop[shopId]['shop_end_time']
            shop_end_time = datetime.strptime(shop_end_time, "%H:%M:%S.%f").time()

            # nang luc moi khung gio lay ra tu file Json WorkShop.js
            booking_status = cal.auto_load_listtimes(service, shopId, calendarId, shop_step_time, shop_duration, a,
                                                     shop_start_time,
                                                     shop_end_time)


        except Exception as e:
            continue

def main():

    list_shop = get_list_shop_from_db(db_file)
    auto_load_google_database(list_shop)

if __name__ == '__main__':
    main()
    schedule.every(5).minutes.do(main)
    while True:
        # Checks whether a scheduled task
        # is pending to run or not
        schedule.run_pending()
        time.sleep(1)