import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpRequest request = HttpRequest.newBuilder()
		.uri(URI.create("https://odds.p.rapidapi.com/v1/odds?region=us&sport=upcoming&oddsFormat=decimal&market=h2h&dateFormat=iso"))
		.header("X-RapidAPI-Key", "6279ac9b7amsh7dc015c7d7746fbp1f4d65jsn125b0c500438")
		.header("X-RapidAPI-Host", "odds.p.rapidapi.com")
		.method("GET", HttpRequest.BodyPublishers.noBody())
		.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{"success":true,"data":[{"id":"96824c3d9232f9fb57c2bcc1d1164f7b","sport_key":"soccer_sweden_allsvenskan","sport_nice":"Allsvenskan - Sweden","teams":["IFK V\u00e4rnamo","Mj\u00e4llby AIF"],"home_team":"IFK V\u00e4rnamo","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:45Z","odds":{"h2h":[2.9,2.48,3.25]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:52:26Z","odds":{"h2h":[2.9,2.48,3.25]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:25Z","odds":{"h2h":[2.9,2.48,3.25]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.9,2.48,3.25]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.9,2.48,3.25]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.7,2.45,3.1]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.88,2.54,2.95]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:44Z","odds":{"h2h":[2.8,2.65,3.1]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:47Z","odds":{"h2h":[2.85,2.5,3.2]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T16:59:34Z","odds":{"h2h":[2.85,2.55,3.25]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.6,2.38,3.0]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:26Z","odds":{"h2h":[3.0,2.64,3.35],"h2h_lay":[3.1,2.68,3.45]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T16:59:34Z","odds":{"h2h":[2.75,2.65,3.25]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T16:59:34Z","odds":{"h2h":[2.83,2.47,3.3]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T16:59:35Z","odds":{"h2h":[2.85,2.5,3.15]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:00:27Z","odds":{"h2h":[2.86,2.6,3.32]}}],"sites_count":16},{"id":"bad5db7ccee040fe2ee4ea1b9d2a0e2f","sport_key":"soccer_sweden_superettan","sport_nice":"Superettan - Sweden","teams":["J\u00f6nk\u00f6pings S\u00f6dra IF","Trelleborgs FF"],"home_team":"Trelleborgs FF","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:17Z","odds":{"h2h":[3.5,1.9,3.65]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:50:33Z","odds":{"h2h":[3.5,1.89,3.65]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:38Z","odds":{"h2h":[3.5,1.89,3.65]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:15Z","odds":{"h2h":[3.5,1.89,3.65]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:16Z","odds":{"h2h":[3.5,1.89,3.65]}},{"site_key":"mybookieag","site_nice":"MyBookie.ag","last_update":"2022-10-03T17:01:15Z","odds":{"h2h":[3.55,1.9,3.45]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:15Z","odds":{"h2h":[3.8,1.83,3.5]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:37Z","odds":{"h2h":[3.8,1.95,3.4]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:37Z","odds":{"h2h":[3.25,1.91,3.25]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:16Z","odds":{"h2h":[4.0,2.0,3.8],"h2h_lay":[4.2,2.04,3.85]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T16:59:19Z","odds":{"h2h":[3.6,1.85,3.5]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:00:45Z","odds":{"h2h":[3.25,1.96,3.55]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:16Z","odds":{"h2h":[3.6,1.94,3.55]}}],"sites_count":13},{"id":"b0f22ec0435bf598159ca89311761b9f","sport_key":"soccer_denmark_superliga","sport_nice":"Denmark Superliga","teams":["FC Nordsjaelland","Randers FC"],"home_team":"FC Nordsjaelland","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[1.95,3.6,3.75]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:52:45Z","odds":{"h2h":[1.93,3.6,3.8]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:33Z","odds":{"h2h":[1.34,8.0,5.25]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:33Z","odds":{"h2h":[1.34,8.0,5.25]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[1.94,3.6,3.75]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:09Z","odds":{"h2h":[1.95,3.65,3.5]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:09Z","odds":{"h2h":[1.91,3.15,3.3]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:34Z","odds":{"h2h":[1.94,3.45,3.7]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[1.95,3.5,3.7]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T16:59:09Z","odds":{"h2h":[2.0,3.6,3.75]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T16:59:09Z","odds":{"h2h":[1.91,3.5,3.75]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T16:59:43Z","odds":{"h2h":[2.0,3.5,3.8]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T16:59:12Z","odds":{"h2h":[1.87,3.5,3.6]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[2.02,3.9,3.95],"h2h_lay":[2.04,3.95,4.0]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T16:59:08Z","odds":{"h2h":[1.94,3.67,3.63]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T16:59:43Z","odds":{"h2h":[1.95,3.75,3.9]}},{"site_key":"lowvig","site_nice":"LowVig.ag","last_update":"2022-10-03T16:59:09Z","odds":{"h2h":[1.95,3.75,3.9]}}],"sites_count":17},{"id":"954a65788d782474d41d1cebaeaae1ec","sport_key":"soccer_poland_ekstraklasa","sport_nice":"Ekstraklasa - Poland","teams":["Warta Pozna\u0144","\u015al\u0105sk Wroc\u0142aw"],"home_team":"\u015al\u0105sk Wroc\u0142aw","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:19Z","odds":{"h2h":[3.15,2.38,2.95]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:19Z","odds":{"h2h":[3.0,2.48,2.93]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:41Z","odds":{"h2h":[3.15,2.38,2.95]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:40Z","odds":{"h2h":[3.05,2.55,2.85]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:51:29Z","odds":{"h2h":[3.15,2.4,2.95]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T16:51:45Z","odds":{"h2h":[3.15,2.4,2.95]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:40Z","odds":{"h2h":[3.1,2.5,2.95]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:40Z","odds":{"h2h":[3.0,2.4,2.85]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:20Z","odds":{"h2h":[3.25,2.68,3.05],"h2h_lay":[3.3,2.7,3.1]}}],"sites_count":9},{"id":"d3298e1305d45bc1c84a65113c1fda8f","sport_key":"soccer_turkey_super_league","sport_nice":"Turkey Super League","teams":["Fatih Karag\u00fcmr\u00fck","Istanbulspor"],"home_team":"Fatih Karag\u00fcmr\u00fck","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:50Z","odds":{"h2h":[1.76,4.1,3.8]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:52Z","odds":{"h2h":[1.76,4.1,3.8]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:50Z","odds":{"h2h":[1.87,3.95,3.65]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T16:59:40Z","odds":{"h2h":[1.83,4.2,3.8]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:31Z","odds":{"h2h":[1.83,4.0,3.6]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:54:38Z","odds":{"h2h":[1.77,4.1,3.8]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:29Z","odds":{"h2h":[1.85,4.0,3.6]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:51Z","odds":{"h2h":[1.76,4.1,3.8]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[1.77,3.95,3.55]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T16:59:00Z","odds":{"h2h":[1.83,4.0,3.75]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T16:59:01Z","odds":{"h2h":[1.8,4.15,3.8]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:51Z","odds":{"h2h":[1.88,4.4,4.0],"h2h_lay":[1.89,4.5,4.2]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:01:01Z","odds":{"h2h":[1.87,4.05,3.7]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T16:59:40Z","odds":{"h2h":[1.77,4.3,4.0]}}],"sites_count":14},{"id":"37ce4313433c8e74e1f08ac5a0ffde0a","sport_key":"icehockey_sweden_allsvenskan","sport_nice":"HockeyAllsvenskan","teams":["V\u00e4sterviks IK","\u00d6stersunds IK"],"home_team":"\u00d6stersunds IK","commence_time":"2022-10-03T17:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:40Z","odds":{"h2h":[2.4,2.4,4.35]}}],"sites_count":1},{"id":"abbb0d455f59cd437f360aace12b0991","sport_key":"soccer_sweden_allsvenskan","sport_nice":"Allsvenskan - Sweden","teams":["IF Elfsborg","IFK Goteborg"],"home_team":"IFK Goteborg","commence_time":"2022-10-03T17:10:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:45Z","odds":{"h2h":[2.23,2.9,3.5]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:01:45Z","odds":{"h2h":[2.28,2.95,3.6]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:25Z","odds":{"h2h":[2.28,2.95,3.6]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.28,2.95,3.6]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.28,2.95,3.6]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.2,2.9,3.5]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[2.3,2.95,3.45]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:44Z","odds":{"h2h":[2.25,3.05,3.45]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:47Z","odds":{"h2h":[2.25,3.0,3.65]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:01:25Z","odds":{"h2h":[2.3,2.95,3.6]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.2,2.65,3.25]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:26Z","odds":{"h2h":[2.36,3.15,3.8],"h2h_lay":[2.4,3.2,3.85]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.25,3.0,3.7]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T17:01:26Z","odds":{"h2h":[2.23,2.99,3.6]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.2,2.95,3.6]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:01:24Z","odds":{"h2h":[2.29,3.07,3.65]}}],"sites_count":16},{"id":"f0a9a49e94e0b7180baf9166ad30efd3","sport_key":"soccer_france_ligue_two","sport_nice":"Ligue 2 - France","teams":["Bordeaux","Stade Lavallois"],"home_team":"Stade Lavallois","commence_time":"2022-10-03T18:45:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:13Z","odds":{"h2h":[2.25,3.15,3.15]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T16:59:45Z","odds":{"h2h":[2.25,3.25,3.35]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:11Z","odds":{"h2h":[2.2,3.05,3.15]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:13Z","odds":{"h2h":[2.25,3.15,3.15]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:00:42Z","odds":{"h2h":[2.25,3.15,3.15]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:00:43Z","odds":{"h2h":[2.25,3.15,3.15]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:00:17Z","odds":{"h2h":[2.25,3.15,3.15]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:12Z","odds":{"h2h":[2.25,3.1,3.2]}},{"site_key":"superbook","site_nice":"SuperBook","last_update":"2022-10-03T17:00:43Z","odds":{"h2h":[2.3,3.2,3.3]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:00:42Z","odds":{"h2h":[2.2,3.2,3.2]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:01:12Z","odds":{"h2h":[2.3,3.15,3.35]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:14Z","odds":{"h2h":[2.34,3.4,3.45],"h2h_lay":[2.38,3.5,3.5]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T16:59:46Z","odds":{"h2h":[2.3,3.15,3.15]}}],"sites_count":13},{"id":"b1c782e8026351bb219e876b8e83731c","sport_key":"soccer_league_of_ireland","sport_nice":"League of Ireland","teams":["Shelbourne Dublin","St Patricks Athletic"],"home_team":"Shelbourne Dublin","commence_time":"2022-10-03T18:45:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:00:30Z","odds":{"h2h":[3.5,2.15,3.05]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:49Z","odds":{"h2h":[3.75,2.3,3.1],"h2h_lay":[3.95,2.38,3.25]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:00:58Z","odds":{"h2h":[3.35,2.26,2.95]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:00:30Z","odds":{"h2h":[3.5,2.15,2.9]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:00:30Z","odds":{"h2h":[3.55,2.25,3.1]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:00:31Z","odds":{"h2h":[3.4,2.25,2.9]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:00:30Z","odds":{"h2h":[3.5,2.15,3.05]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:00:31Z","odds":{"h2h":[3.5,2.15,3.05]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:00:31Z","odds":{"h2h":[3.5,2.15,3.05]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:01:47Z","odds":{"h2h":[3.45,2.2,2.95]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[3.35,2.11,2.85]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T17:01:47Z","odds":{"h2h":[3.4,2.2,2.85]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:01:47Z","odds":{"h2h":[3.5,2.25,3.1]}}],"sites_count":13},{"id":"7461c577eb5bc13015cda02590a7ccc7","sport_key":"soccer_italy_serie_a","sport_nice":"Serie A - Italy","teams":["Hellas Verona FC","Udinese"],"home_team":"Hellas Verona FC","commence_time":"2022-10-03T18:45:00Z","sites":[{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.5,2.1,3.4]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:00:37Z","odds":{"h2h":[3.45,2.12,3.45]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.35,2.1,3.35]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T16:59:44Z","odds":{"h2h":[3.45,2.15,3.45]}},{"site_key":"mybookieag","site_nice":"MyBookie.ag","last_update":"2022-10-03T17:01:09Z","odds":{"h2h":[3.44,2.13,3.46]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.45,2.15,3.5]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.65,2.22,3.55],"h2h_lay":[3.7,2.24,3.6]}},{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:33Z","odds":{"h2h":[3.45,2.17,3.35]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:00:38Z","odds":{"h2h":[3.45,2.17,3.35]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T16:59:43Z","odds":{"h2h":[3.45,2.17,3.35]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T16:59:42Z","odds":{"h2h":[3.45,2.17,3.35]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:09Z","odds":{"h2h":[3.5,2.2,3.4]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T17:00:39Z","odds":{"h2h":[3.4,2.15,3.4]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.5,2.15,3.52]}},{"site_key":"lowvig","site_nice":"LowVig.ag","last_update":"2022-10-03T16:59:06Z","odds":{"h2h":[3.5,2.15,3.52]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:01:06Z","odds":{"h2h":[3.5,2.15,3.5]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:00:37Z","odds":{"h2h":[3.35,2.1,3.4]}},{"site_key":"superbook","site_nice":"SuperBook","last_update":"2022-10-03T17:01:07Z","odds":{"h2h":[3.45,2.15,3.45]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T17:00:13Z","odds":{"h2h":[3.39,2.08,3.52]}}],"sites_count":19},{"id":"bb937553dfa972924270801c735ef3b5","sport_key":"soccer_epl","sport_nice":"EPL","teams":["Leicester City","Nottingham Forest"],"home_team":"Leicester City","commence_time":"2022-10-03T19:00:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:44Z","odds":{"h2h":[1.71,4.6,4.2]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:01:43Z","odds":{"h2h":[1.7,4.6,4.2]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:21Z","odds":{"h2h":[1.7,4.6,4.2]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:01:21Z","odds":{"h2h":[1.73,4.7,4.25]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:01:20Z","odds":{"h2h":[1.73,4.7,4.25]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:20Z","odds":{"h2h":[1.69,4.7,4.1]}},{"site_key":"mybookieag","site_nice":"MyBookie.ag","last_update":"2022-10-03T17:01:46Z","odds":{"h2h":[1.69,4.7,4.1]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:00:23Z","odds":{"h2h":[1.69,4.75,4.0]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:20Z","odds":{"h2h":[1.69,4.8,4.1]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:00:25Z","odds":{"h2h":[1.69,4.7,3.9]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:00:23Z","odds":{"h2h":[1.7,4.5,3.9]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:00:26Z","odds":{"h2h":[1.75,5.0,4.3],"h2h_lay":[1.76,5.1,4.4]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T17:00:26Z","odds":{"h2h":[1.67,4.6,4.1]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:00:24Z","odds":{"h2h":[1.71,4.75,4.1]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:01:43Z","odds":{"h2h":[1.71,4.75,4.1]}},{"site_key":"pointsbetus","site_nice":"PointsBet (US)","last_update":"2022-10-03T17:00:52Z","odds":{"h2h":[1.72,4.4,4.0]}},{"site_key":"superbook","site_nice":"SuperBook","last_update":"2022-10-03T17:01:21Z","odds":{"h2h":[1.69,4.7,4.05]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T17:00:25Z","odds":{"h2h":[1.66,4.69,4.1]}}],"sites_count":18},{"id":"0536cb46f6fdfbb7f41a8c3b883c98a3","sport_key":"soccer_spain_la_liga","sport_nice":"La Liga - Spain","teams":["Elche CF","Rayo Vallecano"],"home_team":"Rayo Vallecano","commence_time":"2022-10-03T19:00:00Z","sites":[{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:52Z","odds":{"h2h":[5.25,1.61,3.85]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:01:52Z","odds":{"h2h":[5.8,1.62,3.8]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T16:59:43Z","odds":{"h2h":[5.4,1.65,3.75]}},{"site_key":"mybookieag","site_nice":"MyBookie.ag","last_update":"2022-10-03T17:01:35Z","odds":{"h2h":[5.4,1.64,3.9]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:01:33Z","odds":{"h2h":[6.2,1.68,4.0],"h2h_lay":[6.4,1.69,4.1]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:03Z","odds":{"h2h":[5.5,1.65,3.8]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:01:32Z","odds":{"h2h":[5.6,1.64,3.8]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T16:59:41Z","odds":{"h2h":[5.6,1.64,3.8]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:00:37Z","odds":{"h2h":[5.6,1.66,3.85]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T17:00:12Z","odds":{"h2h":[5.6,1.64,3.8]}},{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:05Z","odds":{"h2h":[5.6,1.64,3.8]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T17:01:10Z","odds":{"h2h":[5.5,1.65,3.75]}},{"site_key":"lowvig","site_nice":"LowVig.ag","last_update":"2022-10-03T17:00:39Z","odds":{"h2h":[5.85,1.65,3.9]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:01:53Z","odds":{"h2h":[5.85,1.64,3.9]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:00:37Z","odds":{"h2h":[5.75,1.65,3.9]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:01:53Z","odds":{"h2h":[5.6,1.65,3.9]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:00:36Z","odds":{"h2h":[5.5,1.62,3.7]}},{"site_key":"superbook","site_nice":"SuperBook","last_update":"2022-10-03T16:59:42Z","odds":{"h2h":[5.5,1.64,3.9]}}],"sites_count":18},{"id":"02c9a813f79d0a6f2f5ebba74972f484","sport_key":"soccer_spain_segunda_division","sport_nice":"La Liga 2 - Spain","teams":["SD Eibar","Zaragoza"],"home_team":"Zaragoza","commence_time":"2022-10-03T19:00:00Z","sites":[{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T16:59:46Z","odds":{"h2h":[2.95,2.45,2.85]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:00:44Z","odds":{"h2h":[3.1,2.55,3.0]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T17:01:36Z","odds":{"h2h":[3.15,2.55,2.95]}},{"site_key":"superbook","site_nice":"SuperBook","last_update":"2022-10-03T17:00:44Z","odds":{"h2h":[3.15,2.5,3.0]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T17:00:44Z","odds":{"h2h":[3.1,2.45,2.8]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T17:00:17Z","odds":{"h2h":[3.0,2.5,2.88]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:00:44Z","odds":{"h2h":[2.95,2.48,2.9]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T16:59:47Z","odds":{"h2h":[2.95,2.48,2.9]}},{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T17:01:15Z","odds":{"h2h":[2.95,2.45,2.88]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T17:00:20Z","odds":{"h2h":[3.3,2.62,3.05],"h2h_lay":[3.45,2.7,3.1]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:01:13Z","odds":{"h2h":[3.0,2.5,2.86]}}],"sites_count":11},{"id":"44d2a575dc0e5c58cc27f4cb3f5b9a3f","sport_key":"soccer_portugal_primeira_liga","sport_nice":"Primeira Liga - Portugal","teams":["Casa Pia","CS Maritimo"],"home_team":"CS Maritimo","commence_time":"2022-10-03T19:15:00Z","sites":[{"site_key":"unibet","site_nice":"Unibet","last_update":"2022-10-03T16:58:49Z","odds":{"h2h":[2.32,3.25,3.05]}},{"site_key":"betrivers","site_nice":"BetRivers","last_update":"2022-10-03T16:59:57Z","odds":{"h2h":[2.32,3.25,3.05]}},{"site_key":"sugarhouse","site_nice":"SugarHouse","last_update":"2022-10-03T17:00:25Z","odds":{"h2h":[2.32,3.25,3.05]}},{"site_key":"barstool","site_nice":"Barstool Sportsbook","last_update":"2022-10-03T17:00:53Z","odds":{"h2h":[2.32,3.25,3.05]}},{"site_key":"twinspires","site_nice":"TwinSpires","last_update":"2022-10-03T17:00:53Z","odds":{"h2h":[2.32,3.25,3.05]}},{"site_key":"williamhill_us","site_nice":"William Hill (US)","last_update":"2022-10-03T17:01:22Z","odds":{"h2h":[2.4,3.1,3.2]}},{"site_key":"foxbet","site_nice":"FOX Bet","last_update":"2022-10-03T16:59:28Z","odds":{"h2h":[2.38,3.0,3.25]}},{"site_key":"mybookieag","site_nice":"MyBookie.ag","last_update":"2022-10-03T16:59:58Z","odds":{"h2h":[2.38,3.05,3.2]}},{"site_key":"draftkings","site_nice":"DraftKings","last_update":"2022-10-03T16:59:56Z","odds":{"h2h":[2.4,3.0,3.3]}},{"site_key":"wynnbet","site_nice":"WynnBET","last_update":"2022-10-03T17:00:25Z","odds":{"h2h":[2.4,3.1,3.2]}},{"site_key":"bovada","site_nice":"Bovada","last_update":"2022-10-03T17:00:26Z","odds":{"h2h":[2.4,3.05,3.05]}},{"site_key":"intertops","site_nice":"Intertops","last_update":"2022-10-03T16:58:50Z","odds":{"h2h":[2.35,3.1,3.1]}},{"site_key":"fanduel","site_nice":"FanDuel","last_update":"2022-10-03T16:59:56Z","odds":{"h2h":[2.3,3.0,3.0]}},{"site_key":"gtbets","site_nice":"GTbets","last_update":"2022-10-03T16:59:30Z","odds":{"h2h":[2.31,3.1,3.28]}},{"site_key":"betfair","site_nice":"Betfair","last_update":"2022-10-03T16:59:30Z","odds":{"h2h":[2.48,3.3,3.25],"h2h_lay":[2.52,3.4,3.35]}},{"site_key":"lowvig","site_nice":"LowVig.ag","last_update":"2022-10-03T16:58:52Z","odds":{"h2h":[2.44,2.83,3.15]}},{"site_key":"betonlineag","site_nice":"BetOnline.ag","last_update":"2022-10-03T17:00:25Z","odds":{"h2h":[2.44,2.83,3.15]}},{"site_key":"betus","site_nice":"BetUS","last_update":"2022-10-03T17:00:52Z","odds":{"h2h":[2.35,3.2,3.2]}}],"sites_count":18}]}

package com.nighthawk.spring_portfolio.mvc.translate;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Date;
import java.util.HashMap;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // annotation to create a RESTful web services
@RequestMapping("/api/google-translate1")  //prefix of API
public class translate {
    private JSONObject body; //last run result
    private HttpStatus status; //last run status
    String last_run = null; //last run day of month

    // GET Covid 19 Stats
    @GetMapping("/daily")   //added to end of prefix as endpoint
    public ResponseEntity<JSONObject> getTranslate() {

        //calls API once a day, sets body and status properties
        String today = new Date().toString().substring(0,10); 
        if (last_run == null || !today.equals(last_run))
        {
            try {  //APIs can fail (ie Internet or Service down)

                HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://odds.p.rapidapi.com/v1/odds?region=us&sport=upcoming&oddsFormat=decimal&market=h2h&dateFormat=iso"))
                .header("X-RapidAPI-Key", "6279ac9b7amsh7dc015c7d7746fbp1f4d65jsn125b0c500438")
                .header("X-RapidAPI-Host", "odds.p.rapidapi.com")
                .method("GET", HttpRequest.BodyPublishers.noBody())
                .build();
                HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
                
\                //JSONParser extracts text body and parses to JSONObject
                this.body = (JSONObject) new JSONParser().parse(response.body());
                this.status = HttpStatus.OK;  //200 success
                this.last_run = today;
            }
            catch (Exception e) {  //capture failure info
                HashMap<String, String> status = new HashMap<>();
                status.put("status", "RapidApi failure: " + e);

                //Setup object for error
                this.body = (JSONObject) status;
                this.status = HttpStatus.INTERNAL_SERVER_ERROR; //500 error
                this.last_run = null;
            }
        }

        //return JSONObject in RESTful style
        return new ResponseEntity<>(body, status);
    }
}