Add config for 2027
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user