added shack plenum script
This commit is contained in:
84
linux/shack-check-plenum-agenda-cron.sh
Executable file
84
linux/shack-check-plenum-agenda-cron.sh
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
export LC_ALL=C.UTF-8
|
||||
export LANG=C.UTF-8
|
||||
|
||||
# --- CONFIGURATION HEADER ---
|
||||
TARGET_DIR="/data/privat/s/shackspace.de/data/plenum/agenda_files"
|
||||
API_URL='https://api.shackspace.de/v1/plena/next'
|
||||
WIKI_BASE="https://wiki.shackspace.de/plenum"
|
||||
TODAY=$(date +%Y-%m-%d)
|
||||
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
|
||||
GLOB_PATTERN="agenda_${TODAY}_[0-9][0-9]-[0-9][0-9]-[0-9][0-9].txt"
|
||||
|
||||
# Default flag states
|
||||
SHOW_NO_PLENUM=0
|
||||
SHOW_NEXT_DATE=0
|
||||
FORCE_CONTENT=0
|
||||
FORCE_DUMP=0
|
||||
|
||||
# --- PARSE FLAGS ---
|
||||
while getopts "pnvf" opt; do
|
||||
case $opt in
|
||||
p) SHOW_NO_PLENUM=1 ;;
|
||||
n) SHOW_NEXT_DATE=1 ;;
|
||||
v) FORCE_CONTENT=1 ;;
|
||||
f) FORCE_DUMP=1 ;;
|
||||
*) echo "Usage: $0 [-p] [-n] [-v] [-f]"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# --- DATA FETCHING ---
|
||||
RAW=$(curl -s "$API_URL")
|
||||
[[ -z "$RAW" ]] && { echo "Error: API unreachable." >&2; exit 1; }
|
||||
|
||||
ISO_DATE=$(jq -r .date <<<"$RAW" | tr -d 'Z')
|
||||
FILE_DATE=$(date -d "$ISO_DATE" +%Y-%m-%d)
|
||||
URL_API=$(jq -r .url <<<"$RAW")
|
||||
|
||||
# Use today's date for URL if -f is active, otherwise use API URL
|
||||
[[ $FORCE_DUMP -eq 1 ]] && FETCH_DATE="$TODAY" || FETCH_DATE="$FILE_DATE"
|
||||
[[ $FORCE_DUMP -eq 1 ]] && URL="${WIKI_BASE}/${TODAY}" || URL="$URL_API"
|
||||
|
||||
CONTENT=$(curl -s "$URL" | w3m -dump -T text/html -I UTF-8 -O UTF-8 | sed -n "/^Plenum $FETCH_DATE/,/^Seiten-Werkzeuge/p" | sed '/^Seiten-Werkzeuge/d')
|
||||
[[ $(grep -q "Dieses Thema existiert noch nicht" <<< "$CONTENT"; echo $?) -eq 0 ]] && CONTENT=""
|
||||
|
||||
# --- FILE CHECK ---
|
||||
EXISTING_COUNT=$(ls -la "${TARGET_DIR}"/${GLOB_PATTERN} 2>/dev/null | wc -l)
|
||||
|
||||
# --- GIT FUNCTION (TOTALLY SILENT) ---
|
||||
git_sync() {
|
||||
local file=$1
|
||||
if [[ -d "$TARGET_DIR" ]] && [[ -d "${TARGET_DIR}/.git" ]]; then
|
||||
pushd "$TARGET_DIR" > /dev/null
|
||||
git add "$file" > /dev/null 2>&1
|
||||
git commit -q -m "auto: add $file" > /dev/null 2>&1
|
||||
git push -q origin main > /dev/null 2>&1
|
||||
popd > /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
# --- MAIN LOGIC ---
|
||||
if [[ "$FORCE_DUMP" -eq 1 ]]; then
|
||||
# SILENT DUMP: Only if a file for today already exists
|
||||
if [[ $EXISTING_COUNT -gt 0 && -n "$CONTENT" ]]; then
|
||||
FILENAME="agenda_$TIMESTAMP.txt"
|
||||
echo "$CONTENT" > "${TARGET_DIR}/$FILENAME"
|
||||
git_sync "$FILENAME"
|
||||
fi
|
||||
elif [[ "$FILE_DATE" == "$TODAY" ]]; then
|
||||
# Standard daily dump (first run)
|
||||
if [[ $EXISTING_COUNT -eq 0 && -n "$CONTENT" ]]; then
|
||||
FILENAME="agenda_$TIMESTAMP.txt"
|
||||
echo "$CONTENT" > "${TARGET_DIR}/$FILENAME"
|
||||
echo "$CONTENT"
|
||||
git_sync "$FILENAME"
|
||||
fi
|
||||
else
|
||||
[[ $SHOW_NO_PLENUM -eq 1 ]] && echo "There is no Plenum today"
|
||||
[[ $SHOW_NEXT_DATE -eq 1 ]] && echo "Next Plenum on $(date -d "$ISO_DATE" '+%a, %Y-%m-%d')"
|
||||
fi
|
||||
|
||||
if [[ $FORCE_CONTENT -eq 1 && -n "$CONTENT" && "$FETCH_DATE" != "$TODAY" ]]; then
|
||||
echo "--- Forced Content Output ($FETCH_DATE) ---"
|
||||
echo "$CONTENT"
|
||||
fi
|
||||
Reference in New Issue
Block a user