diff --git a/src/main/java/de/jeyp91/App.java b/src/main/java/de/jeyp91/App.java index 26c2f97..d54ea0d 100644 --- a/src/main/java/de/jeyp91/App.java +++ b/src/main/java/de/jeyp91/App.java @@ -1,5 +1,6 @@ package de.jeyp91; import de.jeyp91.apifootball.APIFootballUpdater; +import de.jeyp91.gists.MatchesListGistUpdater; import de.jeyp91.tippliga.*; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; @@ -50,6 +51,10 @@ public class App { APIFootballUpdater apiFootballUpdater = new APIFootballUpdater(season); apiFootballUpdater.updateAllFixtures(configFile); break; + case "MatchesListGistUpdater": + MatchesListGistUpdater matchesListGistUpdater = new MatchesListGistUpdater(configFile); + matchesListGistUpdater.updateAllLeagues(); + break; default: break; } @@ -70,7 +75,7 @@ public class App { parser.addArgument("-m", "--mode") .dest("mode") - .choices("MatchdaysUpdater", "MatchesCreatorFootball", "MatchesUpdaterFootball", "TeamsUpdater", "APIFootballUpdater") + .choices("MatchdaysUpdater", "MatchesCreatorFootball", "MatchesUpdaterFootball", "TeamsUpdater", "APIFootballUpdater", "MatchesListGistUpdater") .help("") .required(true) .type(String.class); diff --git a/src/main/java/de/jeyp91/apifootball/APIFootballUpdater.java b/src/main/java/de/jeyp91/apifootball/APIFootballUpdater.java index 6cd7281..f29f37c 100644 --- a/src/main/java/de/jeyp91/apifootball/APIFootballUpdater.java +++ b/src/main/java/de/jeyp91/apifootball/APIFootballUpdater.java @@ -64,7 +64,7 @@ public class APIFootballUpdater { this.provider.updateGist(id, filename, content); } - private HashSet getAllLeaguesFromLeagueConfig(String config) { + public static HashSet getAllLeaguesFromLeagueConfig(String config) { HashSet leagues = new HashSet<>(); diff --git a/src/main/java/de/jeyp91/gists/MatchesListCreator.java b/src/main/java/de/jeyp91/gists/MatchesListCreator.java index 46e115b..4d5dddd 100644 --- a/src/main/java/de/jeyp91/gists/MatchesListCreator.java +++ b/src/main/java/de/jeyp91/gists/MatchesListCreator.java @@ -4,9 +4,14 @@ import com.google.gson.*; import org.json.simple.JSONArray; import org.json.simple.JSONObject; +import java.util.ArrayList; +import java.util.Comparator; + public class MatchesListCreator { private final JSONObject matches = new JSONObject(); + private final String country; + private final String leagueName; public MatchesListCreator(int league) { GistProvider provider = GistProvider.getInstance(); @@ -15,22 +20,23 @@ public class MatchesListCreator { JSONArray matchesAPIFootball = (JSONArray) api.get("fixtures"); JSONObject firstMatchAPIFootball = (JSONObject) matchesAPIFootball.get(0); JSONObject leagueObject = (JSONObject) firstMatchAPIFootball.get("league"); - String country = leagueObject.get("country").toString(); - String leagueName = leagueObject.get("name").toString(); - matches.put("country", country); - matches.put("leagueName", leagueName); + this.country = leagueObject.get("country").toString(); + this.leagueName = leagueObject.get("name").toString(); + matches.put("country", this.country); + matches.put("leagueName", this.leagueName); matches.put("leagueId", league); populateMatches(matchesAPIFootball); } private void populateMatches(JSONArray matchesAPIFootball) { + matchesAPIFootball = sortFixtures(matchesAPIFootball); JSONArray matches = new JSONArray(); for(Object matchAPIFootballObject : matchesAPIFootball) { JSONObject matchAPIFootball = (JSONObject) matchAPIFootballObject; JSONObject match = new JSONObject(); String matchday = matchAPIFootball.get("round").toString(); - match.put("matchday", matchday); + match.put("matchday", Integer.parseInt(matchday.substring(17))); JSONObject teamHome = (JSONObject) matchAPIFootball.get("homeTeam"); String teamNameHome = teamHome.get("team_name").toString(); @@ -38,6 +44,9 @@ public class MatchesListCreator { String teamNameGuest = teamGuest.get("team_name").toString(); match.put("match", teamNameHome + " - " + teamNameGuest); + String matchtime = matchAPIFootball.get("event_date").toString().replace("T", " ").substring(0, 16); + match.put("matchtime", matchtime); + Long fixtureId = (Long) matchAPIFootball.get("fixture_id"); match.put("matchId", fixtureId); @@ -55,4 +64,44 @@ public class MatchesListCreator { Gson gson = new GsonBuilder().setPrettyPrinting().create(); return gson.toJson(jelement); } + + public JSONArray sortFixtures(JSONArray fixturesArray) { + + JSONArray sortedJsonArray = new JSONArray(); + + ArrayList fixturesList = new ArrayList<>(); + for (int i = 0; i < fixturesArray.size(); i++) { + fixturesList.add((JSONObject) fixturesArray.get(i)); + } + fixturesList.sort(new Comparator() { + private static final String KEY_NAME = "round"; + + @Override + public int compare(JSONObject a, JSONObject b) { + String matchdayNameA = (String) a.get(KEY_NAME); + Integer matchdayNumberA = getMatchdayNumberFromString(matchdayNameA); + String matchdayNameB = (String) b.get(KEY_NAME); + Integer matchdayNumberB = getMatchdayNumberFromString(matchdayNameB); + + return matchdayNumberA.compareTo(matchdayNumberB); + } + }); + + for (int i = 0; i < fixturesArray.size(); i++) { + sortedJsonArray.add(fixturesList.get(i)); + } + return sortedJsonArray; + } + + private Integer getMatchdayNumberFromString(String matchdayName) { + Integer matchdayNumber = null; + if(matchdayName.startsWith("Regular Season - ")) { + matchdayNumber = Integer.parseInt(matchdayName.substring(17, matchdayName.length())); + } + return matchdayNumber; + } + + public String getFilename() { + return "Spiele " + this.country + " " + this.leagueName + ".json"; + } } diff --git a/src/main/java/de/jeyp91/gists/MatchesListGistUpdater.java b/src/main/java/de/jeyp91/gists/MatchesListGistUpdater.java new file mode 100644 index 0000000..5cbf8e7 --- /dev/null +++ b/src/main/java/de/jeyp91/gists/MatchesListGistUpdater.java @@ -0,0 +1,29 @@ +package de.jeyp91.gists; + +import de.jeyp91.apifootball.APIFootballUpdater; + +import java.io.UnsupportedEncodingException; +import java.util.HashSet; + +public class MatchesListGistUpdater { + private HashSet leagues; + + public MatchesListGistUpdater(String configFile) { + this.leagues = APIFootballUpdater.getAllLeaguesFromLeagueConfig(configFile); + } + + public void updateAllLeagues() throws UnsupportedEncodingException { + for(Integer league : this.leagues) { + updateLeague(league); + } + } + + private void updateLeague(int league) throws UnsupportedEncodingException { + MatchesListCreator creator = new MatchesListCreator(league); + String filename = creator.getFilename(); + String content = creator.getMatchesBeautful(); + GistProvider prov = GistProvider.getInstance(); + String gistId = prov.getGistID("Spiele"); + prov.updateGist(gistId, filename, content); + } +} diff --git a/src/test/java/de/jeyp91/gists/MatchesListGistUpdaterTest.java b/src/test/java/de/jeyp91/gists/MatchesListGistUpdaterTest.java new file mode 100644 index 0000000..8b4e1a0 --- /dev/null +++ b/src/test/java/de/jeyp91/gists/MatchesListGistUpdaterTest.java @@ -0,0 +1,14 @@ +package de.jeyp91.gists; + +import org.junit.Test; + +import java.io.UnsupportedEncodingException; + +public class MatchesListGistUpdaterTest { + + @Test + public void updateAllLeaguesTest() throws UnsupportedEncodingException { + MatchesListGistUpdater updater = new MatchesListGistUpdater("Tippliga.json"); + updater.updateAllLeagues(); + } +}