package de.jeyp91.apifootball; import com.google.common.io.Resources; import de.jeyp91.gists.GistProvider; 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 org.json.simple.JSONArray; import org.json.simple.JSONObject; 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 { private int season; private GistProvider provider; public APIFootballUpdater(int season) { this.season = season; this.provider = new GistProvider(); } public void updateFixtures(int league) throws IOException { String apiFootballUrl = "https://v2.api-football.com/fixtures/league/" + league + "?timezone=Europe/Berlin"; String filename = "matches_league_" + league + ".json"; String content = getRawData(apiFootballUrl); writeStringToGist(filename, content); } public void updateAllFixtures(String configPath) throws IOException { HashSet leagues = getAllLeaguesFromLeagueConfig(configPath); for (Integer league : leagues) { updateFixtures(league); } } private void writeStringToGist(String filename, String content) throws UnsupportedEncodingException { String id = this.provider.getGistID("Matches_" + this.season); this.provider.updateGist(id, filename, content); } private HashSet getAllLeaguesFromLeagueConfig(String configPath) { HashSet leagues = new HashSet<>(); JSONParser jsonParser = new JSONParser(); URL url = Resources.getResource(season + "\\" + configPath); String jsonConfig = null; JSONObject configObject = null; try { jsonConfig = Resources.toString(url, StandardCharsets.UTF_8); configObject = (JSONObject) jsonParser.parse(jsonConfig); } catch (IOException | ParseException e) { e.printStackTrace(); } JSONArray matchdayConfigs = (JSONArray) configObject.get("matchdayConfig"); for (Object matchdayConfig : matchdayConfigs) { JSONArray matchesConfig = (JSONArray) ((JSONObject) matchdayConfig).get("matchesConfig"); for (Object matchConfig : matchesConfig) { if (((JSONObject) matchConfig).containsKey("matchesLeague")) { int league = Integer.parseInt(((JSONObject) matchConfig).get("matchesLeague").toString()); leagues.add(league); } if (((JSONObject) matchConfig).containsKey("matchLeague")) { int league = Integer.parseInt(((JSONObject) matchConfig).get("matchLeague").toString()); leagues.add(league); } } } return leagues; } private JSONArray getDataAsJSONArray(String requestUrl) { String rawData = getRawData(requestUrl); JSONParser parser = new JSONParser(); JSONArray data = null; try { data = (JSONArray) parser.parse(rawData); } catch (ParseException e) { /* TODO */ e.printStackTrace(); } return data; } public JSONObject getDataAsJSONObject(String requestUrl) { String rawData = getRawData(requestUrl); JSONParser parser = new JSONParser(); JSONObject data = null; try { data = (JSONObject) parser.parse(rawData); } catch (ParseException e) { /* TODO */ e.printStackTrace(); } return data; } public String getRawData(String requestUrl) { HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet(requestUrl); // add request header request.addHeader("X-RapidAPI-Key", "a607e6a7437d9d52f3ac73e0b2704d0b"); HttpResponse response = null; try { response = client.execute(request); } catch (ClientProtocolException e) { /* TODO */ e.printStackTrace(); } catch (IOException e) { /* TODO */ e.printStackTrace(); } BufferedReader rd = null; try { rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent()) ); } catch (IOException e) { /* TODO */ e.printStackTrace(); } StringBuilder result = new StringBuilder(); String line = ""; while (true) { try { line = rd.readLine(); } catch (IOException e) { /* TODO */ e.printStackTrace(); } // Stop reading if last line was found. if (line == null) break; result.append(line); } return result.toString(); } }