Finish gist

This commit is contained in:
2020-10-17 01:20:51 +02:00
parent e4186457e2
commit cb01b7bcb7
51 changed files with 155 additions and 132281 deletions
@@ -1,32 +1,36 @@
package de.jeyp91.apifootball;
import com.google.common.io.Resources;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import de.jeyp91.gists.GistProvider;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
/**
*
*/
public class APIFootballConnector {
private int season;
private static APIFootballConnector conn = null;
private final int season;
private final String gistId;
private HashMap<String, JSONObject> rounds = new HashMap<>();
private HashMap<String, JSONObject> matches = new HashMap<>();
public APIFootballConnector(int season) {
private APIFootballConnector(int season) {
this.season = season;
GistProvider prov = GistProvider.getInstance();
this.gistId = prov.getGistID("APIFootball_" + (season + 1));
}
public static APIFootballConnector getAPIFootballConnectorInstance(int season) {
if(conn == null) {
conn = new APIFootballConnector(season);
}
return conn;
}
public APIFootballMatch getMatchDataByLeagueAndMatchID(int league, int id) {
@@ -58,10 +62,14 @@ public class APIFootballConnector {
return matchesOfMatchday;
}
private ArrayList<APIFootballMatch> getMatchesFromLeagueFromFile(int id) {
public ArrayList<APIFootballMatch> getMatchesFromLeagueFromFile(int id) {
ArrayList<APIFootballMatch> matchesList = new ArrayList<>();
JSONObject matches = readFromFile("matches_league_" + id);
String filename = "matches_league_" + id + ".json";
if(!this.matches.containsKey(filename)) {
this.matches.put(filename, readObjectFromFile(filename));
}
JSONObject matches = this.matches.get(filename);
JSONArray matchArray = (JSONArray) (((JSONObject)matches.get("api")).get("fixtures"));
for(int i = 0; i < matchArray.size(); i++) {
@@ -71,20 +79,43 @@ public class APIFootballConnector {
return matchesList;
}
public JSONObject readFromFile(String filename) {
public JSONObject getMatchdays(int id) {
String filename = "rounds_" + id + ".json";
if(!this.rounds.containsKey(filename)) {
this.rounds.put(filename, readObjectFromFile(filename));
}
return this.rounds.get(filename);
}
public JSONObject readObjectFromFile(String filename) {
JSONObject object = null;
//JSON parser object to parse read file
JSONParser jsonParser = new JSONParser();
URL url = Resources.getResource((this.season + 1) + "\\API-Football\\" + filename + ".json");
String jsonConfig = null;
GistProvider prov = GistProvider.getInstance();
String jsonConfig = prov.getFileFromGist(this.gistId, filename);
try {
jsonConfig = Resources.toString(url, StandardCharsets.UTF_8);
//Read JSON file
object = (JSONObject) jsonParser.parse(jsonConfig);
} catch (ParseException e) {
e.printStackTrace();
}
} catch (IOException | ParseException e) {
return object;
}
public JSONArray readArrayFromFile(String filename) {
JSONArray object = null;
JSONParser jsonParser = new JSONParser();
GistProvider prov = GistProvider.getInstance();
String jsonConfig = prov.getFileFromGist(this.gistId, filename);
try {
object = (JSONArray) jsonParser.parse(jsonConfig);
} catch (ParseException e) {
e.printStackTrace();
}
@@ -2,6 +2,7 @@ package de.jeyp91.apifootball;
import com.google.common.io.Resources;
import de.jeyp91.BaseMatch;
import de.jeyp91.gists.GistProvider;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@@ -43,7 +44,8 @@ public class APIFootballMatch extends BaseMatch {
private int getMatchdayFromRoundString(String round, int leagueId) {
round = round.replace(" ", "_");
Integer matchday = null;
JSONObject roundsObject = readFromFile("rounds_" + leagueId + ".json");
APIFootballConnector con = APIFootballConnector.getAPIFootballConnectorInstance(this.season);
JSONObject roundsObject = con.getMatchdays(leagueId);
JSONArray roundsArray = (JSONArray)(((JSONObject) roundsObject.get("api")).get("fixtures"));
for (int i = 0; i < roundsArray.size(); i++) {
if(roundsArray.get(i).toString().equals(round)) {
@@ -54,26 +56,6 @@ public class APIFootballMatch extends BaseMatch {
return matchday;
}
private JSONObject readFromFile(String filename) {
JSONObject object = null;
//JSON parser object to parse read file
JSONParser jsonParser = new JSONParser();
URL url = Resources.getResource((this.season + 1) + "\\API-Football\\" + filename);
String jsonConfig = null;
try {
jsonConfig = Resources.toString(url, StandardCharsets.UTF_8);
//Read JSON file
object = (JSONObject) jsonParser.parse(jsonConfig);
} catch (IOException | ParseException e) {
e.printStackTrace();
}
return object;
}
private Integer getNumberOrNull(Object object) {
return object != null ? Integer.parseInt(object.toString()) : null;
}
@@ -9,7 +9,7 @@ public class APIFootballMatchesProvider {
APIFootballConnector conn;
public APIFootballMatchesProvider(int season) {
this.conn = new APIFootballConnector(season - 1);
this.conn = APIFootballConnector.getAPIFootballConnectorInstance(season - 1);
}
public ArrayList<APIFootballMatch> getAPIFootballMatchesFromConfig(JSONArray config) {
@@ -13,8 +13,6 @@ import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
public class APIFootballUpdater {
@@ -24,7 +22,7 @@ public class APIFootballUpdater {
public APIFootballUpdater(int season) {
this.season = season;
this.provider = new GistProvider();
this.provider = GistProvider.getInstance();
}
public void updateFixtures(int league) throws IOException {
@@ -41,23 +39,36 @@ public class APIFootballUpdater {
}
}
public void updateRounds(int league) throws IOException {
String apiFootballUrl = "https://v2.api-football.com/fixtures/rounds/" + league;
String filename = "rounds_" + league + ".json";
String content = getRawData(apiFootballUrl);
writeStringToGist(filename, content);
}
public void updateAllRounds(String configPath) throws IOException {
HashSet<Integer> leagues = getAllLeaguesFromLeagueConfig(configPath);
for (Integer league : leagues) {
updateRounds(league);
}
}
private void writeStringToGist(String filename, String content) throws UnsupportedEncodingException {
String id = this.provider.getGistID("Matches_" + this.season);
String id = this.provider.getGistID("APIFootball_" + this.season);
this.provider.updateGist(id, filename, content);
}
private HashSet<Integer> getAllLeaguesFromLeagueConfig(String configPath) {
private HashSet<Integer> getAllLeaguesFromLeagueConfig(String config) {
HashSet<Integer> leagues = new HashSet<>();
JSONParser jsonParser = new JSONParser();
URL url = Resources.getResource(season + "\\" + configPath);
String jsonConfig = null;
GistProvider prov = GistProvider.getInstance();
String jsonConfig = prov.getTippligaConfig(this.season, config);
JSONObject configObject = null;
try {
jsonConfig = Resources.toString(url, StandardCharsets.UTF_8);
configObject = (JSONObject) jsonParser.parse(jsonConfig);
} catch (IOException | ParseException e) {
} catch (ParseException e) {
e.printStackTrace();
}