Add config for 2027

This commit is contained in:
2026-07-27 23:52:07 +02:00
parent 04dca24513
commit 3461b61e27
27 changed files with 1046 additions and 100 deletions
+15 -7
View File
@@ -10,7 +10,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode APIFootballUpdater --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "APIFootballUpdater", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -18,7 +18,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode MatchesCreatorFootball --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "MatchesCreatorFootball", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -26,7 +26,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode MatchesUpdaterFootball --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "MatchesUpdaterFootball", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -34,7 +34,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode MatchdaysUpdater --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "MatchdaysUpdater", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -42,7 +42,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode MatchesResultsUpdater --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "MatchesResultsUpdater", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -50,7 +50,7 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode MatchesListGistUpdater --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "MatchesListGistUpdater", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
@@ -58,7 +58,15 @@
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": " --mode TeamsUpdater --season 2026 --league 49 --configFile WM-Tippspiel"
"args": ["--mode", "TeamsUpdater", "--season", "2027", "--league", "1", "--configFile", "Tippliga"]
},
{
"type": "java",
"name": "SeasonPreparation",
"request": "launch",
"mainClass": "de.jeyp91.App",
"envFile": "${workspaceFolder}/.env",
"args": ["--mode", "SeasonPreparation", "--season", "2027", "--league", "0", "--configFile", "Dummy"]
}
]
}
+2 -1
View File
@@ -5,4 +5,5 @@
"envFile": "${workspaceFolder}/.env"
},
"java.debug.settings.onBuildFailureProceed": true,
}
"jdk.jdkhome": "/Users/julian/.local/share/mise/installs/java/22.0.2",
}
+20
View File
@@ -37,6 +37,26 @@ dependencies {
testImplementation 'org.testng:testng:7.10.2'
}
def envFile = file('.env')
if (envFile.exists()) {
def envVars = [:]
envFile.readLines().each { line ->
def trimmed = line.trim()
if (trimmed && !trimmed.startsWith('#')) {
def parts = trimmed.split('=', 2)
if (parts.size() == 2) {
def key = parts[0].trim()
def value = parts[1].trim()
if (value.startsWith('"') && value.endsWith('"')) {
value = value.substring(1, value.length() - 1)
}
envVars[key] = value
}
}
}
test { environment envVars }
}
jar {
manifest {
attributes(
+6 -1
View File
@@ -10,6 +10,7 @@ import de.jeyp91.tippliga.TLWMatchesResultsUpdater;
import de.jeyp91.tippliga.TLWMatchesUpdaterFootball;
import de.jeyp91.tippliga.TLWTeamsUpdater;
import de.jeyp91.tippligaforum.MatchesListForumUpdater;
import de.jeyp91.tippligaforum.SeasonForumPostsCreator;
import de.jeyp91.tippligaforum.TippligaConfigProvider;
import de.jeyp91.tippligaforum.TippligaSQLConnector;
import de.jeyp91.whatsapp.WhatsAppNotifier;
@@ -69,6 +70,10 @@ public class App {
MatchesListForumUpdater matchesListForumUpdater = new MatchesListForumUpdater();
matchesListForumUpdater.updateAllLeagues(season);
}
case "SeasonPreparation" -> {
SeasonForumPostsCreator creator = new SeasonForumPostsCreator(season);
creator.createAllPosts();
}
case "PostChecksum" -> {
TippligaConfigProvider configProvider = new TippligaConfigProvider(season);
String checksum = configProvider.getChecksumOfConfigPost(configFile);
@@ -96,7 +101,7 @@ public class App {
parser.addArgument("-m", "--mode")
.dest("mode")
.choices("MatchdaysUpdater", "MatchesCreatorFootball", "MatchesUpdaterFootball", "MatchesResultsUpdater", "TeamsUpdater", "APIFootballUpdater", "MatchesListGistUpdater", "PostChecksum", "WhatsAppNotifier")
.choices("MatchdaysUpdater", "MatchesCreatorFootball", "MatchesUpdaterFootball", "MatchesResultsUpdater", "TeamsUpdater", "APIFootballUpdater", "MatchesListGistUpdater", "PostChecksum", "WhatsAppNotifier", "SeasonPreparation")
.help("")
.required(true)
.type(String.class);
@@ -0,0 +1,137 @@
package de.jeyp91.tippligaforum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SeasonForumPostsCreator {
private static final Logger logger = LoggerFactory.getLogger(SeasonForumPostsCreator.class);
private static final String EMPTY_POST_CONTENT = "[code][/code]";
private static final String[] CONFIG_POSTS = {
"Supercup Tipper",
"WTL-Pokal Tipper",
"2. Tippliga Tipper",
"1. Tippliga Tipper",
"Relegation",
"Supercup",
"WTL-Pokal",
"Tippliga"
};
private static final String[] MATCH_LIST_POSTS = {
"World UEFA Super Cup",
"World UEFA Europa Conference League",
"World UEFA Europa League",
"World UEFA Champions League",
"Austria Bundesliga",
"Portugal Primeira Liga",
"Netherlands Eredivisie",
"Turkey Süper Lig",
"France Ligue 1",
"Italy Serie A",
"Spain La Liga",
"England Premier League",
"Germany Super Cup",
"Germany Frauen Bundesliga",
"Germany U19 Bundesliga",
"Germany Regionalliga - SudWest",
"Germany Regionalliga - Bayern",
"Germany 3. Liga",
"Germany 2. Bundesliga",
"Germany Bundesliga",
"Germany DFB Pokal"
};
private final int season;
private final TippligaWebsiteConnector connector;
private final TippligaSQLConnector sqlConnector;
public SeasonForumPostsCreator(int season) {
this.season = season;
try {
this.connector = new TippligaWebsiteConnector();
} catch (IOException e) {
throw new RuntimeException(e);
}
this.sqlConnector = TippligaSQLConnector.getInstance();
}
public void createAllPosts() {
Integer adminForumId = sqlConnector.getForumId("Admin");
if (adminForumId == null) {
logger.error("Forum 'Admin' not found. Aborting.");
return;
}
Integer tippligaConfigForumId = sqlConnector.getForumId("Tippliga-Config", adminForumId);
if (tippligaConfigForumId == null) {
logger.error("Forum 'Tippliga-Config' not found. Aborting.");
return;
}
Integer seasonForumId = sqlConnector.getForumId(String.valueOf(season), tippligaConfigForumId);
if (seasonForumId == null) {
logger.error("Forum '" + season + "' not found under Tippliga-Config. Aborting.");
return;
}
Integer ligenForumId = sqlConnector.getForumId("Ligen", seasonForumId);
if (ligenForumId == null) {
logger.error("Forum 'Ligen' not found under " + season + ". Aborting.");
return;
}
createConfigPosts(seasonForumId);
createMatchListPosts(ligenForumId);
}
private void createConfigPosts(int seasonForumId) {
logger.info("Creating config posts in forum " + season + "...");
for (String subject : CONFIG_POSTS) {
if (postExists(seasonForumId, subject)) {
logger.info("Config post '" + subject + "' already exists. Skipping.");
continue;
}
boolean success = connector.createPost(seasonForumId, subject, EMPTY_POST_CONTENT);
if (success) {
logger.info("Created config post: " + subject);
} else {
logger.error("Failed to create config post: " + subject);
}
}
}
private void createMatchListPosts(int ligenForumId) {
logger.info("Creating match list posts in " + season + " > Ligen...");
for (String subject : MATCH_LIST_POSTS) {
if (postExists(ligenForumId, subject)) {
logger.info("Match list post '" + subject + "' already exists. Skipping.");
continue;
}
boolean success = connector.createPost(ligenForumId, subject, EMPTY_POST_CONTENT);
if (success) {
logger.info("Created match list post: " + subject);
} else {
logger.error("Failed to create match list post: " + subject);
}
}
}
private boolean postExists(int forumId, String subject) {
String query = "SELECT COUNT(*) FROM phpbb_posts WHERE forum_id = " + forumId + " AND post_subject = '" + subject + "'";
ResultSet rset = sqlConnector.executeQuery(query);
try {
if (rset != null && rset.next()) {
return rset.getInt(1) > 0;
}
} catch (SQLException e) {
logger.error("Error checking if post exists", e);
}
return false;
}
}
@@ -218,6 +218,69 @@ public class TippligaWebsiteConnector {
this.lastFormToken = matcher.group(2);
}
public boolean createPost(int forumId, String subject, String message) {
String url = "https://tippliga-wuerzburg.de/posting.php?mode=post&f=" + forumId;
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(url))
.GET().build();
String reqBody = "";
try {
TimeUnit.SECONDS.sleep(1);
reqBody = client.send(req, HttpResponse.BodyHandlers.ofString()).body();
} catch (IOException | InterruptedException e) {
logger.error("Failed to fetch posting form", e);
return false;
}
Pattern pattern = Pattern.compile("^[\\s\\S]*<input type=\"hidden\" name=\"creation_time\" value=\"([\\d]{10})\" \\/>[\\s\\S]*<input type=\"hidden\" name=\"form_token\" value=\"([\\d\\w]{40})\" \\/>[\\s\\S]*$");
Matcher matcher = pattern.matcher(reqBody);
if (!matcher.find()) {
logger.error("Could not find CSRF tokens in posting form for forum " + forumId);
return false;
}
String creationTime = matcher.group(1);
String formToken = matcher.group(2);
Map<String, String> postParameters = new HashMap<>();
postParameters.put("subject", subject);
postParameters.put("message", message);
postParameters.put("creation_time", creationTime);
postParameters.put("form_token", formToken);
postParameters.put("post", "Absenden");
postParameters.put("attach_sig", "1");
postParameters.put("enable_bbcode", "1");
postParameters.put("enable_smilies", "1");
postParameters.put("enable_magic_url", "1");
String postForm = postParameters.entrySet()
.stream()
.map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
.collect(Collectors.joining("&"));
HttpRequest postReq = HttpRequest.newBuilder()
.uri(URI.create(url))
.headers("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(postForm))
.build();
try {
TimeUnit.SECONDS.sleep(1);
HttpResponse<String> response = client.send(postReq, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 302) {
logger.info("Created post '" + subject + "' in forum " + forumId);
return true;
}
logger.error("Failed to create post '" + subject + "' in forum " + forumId + ". Status: " + response.statusCode());
return false;
} catch (IOException | InterruptedException e) {
logger.error("Failed to create post", e);
return false;
}
}
private String getSidFromCookie() {
HttpCookie sidCookie = cookieStore.getCookies().get(2);
String sid = sidCookie.getValue();
@@ -1528,5 +1528,45 @@
"teamname": "Tunisia",
"tippligaID": 710,
"apiFootballID": 28
},
{
"teamname": "SC St. Tönis",
"tippligaID": 673,
"apiFootballID": 19466
},
{
"teamname": "Lüneburger SK Hansa",
"tippligaID": 76,
"apiFootballID": 1645
},
{
"teamname": "Eintracht Trier",
"tippligaID": 46,
"apiFootballID": 1627
},
{
"teamname": "SSV Jeddeloh",
"tippligaID": 124,
"apiFootballID": 1655
},
{
"teamname": "Krieschow",
"tippligaID": 675,
"apiFootballID": 14713
},
{
"teamname": "Westfalia Rhynern",
"tippligaID": 676,
"apiFootballID": 14826
},
{
"teamname": "HEBC",
"tippligaID": 677,
"apiFootballID": 16078
},
{
"teamname": "NEXT TEAM",
"tippligaID": 674,
"apiFootballID": 9999999
}
]
@@ -288,5 +288,10 @@
"team_id": 2139,
"team_name": "Dustin",
"team_name_short": "Dustin"
},
{
"team_id": 2140,
"team_name": "Marcel W.",
"team_name_short": "Marcel W."
}
]
@@ -0,0 +1,30 @@
{
"numberOfMatchdays": 1,
"matchesPerMatchday": 4,
"pointMode": 4,
"pointsTendency": 1,
"pointsDifference": 2,
"pointsDirectHit": 3,
"ko": 1,
"matchdayConfig": [
{
"TLWMatchday": 1,
"matchdayName": "Relegation",
"numberOfMatches": 4,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 35,
"showTable": true
},
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 79,
"leagueMatchday": 35,
"showTable": true
}
]
}
]
}
@@ -0,0 +1,54 @@
{
"numberOfMatchdays": 2,
"matchesPerMatchday": 4,
"pointMode": 4,
"pointsTendency": 1,
"pointsDifference": 2,
"pointsDirectHit": 3,
"ko": 1,
"matchdayConfig": [
{
"TLWMatchday": 1,
"matchdayName": "Supercup",
"numberOfMatches": 4,
"matchesConfig": [
{
"matchday": 1,
"matchtime": "2026-08-22 20:30",
"match": "Borussia Dortmund - Bayern München",
"showTable": false,
"matchLeague": 529,
"type": "SingleMatch",
"matchId": 1582362
},
{
"matchday": 1,
"matchtime": "2026-08-22 20:30",
"match": "Borussia Dortmund - Bayern München",
"showTable": false,
"matchLeague": 529,
"type": "SingleMatch",
"matchId": 1582362
},
{
"matchday": 1,
"matchtime": "2026-08-12 21:00",
"match": "Paris Saint Germain - Aston Villa",
"showTable": false,
"matchLeague": 531,
"type": "SingleMatch",
"matchId": 1583664
},
{
"matchday": 1,
"matchtime": "2026-08-12 21:00",
"match": "Paris Saint Germain - Aston Villa",
"showTable": false,
"matchLeague": 531,
"type": "SingleMatch",
"matchId": 1583664
}
]
}
]
}
@@ -0,0 +1,4 @@
{
"1": "Sascha",
"2": "Stefan"
}
@@ -0,0 +1,434 @@
{
"numberOfMatchdays": 39,
"matchesPerMatchday": 12,
"pointMode": 4,
"pointsTendency": 1,
"pointsDifference": 2,
"pointsDirectHit": 3,
"ko": 0,
"matchdayConfig": [
{
"TLWMatchday": 1,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 79,
"leagueMatchday": 1,
"showTable": false
}
]
},
{
"TLWMatchday": 2,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 79,
"leagueMatchday": 2,
"showTable": false
}
]
},
{
"TLWMatchday": 3,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 1,
"showTable": true
}
]
},
{
"TLWMatchday": 4,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 2,
"showTable": true
}
]
},
{
"TLWMatchday": 5,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 3,
"showTable": true
}
]
},
{
"TLWMatchday": 6,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 4,
"showTable": true
}
]
},
{
"TLWMatchday": 7,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 5,
"showTable": true
}
]
},
{
"TLWMatchday": 8,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 6,
"showTable": true
}
]
},
{
"TLWMatchday": 9,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 7,
"showTable": true
}
]
},
{
"TLWMatchday": 10,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 8,
"showTable": true
}
]
},
{
"TLWMatchday": 11,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 9,
"showTable": true
}
]
},
{
"TLWMatchday": 12,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 10,
"showTable": true
}
]
},
{
"TLWMatchday": 13,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 11,
"showTable": true
}
]
},
{
"TLWMatchday": 14,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 12,
"showTable": true
}
]
},
{
"TLWMatchday": 15,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 13,
"showTable": true
}
]
},
{
"TLWMatchday": 16,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 14,
"showTable": true
}
]
},
{
"TLWMatchday": 17,
"matchesConfig": [
{
"type": "Placeholder",
"placeholderDatetime": "2025-12-26 18:00:00"
}
]
},
{
"TLWMatchday": 18,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 15,
"showTable": true
}
]
},
{
"TLWMatchday": 19,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 16,
"showTable": true
}
]
},
{
"TLWMatchday": 20,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 17,
"showTable": true
}
]
},
{
"TLWMatchday": 21,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 18,
"showTable": true
}
]
},
{
"TLWMatchday": 22,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 19,
"showTable": true
}
]
},
{
"TLWMatchday": 23,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 20,
"showTable": true
}
]
},
{
"TLWMatchday": 24,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 21,
"showTable": true
}
]
},
{
"TLWMatchday": 25,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 22,
"showTable": true
}
]
},
{
"TLWMatchday": 26,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 23,
"showTable": true
}
]
},
{
"TLWMatchday": 27,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 24,
"showTable": true
}
]
},
{
"TLWMatchday": 28,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 25,
"showTable": true
}
]
},
{
"TLWMatchday": 29,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 26,
"showTable": true
}
]
},
{
"TLWMatchday": 30,
"matchesConfig": [
{
"type": "Placeholder",
"placeholderDatetime": "2026-03-17 18:00:00"
}
]
},
{
"TLWMatchday": 31,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 27,
"showTable": true
}
]
},
{
"TLWMatchday": 32,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 28,
"showTable": true
}
]
},
{
"TLWMatchday": 33,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 29,
"showTable": true
}
]
},
{
"TLWMatchday": 34,
"matchesConfig": [
{
"type": "Placeholder",
"placeholderDatetime": "2026-04-14 18:00:00"
}
]
},
{
"TLWMatchday": 35,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 30,
"showTable": true
}
]
},
{
"TLWMatchday": 36,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 31,
"showTable": true
}
]
},
{
"TLWMatchday": 37,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 32,
"showTable": true
}
]
},
{
"TLWMatchday": 38,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 33,
"showTable": true
}
]
},
{
"TLWMatchday": 39,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 78,
"leagueMatchday": 34,
"showTable": true
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"1": "Flo",
"2": "Michael",
"3": "Demian",
"4": "Sascha",
"5": "Maxi Z.",
"6": "Julian",
"7": "Dustin",
"8": "Kay",
"9": "Lukas",
"10": "Marcel U.",
"11": "TG Nürnberg",
"12": "Nicole",
"13": "Franz",
"14": "Tristan"
}
@@ -0,0 +1,16 @@
{
"1": "Philipp",
"2": "Marcel",
"3": "Matthias",
"4": "Max",
"5": "Marcel W.",
"6": "Friedrich",
"7": "Stefan",
"8": "Armin",
"9": "Barb",
"10": "Hilde",
"11": "Olli L.",
"12": "Jimmy",
"13": "Johannes",
"14": "Patrick"
}
@@ -0,0 +1,10 @@
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 1, '1. Tippliga Würzburg', '1TL', 1, 39, 12, '0', '0', '0', '0', 4, 3, 1, 2, 0, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 2, '2. Tippliga Würzburg', '2TL', 1, 39, 12, '0', '0', '0', '0', 4, 3, 1, 2, 0, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 45, 'Supercup', 'SC', 2, 1, 0, '0', '0', '0', '0', 4, 3, 1, 2, 0, 0, 0, 1, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 47, 'Relegation', 'REL', 2, 1, 0, '0', '0', '0', '0', 4, 3, 1, 2, 0, 0, 0, 1, 561, 0, 1, 0.00, 1);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 48, 'WTL-Pokal', 'WTL', 2, 5, 0, '0', '0', '0', '0', 4, 3, 1, 2, 0, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 51, '1. Tippliga Würzburg', '1TL', 1, 39, 7, '0', '0', '0', '0', 1, 0, 0, 0, 1, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 52, '2. Tippliga Würzburg', '2TL', 1, 39, 7, '0', '0', '0', '0', 1, 0, 0, 0, 1, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 95, 'Supercup', 'SC', 2, 2, 0, '0', '0', '0', '0', 1, 0, 0, 0, 1, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 97, 'Relegation', 'REL', 2, 1, 0, '0', '0', '0', '0', 1, 0, 0, 0, 1, 0, 0, 0, 561, 0, 1, 0.00, 0);
INSERT INTO `phpbb_footb_leagues` (`season`, `league`, `league_name`, `league_name_short`, `league_type`, `matchdays`, `matches_on_matchday`, `win_result`, `win_result_02`, `win_matchday`, `win_season`, `points_mode`, `points_result`, `points_tendency`, `points_diff`, `points_last`, `join_by_user`, `join_in_season`, `bet_in_time`, `rules_post_id`, `sort`, `bet_ko_type`, `bet_points`, `bet_type`) VALUES (2027, 98, 'WTL-Pokal', 'WTL', 2, 6, 0, '0', '0', '0', '0', 1, 0, 0, 0, 1, 0, 0, 0, 561, 0, 1, 0.00, 0);
@@ -0,0 +1,152 @@
{
"numberOfMatchdays": 5,
"matchesPerMatchday": 0,
"pointMode": 4,
"pointsTendency": 1,
"pointsDifference": 2,
"pointsDirectHit": 3,
"ko": 1,
"matchdayConfig": [
{
"TLWMatchday": 1,
"matchdayName": "1. Runde",
"numberOfMatches": 32,
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 1,
"showTable": true
},
{
"type": "Placeholder",
"placeholderDatetime": "2025-08-21 18:00:00"
}
]
},
{
"TLWMatchday": 2,
"numberOfMatches": 16,
"matchdayName": "Achtelfinale",
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 2,
"showTable": true
},
{
"type": "Placeholder",
"placeholderDatetime": "2025-10-27 18:00:00"
}
]
},
{
"TLWMatchday": 3,
"numberOfMatches": 8,
"matchdayName": "Viertelfinale",
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 3,
"showTable": true
},
{
"type": "Placeholder",
"placeholderDatetime": "2025-12-01 18:30:00"
}
]
},
{
"TLWMatchday": 4,
"numberOfMatches": 4,
"matchdayName": "Halbfinale",
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 4,
"showTable": true
},
{
"type": "Placeholder",
"placeholderDatetime": "2026-02-02 18:30:00"
}
]
},
{
"TLWMatchday": 5,
"numberOfMatches": 6,
"matchdayName": "Finale",
"matchesConfig": [
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 5,
"showTable": true
},
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 5,
"showTable": true
},
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 6,
"showTable": true
},
{
"type": "AllMatchesOfMatchday",
"matchesLeague": 81,
"leagueMatchday": 6,
"showTable": true
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-04-20 20:45:00",
"formulaHome": "D",
"formulaGuest": "D"
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-04-20 20:45:00",
"formulaHome": "D",
"formulaGuest": "D"
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-04-20 20:45:00",
"formulaHome": "D",
"formulaGuest": "D"
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-04-20 20:45:00",
"formulaHome": "D",
"formulaGuest": "D"
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-05-29 20:00:00",
"formulaHome": "W 61",
"formulaGuest": "W 63"
},
{
"type": "PlaceholderSingleMatch",
"koMatch": true,
"placeholderDatetime": "2026-05-29 20:00:00",
"formulaHome": "W 62",
"formulaGuest": "W 64"
}
]
}
]
}
@@ -0,0 +1,26 @@
{
"1": "Matthias",
"2": "Marcel U.",
"3": "Marcel",
"4": "Dustin",
"5": "Johannes",
"6": "Tristan",
"7": "Philipp",
"8": "Nicole",
"9": "Barb",
"10": "TG Nürnberg",
"11": "Marcel W.",
"12": "Maxi Z.",
"13": "Olli L.",
"14": "Lukas",
"15": "Jimmy",
"16": "Franz",
"17": "Armin",
"18": "Demian",
"19": "Hilde",
"20": "Kay",
"21": "Patrick",
"22": "Flo",
"23": "Stefan",
"24": "Max"
}
@@ -1,11 +1,11 @@
package de.jeyp91.apifootball;
import org.junit.Test;
import java.util.ArrayList;
public class APIFootballConnectorTest {
import org.junit.Test;
public class APIFootballConnectorTest {
/*
@Test
public void APITestGetMatchDataOfMatchdayBundesliga() {
APIFootballConnector apiFootballConnector = APIFootballConnector.getAPIFootballConnectorInstance(2020);
@@ -13,4 +13,5 @@ public class APIFootballConnectorTest {
assert matchesOfMatchday.get(0).getTeamIdHome() == 744;
assert matchesOfMatchday.get(0).getTeamIdGuest() == 159;
}
*/
}
@@ -6,7 +6,7 @@ import org.junit.Test;
import static de.jeyp91.apifootball.APIFootballConnector.stringToJSONObject;
public class APIFootballMatchTest {
/*
@Test
public void withExtratime() throws Exception {
String matchString = "{\"fixture_id\":958530,\"league_id\":4303,\"league\":{\"name\":\"DFB Pokal\",\"country\":\"Germany\",\"logo\":\"https:\\/\\/media-3.api-sports.io\\/football\\/leagues\\/81.png\",\"flag\":\"https:\\/\\/media-1.api-sports.io\\/flags\\/de.svg\"},\"event_date\":\"2022-10-19T18:00:00+02:00\",\"event_timestamp\":1666195200,\"firstHalfStart\":1666195200,\"secondHalfStart\":1666198800,\"round\":\"2nd Round\",\"status\":\"Match Finished\",\"statusShort\":\"PEN\",\"elapsed\":120,\"venue\":\"Home Deluxe Arena\",\"referee\":\"Frank Willenborg, Germany\",\"homeTeam\":{\"team_id\":185,\"team_name\":\"SC Paderborn 07\",\"logo\":\"https:\\/\\/media-2.api-sports.io\\/football\\/teams\\/185.png\"},\"awayTeam\":{\"team_id\":162,\"team_name\":\"Werder Bremen\",\"logo\":\"https:\\/\\/media-3.api-sports.io\\/football\\/teams\\/162.png\"},\"goalsHomeTeam\":2,\"goalsAwayTeam\":2,\"score\":{\"halftime\":\"2-0\",\"fulltime\":\"2-2\",\"extratime\":\"0-0\",\"penalty\":\"5-4\"}}";
@@ -20,4 +20,5 @@ public class APIFootballMatchTest {
JSONObject matchJson = stringToJSONObject(matchString);
APIFootballMatch match = new APIFootballMatch(matchJson, 2023);
}
*/
}
@@ -4,8 +4,8 @@ import org.junit.Test;
public class APIFootballUpdaterTest {
int season = 2026;
int season = 2027;
/*
@Test
public void checkErrorsTest() {
String rateLimitError = "{\"results\":0,\"errors\":{\"rateLimit\":\"Too many requests. Your rate limit is 10 requests per minute.\"}}";
@@ -41,4 +41,5 @@ public class APIFootballUpdaterTest {
APIFootballUpdater updater = new APIFootballUpdater();
updater.updateAllRounds(season);
}
*/
}
@@ -1,77 +0,0 @@
package de.jeyp91.openligadb;
import org.junit.Test;
import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class OpenLigaDBConnectorTest {
@Test
public void APITestGetMatchDataOfMatchdayBundesliga() {
OpenLigaDBConnector openLigaDBConnector = new OpenLigaDBConnector();
ArrayList<OpenLigaDBMatch> matches = openLigaDBConnector.getMatchDataOfMatchday(2020, "bl1", 1);
assertEquals(9, matches.size());
OpenLigaDBMatch match;
match = matches.get(0);
assertEquals((Integer) 55277, match.getMatchId());
assertEquals((Integer) 40, match.getTeamIdHome());
assertEquals((Integer) 54, match.getTeamIdGuest());
assertEquals((Integer) 2020, match.getSeason());
assertEquals("2019-08-16T20:30:00", match.getMatchDateTime());
assertEquals((Integer) 1, match.getMatchday());
assertEquals((Integer) 2, match.getGoalsHome());
assertEquals((Integer) 2, match.getGoalsGuest());
assertTrue(match.getMatchIsFinished());
match = matches.get(1);
assertEquals((Integer) 55278, match.getMatchId());
assertEquals((Integer) 7, match.getTeamIdHome());
assertEquals((Integer) 95, match.getTeamIdGuest());
assertEquals((Integer) 2020, match.getSeason());
assertEquals("2019-08-17T15:30:00", match.getMatchDateTime());
assertEquals((Integer) 1, match.getMatchday());
assertEquals((Integer) 5, match.getGoalsHome());
assertEquals((Integer) 1, match.getGoalsGuest());
assertTrue(match.getMatchIsFinished());
}
@Test
public void APITestGetMatchDataOfMatchdayDFBPokal() {
OpenLigaDBConnector openLigaDBConnector = new OpenLigaDBConnector();
ArrayList<OpenLigaDBMatch> matches = openLigaDBConnector.getMatchDataOfMatchday(2020, "dfb2019", 1);
assert matches.size() == 32;
OpenLigaDBMatch match = matches.get(0);
assertEquals((Integer) 54926, match.getMatchId());
assertEquals((Integer) 563, match.getTeamIdHome());
assertEquals((Integer) 7, match.getTeamIdGuest());
assertEquals((Integer) 2020, match.getSeason());
assertEquals("2019-08-09T20:45:00", match.getMatchDateTime());
assertEquals((Integer) 1, match.getMatchday());
assertEquals((Integer) 0, match.getGoalsHome());
assertEquals((Integer) 2, match.getGoalsGuest());
assertTrue(match.getMatchIsFinished());
}
@Test
public void APITestGetMatchDataOfSingleMatch() {
OpenLigaDBConnector openLigaDBConnector = new OpenLigaDBConnector();
OpenLigaDBMatch match = openLigaDBConnector.getMatchDataOfSingleMatch(55583);
assertEquals((Integer) 55583, match.getMatchId());
assertEquals((Integer) 16, match.getTeamIdHome());
assertEquals((Integer) 55, match.getTeamIdGuest());
assertEquals((Integer) 2020, match.getSeason());
assertEquals("2019-07-26T20:30:00", match.getMatchDateTime());
assertEquals((Integer) 1, match.getMatchday());
assertEquals((Integer) 2, match.getGoalsHome());
assertEquals((Integer) 1, match.getGoalsGuest());
assertTrue(match.getMatchIsFinished());
}
}
@@ -7,7 +7,7 @@ import org.junit.Test;
public class TLWMatchdaysCreatorTest {
int season = 2026;
int season = 2027;
@Test
public void getMatchdaysTippligaTest() {
@@ -1,14 +1,13 @@
package de.jeyp91.tippliga;
import org.junit.Test;
import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class TLWMatchesCreatorFootballTest {
int season = 2026;
int season = 2027;
@Test
public void getMatchesTest() {
@@ -4,7 +4,7 @@ import org.junit.Test;
public class TLWMatchesCreatorTipperPokalTest {
int season = 2026;
int season = 2027;
@Test
public void getMatchesWTLPokalTest() {
@@ -4,7 +4,7 @@ import org.junit.Test;
public class TLWMatchesCreatorTipperTest {
int season = 2026;
int season = 2027;
@Test
public void getMatchesTippliga1Test() {
@@ -4,7 +4,7 @@ import org.junit.Test;
public class TLWMatchesUpdaterFootballTest {
int season = 2026;
int season = 2027;
@Test
public void getUpdateSqlTest1() {
TLWMatchesUpdaterFootball updater = new TLWMatchesUpdaterFootball(season, 1, "Tippliga");
@@ -6,7 +6,7 @@ import org.junit.Test;
public class TLWTeamsCreatorTest {
int season = 2026;
int season = 2027;
@Test
public void getTeamsTippligaFootball1Test() {