commit abcd9ff04df03e769948268566e94cd0b747c65f Author: Radek Davidek Date: Sat Nov 1 15:51:37 2025 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ebd831b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +servers +target +bin +.settings +.metadata +.classpath +.project + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..09db905 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:11 +COPY target/*.jar /tmp +WORKDIR /tmp +CMD ["java", "-jar", "cz-basketball-scraper-1.0-SNAPSHOT.jar"] diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..435afe3 --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + cz.kamma.czb + cz-basketball-scraper + 1.0-SNAPSHOT + + + + maven-compiler-plugin + + + maven-shade-plugin + 3.5.0 + + + package + + shade + + + + + cz.kamma.czb.BasketballServer + + + + + + + + + + 11 + 11 + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b8eaf1b --- /dev/null +++ b/pom.xml @@ -0,0 +1,52 @@ + + 4.0.0 + cz.kamma.czb + cz-basketball-scraper + 1.0-SNAPSHOT + + + 11 + 11 + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.17.3 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.0 + + + package + shade + + + + cz.kamma.czb.BasketballServer + + + + + + + + + diff --git a/src/main/java/cz/kamma/czb/BasketballServer.java b/src/main/java/cz/kamma/czb/BasketballServer.java new file mode 100644 index 0000000..d66bf41 --- /dev/null +++ b/src/main/java/cz/kamma/czb/BasketballServer.java @@ -0,0 +1,110 @@ +package cz.kamma.czb; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class BasketballServer { + + private static JsonNode cachedData; + private static final Object lock = new Object(); + + public static void main(String[] args) throws Exception { + fetchDataForDate("Sat Nov 01 2025 01:00:00 GMT+0100 (Central European Standard Time)"); // inicialní fetch + + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + scheduler.scheduleAtFixedRate(() -> fetchDataForDate("Sat Nov 01 2025 01:00:00 GMT+0100 (Central European Standard Time)"), + 5, 5, TimeUnit.MINUTES); + + HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); + server.createContext("/api/matches", new ApiHandler()); + server.createContext("/", new WebHandler("src/main/resources/index.html")); + server.setExecutor(Executors.newFixedThreadPool(4)); + server.start(); + + System.out.println("Server running at http://localhost:8000/"); + } + + // --- fetch dat pro určité datum --- + private static JsonNode fetchDataForDate(String dateParam) { + try { + String urlString = "https://cz.basketball/?do=customHomepage-getLeagues&date=" + + URLEncoder.encode(dateParam, StandardCharsets.UTF_8) + "&categories="; + URL url = new URL(urlString); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("Cookie", "cc_cookie={\"level\":[\"necessary\",\"analytics\",\"targeting\",\"social\"],\"revision\":0,\"data\":null,\"rfc_cookie\":false}; _ga_YVJ6WB27SJ=GS2.2.s1746868725$o1$g1$t1746868780$j0$l0$h0; _ga_QHKEFEZRL5=GS2.1.s1761514243$o7$g1$t1761514385$j60$l0$h0; _nss=1; PHPSESSID=0dmq2ps6c0dv5bhdg5ukjjl6e7; _gid=GA1.2.1121240707.1762001487; _gat_UA-12082319-2=1; _ga=GA1.2.1277704385.1746363814; _ga_JYB7G0MLMT=GS2.1.s1762001486$o30$g1$t1762001571$j60$l0$h0"); // nahraď platnou cookie + + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8)); + StringBuilder content = new StringBuilder(); + String line; + while ((line = in.readLine()) != null) content.append(line); + in.close(); + con.disconnect(); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode data = mapper.readTree(content.toString()); + synchronized (lock) { cachedData = data; } + System.out.println("Data fetched successfully for date: " + dateParam); + return data; + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + // --- REST API handler --- + static class ApiHandler implements HttpHandler { + @Override + public void handle(HttpExchange exchange) throws IOException { + String query = exchange.getRequestURI().getQuery(); + String dateParam = "Sat Nov 01 2025 01:00:00 GMT+0100 (Central European Standard Time)"; + + if (query != null && query.contains("date=")) { + dateParam = java.net.URLDecoder.decode(query.split("date=")[1], StandardCharsets.UTF_8); + } + + JsonNode data = fetchDataForDate(dateParam); + String response = data != null ? data.toString() : "{}"; + + exchange.getResponseHeaders().set("Content-Type", "application/json; charset=UTF-8"); + exchange.sendResponseHeaders(200, response.getBytes(StandardCharsets.UTF_8).length); + OutputStream os = exchange.getResponseBody(); + os.write(response.getBytes(StandardCharsets.UTF_8)); + os.close(); + } + } + + // --- Web UI handler --- + static class WebHandler implements HttpHandler { + private final String htmlFile; + + public WebHandler(String htmlFile) { this.htmlFile = htmlFile; } + + @Override + public void handle(HttpExchange exchange) throws IOException { + File file = new File(htmlFile); + if (!file.exists()) { exchange.sendResponseHeaders(404, -1); return; } + + byte[] bytes = java.nio.file.Files.readAllBytes(file.toPath()); + exchange.getResponseHeaders().set("Content-Type", "text/html; charset=UTF-8"); + exchange.sendResponseHeaders(200, bytes.length); + OutputStream os = exchange.getResponseBody(); + os.write(bytes); + os.close(); + } + } +} diff --git a/src/main/resources/index.html b/src/main/resources/index.html new file mode 100644 index 0000000..6913581 --- /dev/null +++ b/src/main/resources/index.html @@ -0,0 +1,194 @@ + + + + CZ.Basketball - zápasy + + + + + + +

CZ.Basketball - zápasy

+ + + + + + + + + + + + + + + + + + + + + +
ČasLigaDomácíHostéPreviewLiveTV
+ + + +