Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#!/usr/bin/env python3 import os import re import json import subprocess from datetime import datetime, timedelta from pathlib import Path # ----------------------------- # CONFIGURATION # ----------------------------- SOURCE_DIR = "/data/xxx" TARGET_FILENAME = "KT_euro_geocolorm.png" # configurable if needed STATE_FILE = "processed.json" # tracks completed files OUTPUT_DIR = Path.cwd() # output to working directory # ImageMagick crop/annotate parameters: CROP = "650x650+180+24" ANNOTATE_RECT = 'rectangle 0,0 184,20' POINTSIZE = 18 # ----------------------------- # Load processed state if os.path.exists(STATE_FILE): with open(STATE_FILE, "r") as f: processed = set(json.load(f)) else: processed = set() # Regex for directory names YYYYMMDD_HHMM DIR_PATTERN = re.compile(r"^(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})$") now = datetime.utcnow() cutoff = now - timedelta(hours=24) tasks = [] # -------------------------------------- # Scan directories # -------------------------------------- for entry in os.scandir(SOURCE_DIR): if not entry.is_dir(): continue m = DIR_PATTERN.match(entry.name) if not m: continue yyyy, mm, dd, hh, minu = m.groups() ts = datetime(int(yyyy), int(mm), int(dd), int(hh), int(minu)) # Must be within last 24 hours AND created exactly on the hour (minute == "00") if ts < cutoff: continue if minu != "00": continue # Look for the target file inside the directory file_path = os.path.join(entry.path, TARGET_FILENAME) if not os.path.exists(file_path): continue key = f"{entry.name}/{TARGET_FILENAME}" if key in processed: continue tasks.append((key, file_path, yyyy, mm, dd, hh, minu)) # -------------------------------------- # Process each file # -------------------------------------- for key, fpath, yyyy, mm, dd, hh, minu in tasks: date = f"{yyyy}{mm}{dd}" time = f"{hh}{minu}" outname = f"gcm-{date}-{time}.png" outfile = OUTPUT_DIR / outname annotate_text = f"{yyyy}-{mm}-{dd} {hh}:{minu} UTC" cmd = [ "convert", fpath, "-crop", CROP, "-fill", "black", "-draw", ANNOTATE_RECT, "-fill", "white", "-pointsize", str(POINTSIZE), "-gravity", "NorthWest", "-annotate", "+180+20", annotate_text, str(outfile) ] print(f"Running: {' '.join(cmd)}") subprocess.run(cmd, check=True) processed.add(key) # -------------------------------------- # Save updated state # -------------------------------------- with open(STATE_FILE, "w") as f: json.dump(sorted(processed), f, indent=2) print("Done.")
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)