workday 中国工作日接口 之前用别人的接口,然后突然就不能用了。简单写一个python-api

引用hinese_calendar写一个简单的api,主要是处理工作日上班时间集团网络限速,其它时间自动不限速,对外出链接回公司提高带宽利用率

可以直接部署Vercel

import chinese_calendar as cc
from datetime import datetime
from flask import Flask, request, jsonify
import pytz

app = Flask(__name__)

def get_cst_time():
    """
    获取并转换服务器当前时间为中国标准时间(CST)。
    """
    local_time = datetime.now()  # 获取系统本地时间
    cst_timezone = pytz.timezone('Asia/Shanghai')  # CST 时区为中国标准时间
    cst_time = local_time.astimezone(cst_timezone)  # 将本地时间转换为 CST 时间
    return cst_time
def get_cst_time():
    """
    获取并转换服务器当前时间为中国标准时间(CST)。
    """
    local_time = datetime.now()  # 获取系统本地时间
    cst_timezone = pytz.timezone('Asia/Shanghai')  # CST 时区为中国标准时间
    cst_time = local_time.astimezone(cst_timezone)  # 将本地时间转换为 CST 时间
    return cst_time

@app.route('/api/is_workday', methods=['GET', 'POST'])
def is_workday():
    if request.method == 'GET':
        date_str = request.args.get('date')
    elif request.method == 'POST':
        data = request.get_json()
        date_str = data.get('date') if data else None

    # 获取服务器当前时间并转换成 CST
    server_time = get_cst_time().date()

    # 如果没有提供日期参数,则使用服务器当前时间
    if not date_str:
        date = server_time
    else:
        try:
            date = datetime.strptime(date_str, '%Y-%m-%d').date()
        except ValueError:
            return jsonify({"error": "Invalid date format. Use YYYY-MM-DD"}), 400

    is_workday = cc.is_workday(date)
    return jsonify({
        "date": date.isoformat(),
        "is_workday": is_workday
    })
    
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

接口调用 vercel.app的域名需要自己使用代理

curl --location 'https://workday-pi.vercel.app/api/is_workday'
curl --location 'https://workday-pi.vercel.app/api/is_workday?date=2024-07-27'
curl --location 'https://workday-pi.vercel.app/api/is_workday' \
--header 'Content-Type: application/json' \
--data '{
    "date": "2024-07-28"
}'

公司路由器限速使用的是Mkirotik限速脚本

:local startHour 19
:local endHour 9
:local currentTime [:tonum [:pick [/system clock get time] 0 2]]
:local isEnabled [/queue tree find]

# 调用中国工作日API
:local today [/system clock get date]
# 此接口已失效
#:local isWorkDay ([/tool fetch url="https://holiday-api.mooim.com/v1/$([/system clock get date])" output=user as-value without-paging  ]->"data")
# 使用自己的api
:local isWorkDay ([/tool fetch url="https://workday-pi.vercel.app/api/is_workday?date=$([/system clock get date])" output=user as-value without-paging  ]->"data")
# 转换成array格式 7.13版本才支持
:local isWorkDayArray [:deserialize value=$isWorkDay from=json]


# 检查是否是工作日
# 方法1.查找是否包含true
# :if ([:find ($isWorkDay) "true"] > -1) do={
#:if ($isWorkDayArray->"work"->"is_work" = true) do={
# 直接json过滤需要的参数
:if ($isWorkDayArray->"is_workday") do={
    :log info "Today is a work day."
    
    # 检查当前时间是否在禁用范围内
    :if (($currentTime >= $startHour) or ($currentTime < $endHour)) do={
        :log info "Disabling Queue Tree rules..."
        # 禁用所有 Queue Tree 规则
        /queue tree disable [find ]
    } else={
        :log info "Enabling Queue Tree rules..."
        /queue tree enable  [find ]
    }
} else={
    :log info "Today is not a work day. Disabling all Queue Tree rules..."
    # 禁用所有 Queue Tree 规则
    /queue tree disable [find ]
}