Jelajahi Sumber

EU Odds renamed to Decimal Odds

Axel Nordh 2 tahun lalu
induk
melakukan
76189e316b
5 mengubah file dengan 76 tambahan dan 79 penghapusan
  1. 6 0
      Odds/Odds.iml
  2. 6 0
      Odds/pom.xml
  3. 24 33
      Odds/src/main/ArbChecker.java
  4. 1 1
      Odds/src/main/Main.java
  5. 39 45
      Odds/src/parser/OddsPortal.java

+ 6 - 0
Odds/Odds.iml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4">
+  <component name="SonarLintModuleSettings">
+    <option name="uniqueId" value="d6b144e4-d932-4b3a-92c5-6159fd59636c" />
+  </component>
+</module>

+ 6 - 0
Odds/pom.xml

@@ -104,6 +104,12 @@
 	    <artifactId>guava</artifactId>
 	    <version>31.1-jre</version>
 	</dependency>
+
+      <dependency>
+          <groupId>io.github.bonigarcia</groupId>
+          <artifactId>webdrivermanager</artifactId>
+          <version>5.5.3</version>
+      </dependency>
   </dependencies>
   
 </project>

+ 24 - 33
Odds/src/main/ArbChecker.java

@@ -10,6 +10,8 @@ import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import object.ArbResults;
 import parser.BWinParser;
