updated announcement download to new jvs calendar structure
This commit is contained in:
1
submodules/wkOrg
Submodule
1
submodules/wkOrg
Submodule
Submodule submodules/wkOrg added at 41fe0c5a45
14
wkOrg/Makefile
Executable file
14
wkOrg/Makefile
Executable file
@@ -0,0 +1,14 @@
|
||||
.PHONY: all
|
||||
all: dlCheck
|
||||
|
||||
# Download der Ausschreibungen und ablegen im Downloadordner
|
||||
.PHONY: download
|
||||
download:
|
||||
python wkScraper-JvsCal.py
|
||||
|
||||
.PHONY: dlCheck
|
||||
dlCheck: download
|
||||
./newNoticeCheck.py
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
82
wkOrg/checkDownloads.py
Executable file
82
wkOrg/checkDownloads.py
Executable file
@@ -0,0 +1,82 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
# Python Script zum testen, ob neue Ausschreibungen hinzugekommen sind, oder bereits vorhandene sich geändert haben (kein herunterladen, es wird im Downloadordner wkOrgConfig.downpath gesucht)
|
||||
|
||||
# Name und Pfad der Datenbank als Variablen
|
||||
import wkOrgConfig
|
||||
import wkOrgAssis
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sqlite3
|
||||
|
||||
# Init der Datenbankverbindung
|
||||
if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']):
|
||||
dbConn = sqlite3.connect(
|
||||
wkOrgConfig.db['pathname']+wkOrgConfig.db['filename'])
|
||||
dbConn.text_factory = str
|
||||
dbCur = dbConn.cursor()
|
||||
else:
|
||||
print("Keine Datenbank vorhanden!")
|
||||
exit(-1)
|
||||
|
||||
# Hole Liste der Dateinamen im downloadVerzeichnis
|
||||
filenames = os.listdir(wkOrgConfig.downPath)
|
||||
# print filenames
|
||||
|
||||
# Für jeden Dateinamen:
|
||||
for filename in filenames:
|
||||
# Finde alle Einträge (id, dateiname, sha256 , wkID) zu diesen Dateinamen in der downloadTabelle -> dlList
|
||||
dbCur.execute(
|
||||
'SELECT id, dateiname, sha512 , wkID FROM downloads WHERE dateiname=?', (filename, ))
|
||||
ausschr = dbCur.fetchall()
|
||||
|
||||
# Falls dlList leer: (heißt ausschreibung wurde noch nicht zugeordnet)
|
||||
if ausschr == []:
|
||||
# füge Ausschreibung zur downloadTabelle hinzu (merke dir die ID)
|
||||
ausschrID = wkOrgAssis.dbAddDownload(
|
||||
dbCur, filename, wkOrgAssis.aFilesSHA512(wkOrgConfig.downPath+filename))
|
||||
dbConn.commit()
|
||||
# füge Wettkämpfe zur wkTabelle hinzu, merke die wkIDs
|
||||
print("Ausschreibung: "+filename)
|
||||
os.system('mupdf "'+wkOrgConfig.downPath +
|
||||
filename + '" >/dev/null 2>/dev/null &')
|
||||
wkIDs = wkOrgAssis.dbAddWks(dbCur, ausschrID)
|
||||
dbConn.commit()
|
||||
# update die wkIDs in der Ausschreibung in der downloadTabelle
|
||||
dbCur.execute('UPDATE downloads SET wkID=? WHERE id=?',
|
||||
(' '.join(str(wkIDs)), ausschrID))
|
||||
dbConn.commit()
|
||||
# Sonst:
|
||||
else:
|
||||
# (auch wenn mehrere dl mit diesem Dateinamen in der
|
||||
# downloadDatenbank gefunden werden, wir nehmen immer nur den
|
||||
# ersten)
|
||||
# Falls wkID == NULL:
|
||||
if ausschr[0][3] == 'NULL':
|
||||
# füge Wettkämpfe zur wkTabelle hinzu, merke die wkIDs
|
||||
wkIDs = dbAddWks(dbCur, ausschr[0][0])
|
||||
# update die wkIDs dieser Ausschreibung
|
||||
dbCur.execute('UPDATE downloads SET wkIDs=? WHERE id=?',
|
||||
(' '.join(wkIDs), ausschr[0][0]))
|
||||
dbConn.commit()
|
||||
# Sonst:
|
||||
else:
|
||||
# Falls wkID != 0:
|
||||
if ausschr[0][3] != '0':
|
||||
# Falls sich der Hash geändert hat:
|
||||
if ausschr[0][2] != wkOrgAssis.aFilesSHA512(wkOrgConfig.downPath+filename):
|
||||
# Finde alle wkEinträge, die diese AusschreibungsID haben:
|
||||
dbCur.execute(
|
||||
'SELECT (wkId) FROM downloads WHERE dateiname=?', (filename,))
|
||||
wkListList = dbCur.fetchall()
|
||||
# Für jeden diesen Eintrag:
|
||||
for wkList in wkListList:
|
||||
# Berichtige die Wettkampfdaten
|
||||
for wk in wkList:
|
||||
print("Ups: kein dbUpdateWk")
|
||||
# wkOrgAssis.dbUpdateWk(wk)
|
||||
|
||||
# Aufräumen
|
||||
dbConn.commit()
|
||||
dbConn.close()
|
||||
55
wkOrg/getCSV.py
Executable file
55
wkOrg/getCSV.py
Executable file
@@ -0,0 +1,55 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
# Python Script zum exportieren der anstehenden Wettkämpfe als cvs
|
||||
# und Kopieren der Ausschreibungen in das zugehörige Verzeichnis zur
|
||||
# Synchro mit dem online download ordner
|
||||
|
||||
# Name und Pfad der Datenbank als Variablen
|
||||
import wkOrgConfig
|
||||
import wkOrgAssis
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sqlite3
|
||||
import time
|
||||
import shutil
|
||||
import dateutil.parser
|
||||
import sys
|
||||
|
||||
# Init der Datenbankverbindung
|
||||
if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']):
|
||||
dbConn = sqlite3.connect(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename'])
|
||||
dbConn.text_factory = str
|
||||
dbCur = dbConn.cursor()
|
||||
else:
|
||||
print ("Keine Datenbank vorhanden!")
|
||||
exit(-1)
|
||||
|
||||
# Abfrage aller anstehenden Wettkämpfe
|
||||
dbCur.execute('SELECT id FROM wk WHERE datum>=?', (time.strftime("%Y-%m-%d"), ) )
|
||||
wkIds = dbCur.fetchall()
|
||||
|
||||
for wkId in wkIds:
|
||||
dbCur.execute('SELECT name, datum, ak, adrID, dlID FROM wk WHERE id=?', (wkId[0], ) )
|
||||
wkInfos = dbCur.fetchall()
|
||||
dbCur.execute('SELECT dateiname FROM downloads WHERE id=?', (wkInfos[0][4], ))
|
||||
ausschr = dbCur.fetchall()
|
||||
dbCur.execute('SELECT ort, lat, lon FROM adressen WHERE id=?', (wkInfos[0][3], ))
|
||||
addr = dbCur.fetchall()
|
||||
if not addr:
|
||||
addr = [["","",""]]
|
||||
|
||||
|
||||
|
||||
# Schreibweisen korrigieren
|
||||
ausschrFilename = ausschr[0][0]
|
||||
ausschrFilename = ausschrFilename.replace(" ", "%20")
|
||||
|
||||
sys.stderr.write("wkInfos: "+str(wkInfos)+"\n")
|
||||
# Reihenfolge der Spalten auf dem Server:
|
||||
# lfdeNr Datum Veranstaltung Altersklassen Ort Ausschreibung Routenplaner
|
||||
|
||||
print ("0," + wkInfos[0][1] + "," + wkInfos[0][0] + "," + wkInfos[0][2] + "," + addr[0][0] + "," + "/downloads/Ausschreibungen/Ausschreibungen." + str(dateutil.parser.parse(wkInfos[0][1]).year) + "/" + ausschrFilename + "," + "http://www.openstreetmap.org/directions?&route=50.80722%2C12.88236%3B" + addr[0][1] + "%2C" + addr[0][2] + ",," )
|
||||
if not os.path.exists('Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year)):
|
||||
os.makedirs('Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year))
|
||||
shutil.copyfile('download/'+ausschr[0][0], 'Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year)+'/'+ausschr[0][0])
|
||||
41
wkOrg/newNoticeCheck.py
Executable file
41
wkOrg/newNoticeCheck.py
Executable file
@@ -0,0 +1,41 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
# Python Script zum testen, ob neue Ausschreibungen hinzugekommen sind, oder bereits vorhandene sich geändert haben (kein herunterladen, es wird im Downloadordner wkOrgConfig.downpath gesucht)
|
||||
|
||||
# Name und Pfad der Datenbank als Variablen
|
||||
import wkOrgConfig
|
||||
import wkOrgAssis
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sqlite3
|
||||
|
||||
# Init der Datenbankverbindung
|
||||
if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']):
|
||||
dbConn = sqlite3.connect(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename'])
|
||||
dbConn.text_factory = str
|
||||
dbCur = dbConn.cursor()
|
||||
else:
|
||||
print ("Keine Datenbank vorhanden!")
|
||||
exit(-1)
|
||||
|
||||
# Hole Liste der Dateinamen im downloadVerzeichnis
|
||||
filenames = os.listdir(wkOrgConfig.downPath)
|
||||
#print filenames
|
||||
|
||||
# Für jeden Dateinamen:
|
||||
for filename in filenames:
|
||||
# Finde alle Einträge (id, dateiname, sha256 , wkID) zu diesen Dateinamen in der downloadTabelle -> dlList
|
||||
dbCur.execute('SELECT id, dateiname, sha512 , wkID FROM downloads WHERE dateiname=?', (filename, ) )
|
||||
ausschr = dbCur.fetchall()
|
||||
|
||||
# Falls dlList leer: (heißt ausschreibung wurde noch nicht zugeordnet)
|
||||
if ausschr == []:
|
||||
print("Neue Auschreibung: {}".format(filename))
|
||||
# Sonst:
|
||||
else:
|
||||
continue
|
||||
|
||||
# Aufräumen
|
||||
dbConn.commit()
|
||||
dbConn.close()
|
||||
40
wkOrg/readMe.md
Executable file
40
wkOrg/readMe.md
Executable file
@@ -0,0 +1,40 @@
|
||||
Python Scripts zur Verwaltung von Wettkampfterminen in einer SQLite Datenbank
|
||||
|
||||
Die einzelnen "Programme"
|
||||
- download.sh
|
||||
- Skript zum Herunterladen der Ausschreibungen
|
||||
- checkDownloads.py
|
||||
- sucht, welche Downloaddateien noch nicht in der Datenbank erfasst sind, und lässt sie den Benutzer hinzufügen (oder zum ignorieren vormerken)
|
||||
- getCVS.py
|
||||
- gibt die kommenden Wettkämpfe als csv aus zum Import in die Onlinedatenbank
|
||||
- die offline Datenbank kennt nicht:
|
||||
- die laufenden Nummern der Wettkämpfe in der Onlinedatenbank
|
||||
- den Inhalt der Onlinedatenbank
|
||||
Deshalb müssen:
|
||||
- die Reihenfolge der Spaltennamen muss beim Import in phpmyadmin manuell mit angegeben werden (Datum, Veranstaltung, Altersklassen, Ort, Ausschreibung, Routenplaner)
|
||||
- schon in der Onlinedatenbank vorhandene Wettkämpfe entfernt werden (wird auch so bleiben müssen, bis ich eine 'Synchronisation' der beiden Datenbanken hinbekomme)
|
||||
|
||||
Datenbankstruktur:
|
||||
|
||||
Tabellen:
|
||||
- downloads (Tabelle für alle Ausschreibungen im Downloadverzeichnis
|
||||
- id INTEGER PRIMARY KEY ASC
|
||||
- dateiname TEXT
|
||||
- sha256 TEXT
|
||||
- wkID TEXT (die IDs der Wettkämpfe dieser Ausschreibung per Whitespace getrennt)
|
||||
- adressen (Tabelle für die Addressen der Wettkampforte)
|
||||
- id INTEGER PRIMARY KEY ASC
|
||||
- verein TEXT
|
||||
- ort TEXT
|
||||
- plz TEXT
|
||||
- straße TEXT
|
||||
- hausnr TEXT
|
||||
- lat TEXT
|
||||
- lon TEXT
|
||||
- wk (Tabelle für die Wettkämpfe)
|
||||
- id INTEGER PRIMARY KEY ASC
|
||||
- name TEXT
|
||||
- datum TEXT
|
||||
- ak TEXT
|
||||
- adrID TEXT
|
||||
- ausschrID TEXT (id der ausschreibung in der downloadliste zum Wettkampf)
|
||||
1
wkOrg/wkScraper-JvsCal.py
Symbolic link
1
wkOrg/wkScraper-JvsCal.py
Symbolic link
@@ -0,0 +1 @@
|
||||
../submodules/wkOrg/src/wkScraper/wkScraper-JvsCal.py
|
||||
Reference in New Issue
Block a user