diff --git a/schedule.conf b/schedule.conf index 1d5e644..f33dfa2 100644 --- a/schedule.conf +++ b/schedule.conf @@ -1 +1 @@ -24 +1 diff --git a/update.sh b/update.sh index 5f2df5e..1a12100 100644 --- a/update.sh +++ b/update.sh @@ -1,11 +1,17 @@ #!/bin/sh set -eu +# 平台按 schedule.conf 每小时执行;脚本内部只在北京时间 11 点真正写入数据。 SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) TMP_FILE="$SCRIPT_DIR/data.json.tmp" OUTPUT_FILE="$SCRIPT_DIR/data.json" -python3 "$SCRIPT_DIR/update_report_data.py" "$TMP_FILE" +rm -f "$TMP_FILE" +python3 "$SCRIPT_DIR/update_report_data.py" "$TMP_FILE" "$@" -mv "$TMP_FILE" "$OUTPUT_FILE" -echo "Updated $OUTPUT_FILE" +if [ -f "$TMP_FILE" ]; then + mv "$TMP_FILE" "$OUTPUT_FILE" + echo "Updated $OUTPUT_FILE" +else + echo "Skipped: not the scheduled update hour" +fi diff --git a/update_report_data.py b/update_report_data.py index 36b8965..7ae8293 100644 --- a/update_report_data.py +++ b/update_report_data.py @@ -23,6 +23,8 @@ CSV_URL = ( ) TIMEZONE = ZoneInfo("Asia/Shanghai") COUNTRIES = ["KZ", "UZ", "KG", "AM"] +# 平台只支持“每隔几小时”,因此按小时调度,仅在此时刻真正更新(Asia/Shanghai) +UPDATE_HOUR = 11 DATE_HEADERS = {"date"} GEO_HEADERS = {"geo", "country"} @@ -243,12 +245,19 @@ def build_payload(rows, now): def main(): if len(sys.argv) < 2: - raise SystemExit("用法: update_report_data.py <输出文件>") + raise SystemExit("用法: update_report_data.py <输出文件> [--force]") + + now = datetime.now(TIMEZONE) + forced = "--force" in sys.argv[2:] + if not forced and now.hour != UPDATE_HOUR: + print(f"SKIP {now:%Y-%m-%d %H:%M} 非 {UPDATE_HOUR}:00(Asia/Shanghai),不更新") + return + request = urllib.request.Request(CSV_URL, headers={"User-Agent": "AgentStage-Ozon-Report/2.0"}) with urllib.request.urlopen(request, timeout=90) as response: text = response.read().decode("utf-8-sig") rows = list(csv.reader(text.splitlines())) - payload = build_payload(rows, datetime.now(TIMEZONE)) + payload = build_payload(rows, now) with open(sys.argv[1], "w", encoding="utf-8") as handle: json.dump(payload, handle, ensure_ascii=False, indent=2) period = payload["period"]