@@ -44,8 +46,7 @@ public class ArbChecker {
         printResultsToArrayFile(betHardResults, "BetHard.csv");
 
         BWinParser bwin = new BWinParser();
-        bWinResults
-                .addAll(bwin.parseSoccerMatches().stream().map(m -> new ArbResults(m, BWinParser.BOOKIE)).toList());
+        bWinResults.addAll(bwin.parseSoccerMatches().stream().map(m -> new ArbResults(m, BWinParser.BOOKIE)).toList());
         printResultsToArrayFile(bWinResults, BWinParser.BOOKIE + ".csv");
 
         getResultsFromFile("NordicBet.csv", nordicBetMatches, "NordicBet");
@@ -78,22 +79,16 @@ public class ArbChecker {
         for (SimpleEntry<String, List<ArbResults>> list : resultLists) {
             for (ArbResults match : list.getValue()) {
 
-                List<String> homeTeamParts = Arrays
-                        .asList(match.getHomeTeam().replaceAll(replaceParentecesRegEx, "").trim().split(" "));
-                List<String> awayTeamParts = Arrays
-                        .asList(match.getAwayTeam().replaceAll(replaceParentecesRegEx, "").trim().split(" "));
+                List<String> homeTeamParts =
+                        Arrays.asList(match.getHomeTeam().replaceAll(replaceParentecesRegEx, "").trim().split(" "));
+                List<String> awayTeamParts =
+                        Arrays.asList(match.getAwayTeam().replaceAll(replaceParentecesRegEx, "").trim().split(" "));
 
-                List<ArbResults> homeTeamFound = addedMatches.stream()
-                        .filter(p -> p.getHomeTeam().replaceAll(replaceParentecesRegEx, "")
-                                .trim().equals(match.getHomeTeam().replaceAll(replaceParentecesRegEx, "")
-                                        .trim()))
-                        .toList();
+                List<ArbResults> homeTeamFound =
+                        addedMatches.stream().filter(p -> p.getHomeTeam().replaceAll(replaceParentecesRegEx, "").trim().equals(match.getHomeTeam().replaceAll(replaceParentecesRegEx, "").trim())).toList();
 
-                List<ArbResults> awayTeamFound = addedMatches.stream()
-                        .filter(p -> p.getAwayTeam().replaceAll(replaceParentecesRegEx, "")
-                                .trim().equals(match.getAwayTeam().replaceAll(replaceParentecesRegEx, "")
-                                        .trim()))
-                        .toList();
+                List<ArbResults> awayTeamFound =
+                        addedMatches.stream().filter(p -> p.getAwayTeam().replaceAll(replaceParentecesRegEx, "").trim().equals(match.getAwayTeam().replaceAll(replaceParentecesRegEx, "").trim())).toList();
 
                 if (homeTeamFound.isEmpty() || awayTeamFound.isEmpty()) {
                     addedMatches.add(new ArbResults(match.getHomeTeam(), match.getAwayTeam(), match.getOdds1(),
@@ -114,11 +109,13 @@ public class ArbChecker {
                     awayTeamFound.get(0).addUnder25Odds(list.getKey(), match.getUnder25());
                 } else if (homeTeamFound.size() > 1) {
                     for (ArbResults htf : homeTeamFound) {
-                        System.out.println("Multiple found home " + htf);
+                        Logger.getGlobal().logp(Level.WARNING, this.getClass().getName(),
+                                this.getClass().getEnclosingMethod().getName(), "Multiple " + "found home " + htf);
                     }
                 } else if (awayTeamFound.size() > 1) {
                     for (ArbResults atf : awayTeamFound) {
-                        System.out.println("Multiple found away " + atf);
+                        Logger.getGlobal().logp(Level.WARNING, this.getClass().getName(),
+                                this.getClass().getEnclosingMethod().getName(), "Multiple found away " + atf);
                     }
                 }
             }
@@ -127,29 +124,25 @@ public class ArbChecker {
         List<ArbResults> GOGOList = new ArrayList<>();
         for (ArbResults match : addedMatches) {
             if (match.multipleOddsExist()) {
-                if (calculateArbValue3Part(match) < 1.0f
-                        || match.getArbValueOverUnder() > 0f && match.getArbValueOverUnder() < 1.0f) {
+                if (calculateArbValue3Part(match) < 1.0f || match.getArbValueOverUnder() > 0f && match.getArbValueOverUnder() < 1.0f) {
                     GOGOList.add(match);
                 } else {
-                    System.out.println("Result " + match.toStringWithExtra() + " arb value "
-                            + calculateArbValue3Part(match) + " OverUnderVal " + match.getArbValueOverUnder());
+                    System.out.println("Result " + match.toStringWithExtra() + " arb value " + calculateArbValue3Part(match) + " OverUnderVal " + match.getArbValueOverUnder());
                 }
             }
         }
         for (ArbResults match : GOGOList) {
-            System.out.println("GOGOGOGOGOGO Result " + match.toStringWithExtra() + " arb value "
-                    + calculateArbValue3Part(match) + " Over Under arb value" + match.getArbValueOverUnder());
+            System.out.println("GOGOGOGOGOGO Result " + match.toStringWithExtra() + " arb value " + calculateArbValue3Part(match) + " Over Under arb value" + match.getArbValueOverUnder());
         }
     }
 
     private float calculateArbValue3Part(ArbResults res) {
-        return (1 / res.getMaxOdds1().getOdds()) + (1 / res.getMaxOddsX().getOdds())
-                + (1 / res.getMaxOdds2().getOdds());
+        return (1 / res.getMaxOdds1().getOdds()) + (1 / res.getMaxOddsX().getOdds()) + (1 / res.getMaxOdds2().getOdds());
     }
 
     private void printResultsToArrayFile(List<ArbResults> results, String fileName) {
-        try (BufferedWriter bw = new BufferedWriter(
-                new FileWriter(System.getProperty("user.dir") + File.separator + fileName))) {
+        try (BufferedWriter bw =
+                     new BufferedWriter(new FileWriter(System.getProperty("user.dir") + File.separator + fileName))) {
             StringBuilder sb = new StringBuilder();
 
             for (ArbResults r : results) {
@@ -164,16 +157,14 @@ public class ArbChecker {
     }
 
     private void getResultsFromFile(String fileName, List<ArbResults> resultsList, String bookie) {
-        try (BufferedReader br = new BufferedReader(
-                new FileReader(System.getProperty("user.dir") + File.separator + fileName))) {
+        try (BufferedReader br =
+                     new BufferedReader(new FileReader(System.getProperty("user.dir") + File.separator + fileName))) {
 
             String line;
             while ((line = br.readLine()) != null) {
                 String[] values = line.split(",");
                 resultsList.add(new ArbResults(values[0], values[1], Float.parseFloat(values[2]),
-                        Float.parseFloat(values[3]),
-                        Float.parseFloat(values[4]),
-                        Float.parseFloat(values[5]),
+                        Float.parseFloat(values[3]), Float.parseFloat(values[4]), Float.parseFloat(values[5]),
                         Float.parseFloat(values[6]), bookie));
             }
         } catch (IOException e) {

+ 1 - 1
Odds/src/main/Main.java

@@ -53,7 +53,7 @@ public class Main {
         op.getMatches(LocalDateTime.now().plusDays(-1));
         System.out.println("Getting Today days ago matches");
         op.getMatches(LocalDateTime.now().plusDays(0));
-        System.out.println("Getting Tomorrows matches");
+         System.out.println("Getting Tomorrows matches");
         op.getMatches(LocalDateTime.now().plusDays(1));
         System.out.println("Getting Next days matches");
         op.getMatches(LocalDateTime.now().plusDays(2));

+ 39 - 45
Odds/src/parser/OddsPortal.java

@@ -1,5 +1,17 @@
 package parser;
 
+import com.google.common.base.Stopwatch;
+import com.google.common.base.Strings;
+import mysql.Mysql;
+import object.ResultDTO;
+import org.openqa.selenium.By;
+import org.openqa.selenium.StaleElementReferenceException;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.time.Duration;
@@ -13,34 +25,17 @@ import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.openqa.selenium.By;
-import org.openqa.selenium.Platform;
-import org.openqa.selenium.StaleElementReferenceException;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import org.openqa.selenium.remote.RemoteWebDriver;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-import com.google.common.base.Stopwatch;
-import com.google.common.base.Strings;
-
-import mysql.Mysql;
-import object.ResultDTO;
-
 public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
 
-    private static final String DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV = "//div[contains(@class,'tabs')]/div[not(@class)]/div[1]/div";
+    private static final String DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV = "//div[contains(@class,'tabs')" +
+            "]/div[not(@class)]/div[1]/div";
     private static final String SOCCER_RESULTS_TABLE_NAME = "SoccerResults";
     private static final String DATE_PATTERN = "yyyyMMdd";
+    final int sportsId = Mysql.getInstance().getSportId("soccer");
     private LocalDateTime baseDate;
     private int sportId;
     private int countryId;
     private int leagueId;
-
-    final int sportsId = Mysql.getInstance().getSportId("soccer");
     private int currentLeagueId;
     private int currentCountryId;
     private List<ResultDTO> resultsToInsert = new ArrayList<>();
@@ -52,8 +47,8 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
         System.out.println("Starting to get matches at date " + dateFormatted);
         Stopwatch stopwatch = Stopwatch.createStarted();
         getMatchesByDateSelenium(dateFormatted);
-        System.out.println(
-                "Done with date " + dateFormatted + " took " + stopwatch.elapsed(TimeUnit.SECONDS) + " seconds");
+        System.out.println("Done with date " + dateFormatted + " took " + stopwatch.elapsed(TimeUnit.SECONDS) + " " +
+                "seconds");
         stopwatch.stop();
     }
 
@@ -93,7 +88,6 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
         try {
             parseSoccerMatchesSelenium(soccerUrl);
         } catch (MalformedURLException e) {
-            // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
@@ -117,34 +111,39 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
 
         // Changing the user agent / browser fingerprint
         options.addArguments("window-size=1920,1080");
-        options.addArguments(
-                "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");
+        options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like " +
+                "Gecko) " + "Chrome/74.0.3729.169 Safari/537.36");
 
         // Other
         options.addArguments("disable-infobars");
 
+
+        System.out.println("Getting page");
+
         RemoteWebDriver driver = new RemoteWebDriver(new URL("http://nordh.xyz:4444/wd/hub"), options);
+
         sportId = Mysql.getInstance().getSportId("soccer");
         driver.get(soccerUrl);
 
+
+        System.out.println("Waiting for elements");
         WebDriverWait wait = getWaitDriver(driver, 90);
 
-        wait.until(ExpectedConditions
-                .numberOfElementsToBeMoreThan(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV), 1));
+        wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV), 1));
 
-        if (!checkIfElementExists(driver, "//p[text()='EU Odds']")) {
-            WebElement oddsFormat = driver
-                    .findElement(By.xpath("//p[@class='self-center text-xs text-orange-main'][1]"));
+        System.out.println("Switching odds");
+        if (!checkIfElementExists(driver, "//p[text()='Decimal Odds']")) {
+            WebElement oddsFormat = driver.findElement(By.xpath("//p[@class='self-center text-xs " +
+                    "text-orange-main'][1]"));
 
             oddsFormat.click();
 
-            driver.findElement(By.xpath("//a[text()='EU Odds']")).click();
+            driver.findElement(By.xpath("//a[text()='Decimal Odds']")).click();
             wait.withTimeout(Duration.ofSeconds(30));
         }
 
-        List<WebElement> divs = driver
-                .findElements(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV));
-
+        List<WebElement> divs = driver.findElements(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV));
+        System.out.println("Start Working on matches");
         boolean staleElementRetried = false;
         for (int i = 0; i < divs.size(); i++) {
             try {
@@ -189,8 +188,7 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
                         resultsToInsert.clear();
                     }
                 }
-                divs = driver
-                        .findElements(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV));
+                divs = driver.findElements(By.xpath(DIV_CONTAINS_CLASS_TABS_DIV_NOT_CLASS_DIV_1_DIV));
             } catch (StaleElementReferenceException e) {
                 if (staleElementRetried) {
                     System.out.println("Stale element have already been retried continueing");
@@ -203,8 +201,7 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
             }
         }
 
-        String message = "INSERTING LAST " + resultsToInsert.size()
-                + " results";
+        String message = "INSERTING LAST " + resultsToInsert.size() + " results";
         Logger.getGlobal().log(Level.INFO, message);
         Mysql.getInstance().addResults(resultsToInsert);
         resultsToInsert.clear();
@@ -230,9 +227,7 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
             time.add(0);
             time.add(0);
         }
-        final LocalDateTime dt = baseDate.withHour(time.get(0))
-                .withMinute(time.get(1)).withSecond(0)
-                .withNano(0);
+        final LocalDateTime dt = baseDate.withHour(time.get(0)).withMinute(time.get(1)).withSecond(0).withNano(0);
 
         result.setGameDate(dt);
     }
@@ -246,6 +241,7 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
         } catch (NumberFormatException e) {
             // Skip this one
         } catch (IndexOutOfBoundsException e) {
+            System.out.println("Index out of bounds for result: ");
             System.out.println(result);
         }
 
@@ -274,10 +270,8 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
         result.setHomeTeam(homeTeamName);
         result.setAwayTeam(awayTeamName);
 
-        result.setHomeTeamId(
-                Mysql.getInstance().getOrInsertTeam(homeTeamName, countryId, leagueId, sportId));
-        result.setAwayTeamId(
-                Mysql.getInstance().getOrInsertTeam(awayTeamName, countryId, leagueId, sportId));
+        result.setHomeTeamId(Mysql.getInstance().getOrInsertTeam(homeTeamName, countryId, leagueId, sportId));
+        result.setAwayTeamId(Mysql.getInstance().getOrInsertTeam(awayTeamName, countryId, leagueId, sportId));
     }
 
 }