UUGRN Stammtisch.sh: Unterschied zwischen den Versionen

Aus UUGRN
(Script und Funktionsweise.)
 
K (kat)
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieses Script ermittelt durch Ausnutzen von Seiteneffekten die [[UUGRN:Stammtisch|Stammtischtermine]] in Mannheim und Heidelberg und gibt passenden SQL-Code für die Kalender-Tabelle aus.  
+
Dieses Script ermittelt die [[UUGRN:Stammtisch|Stammtischtermine]] und [[UUGRN:FIXME Treffen]] und gibt passenden SQL-Code für die Kalender-Tabelle aus.  
  
== Funktionsweise ==
+
== Script ==
Mittels [[gdate|GNU date]] wird für alle in Frage kommenden Tage der Wochentag ''%u'' ausgegeben, dieser wird von folgenden [[sed]]-Ausdruck mit 3 für Mittwoch = Heidelberg und 4 für Donnerstag = Mannheim umgewandelt. Durch die ''for D''-Schleife werden nur die in Frage kommenden Tage durchlaufen, daher kann es keine ''false positives'' geben.
+
<code><pre>
 +
#! /bin/sh
  
Die abschließende ''while''-Schleife übernimmt die Ausgabe von ''sed'' und erzeugt das passende, hier ''unix epoch''-Zeitformat und die restlichen Felder.
+
YEAR=${1:-$(date +%Y)}
 +
test "${YEAR}" -gt 2000 -a "${YEAR}" -lt 2038 || YEAR="$(date +%Y)"
  
== Script ==
+
for MONTH in $(gseq -w 01 12); do for DAY in $(gseq -w 01 31); do
    1  #! /bin/sh
+
     gdate "+%u|%d|%F" --date "${YEAR}-${MONTH}-${DAY}" 2>/dev/null
    2  #
+
done; done |
    3  # Berechnet die UUGRN-Stammtische und erzeugt das SQL für die Datenbank
+
while IFS='|' read DOW DOM DATE; do
    4  #
+
  case ${DOM} in
    5  # Jeden 2. Donnerstag im Monat um 19 Uhr in Mannheim (ORT=5)
+
     01|02|03|04|05|06|07) NIM=1 ;;
    6  # Jeden 4. Mittwoch im Monat um 20 Uhr in Heidelberg (ORT=6)
+
    08|09|10|11|12|13|14) NIM=2 ;;
    7  #
+
     15|16|17|18|19|20|21) NIM=3 ;;
    8  # Das Scriptgeht von der Annahme aus, dass der 2. Donnerstag im Monat immer zwischen dem 8. und 14. liegen muss
+
     22|23|24|25|26|27|28) NIM=4 ;;
    9  # und dass der 4. Mittwoch im Monat immer zwischen 22. und 28. liegt.
+
    29|30|31) NIM=5 ;;
    10  # Die Schleifen als auch der egrep | sed Ausdruck gehen direkt darauf ein.
+
     *) NIM="0" ;;
    11  #
+
  esac
    12  #
+
 
    13  # Raphael.Becker <rabe@uugrn.org>
+
  SQL="insert into KALENDER set ID=0"
    14
+
  SQL2=""
    15  JAHR=2007
+
  case ${NIM}-${DOW} in
    16
+
    1-5) # 1. Freitag
    17  for M in 01 02 03 04 05 06 07 08 09 10 11 12; do
+
      SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=11, TEXT='FIXME', EVENT_LINK='http://fixme.uugrn.org/'"
    18    for D in 08 09 10 11 12 13 14 22 23 24 25 26 27 28 ; do
+
      ;;
     19      gdate "+%u %d %Y-%m-%d" --date "$JAHR-$M-$D"
+
    3-1) # 3. Montag
    20    done
+
      SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=12, TEXT='UnixStammtisch', EVENT_LINK='http://stammtisch.uugrn.org/'"
    21  done |
+
      ;;
     22  egrep "^(4 [01]|3 2)|
+
  esac
     23  sed -e 's,^3 [0-9]* ,20:00:00|6|"kleiner" Stammtisch|,;
+
 
     24         s,^4 [0-9]* ,19:00:00|5|Stammtisch|,;|
+
  if [ -n "${SQL2}" ]; then
     25  while IFS='|' read ZEIT ORT BEZ DATUM junk; do
+
     echo "${SQL}${SQL2};"
    26    echo "insert into KALENDER set ID=0, DATUM=$(gdate +%s --date "$DATUM $ZEIT"), ORT_ID=$ORT, TEXT='$BEZ';"
+
  fi
     27 done
+
done
 +
</pre></code>
 +
 
 +
=== Variablen ===
 +
;YEAR,MONTH,DAY: Iteriert über alle Kalendertage des angegebenen Jahres
 +
;DOW: day-of-week [1..7], 1=Montag  
 +
;DOM: day-of-month [1..31]
 +
;NIM: Nth-in-month [1..5]
  
== Ausgabe für 2007 ==
 
$ '''bin/uugrn_stammtischkalender.sh'''
 
insert into KALENDER set ID=0, DATUM=1168538400, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1169665200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1170957600, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1172689200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1173376800, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1175104800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1176397200, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1177524000, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1178816400, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1179943200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1181840400, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1182967200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1184259600, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1185386400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1186678800, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1187805600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1189702800, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1190829600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1192122000, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1193248800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1194544800, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1196276400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1197568800, ORT_ID=5, TEXT='Stammtisch';
 
insert into KALENDER set ID=0, DATUM=1198695600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
 
  
 
[[Kategorie:Script]]
 
[[Kategorie:Script]]
[[Kategorie:Verein]]
+
[[Kategorie:UUGRN|Stammtischkalender]]

Aktuelle Version vom 13. April 2013, 09:39 Uhr

Dieses Script ermittelt die Stammtischtermine und UUGRN:FIXME Treffen und gibt passenden SQL-Code für die Kalender-Tabelle aus.

Script[Bearbeiten]

#! /bin/sh

YEAR=${1:-$(date +%Y)}
test "${YEAR}" -gt 2000 -a "${YEAR}" -lt 2038 || YEAR="$(date +%Y)"

for MONTH in $(gseq -w 01 12); do for DAY in $(gseq -w 01 31);  do
    gdate "+%u|%d|%F" --date "${YEAR}-${MONTH}-${DAY}" 2>/dev/null
done; done |
while IFS='|' read DOW DOM DATE; do
  case ${DOM} in
    01|02|03|04|05|06|07) NIM=1 ;;
    08|09|10|11|12|13|14) NIM=2 ;;
    15|16|17|18|19|20|21) NIM=3 ;;
    22|23|24|25|26|27|28) NIM=4 ;;
    29|30|31) NIM=5 ;;
    *) NIM="0" ;;
  esac

  SQL="insert into KALENDER set ID=0"
  SQL2=""
  case ${NIM}-${DOW} in
    1-5) # 1. Freitag
      SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=11, TEXT='FIXME', EVENT_LINK='http://fixme.uugrn.org/'"
      ;;
    3-1) # 3. Montag
      SQL2=", DATUM='${DATE} 20:00:00', ORT_ID=12, TEXT='UnixStammtisch', EVENT_LINK='http://stammtisch.uugrn.org/'"
      ;;
  esac

  if [ -n "${SQL2}" ]; then
    echo "${SQL}${SQL2};"
  fi
done

Variablen[Bearbeiten]

YEAR,MONTH,DAY
Iteriert über alle Kalendertage des angegebenen Jahres
DOW
day-of-week [1..7], 1=Montag
DOM
day-of-month [1..31]
NIM
Nth-in-month [1..5]