| | |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; |
| | | import cc.mrbird.febs.dapp.soccer.entity.SoccerCountries; |
| | | import cc.mrbird.febs.dapp.soccer.entity.SoccerLeagues; |
| | | import cc.mrbird.febs.dapp.soccer.mapper.SoccerCountriesMapper; |
| | | import cc.mrbird.febs.dapp.soccer.mapper.SoccerLeaguesMapper; |
| | | import cc.mrbird.febs.dapp.soccer.dto.TeamsApiDto; |
| | | import cc.mrbird.febs.dapp.soccer.entity.*; |
| | | import cc.mrbird.febs.dapp.soccer.mapper.*; |
| | | import cc.mrbird.febs.dapp.soccer.service.CountryService; |
| | | import cc.mrbird.febs.dapp.soccer.util.SoccerResponseUtil; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.mashape.unirest.http.HttpResponse; |
| | | import com.mashape.unirest.http.Unirest; |
| | | import com.mashape.unirest.http.exceptions.UnirestException; |
| | |
| | | |
| | | private final SoccerCountriesMapper soccerCountriesMapper; |
| | | private final SoccerLeaguesMapper soccerLeaguesMapper; |
| | | private final SoccerTimezoneMapper soccerTimezoneMapper; |
| | | private final SoccerLeaguesSeasonsMapper soccerLeaguesSeasonsMapper; |
| | | private final SoccerTeamMapper soccerTeamMapper; |
| | | private final SoccerVenueMapper soccerVenueMapper; |
| | | |
| | | @Override |
| | | public FebsResponse countries() { |
| | | HttpResponse<String> response = null; |
| | | HttpResponse<String> httpResponse = null; |
| | | try { |
| | | response = Unirest.get("http://v3.football.api-sports.io/countries") |
| | | httpResponse = Unirest.get("http://v3.football.api-sports.io/countries") |
| | | .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") |
| | | .header("x-rapidapi-host", "v3.football.api-sports.io").asString(); |
| | | } catch (UnirestException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | JSONArray jsonArray = SoccerResponseUtil.getResponseToJSONArray(response); |
| | | if(CollUtil.isNotEmpty(jsonArray)){ |
| | | for(Object list : jsonArray){ |
| | | JSONObject jsonObject = JSONUtil.parseObj(list); |
| | | String code = SoccerResponseUtil.objectToStr(jsonObject.get("code")); |
| | | List<SoccerCountries> soccerCountryList = soccerCountriesMapper.selectList(new QueryWrapper<SoccerCountries>().eq("code", code)); |
| | | if(CollUtil.isNotEmpty(soccerCountryList)){ |
| | | continue; |
| | | JsonResponse jsonResponse = SoccerResponseUtil.getJsonResponse(httpResponse); |
| | | if(ObjectUtil.isNotEmpty(jsonResponse)){ |
| | | List<Object> responses = jsonResponse.getResponse(); |
| | | if(CollUtil.isNotEmpty(responses)){ |
| | | for(Object list : responses){ |
| | | JSONObject jsonObject = JSONUtil.parseObj(list); |
| | | String code = SoccerResponseUtil.objectToStr(jsonObject.get("code")); |
| | | List<SoccerCountries> soccerCountryList = soccerCountriesMapper.selectList(new QueryWrapper<SoccerCountries>().eq("code", code)); |
| | | if(CollUtil.isNotEmpty(soccerCountryList)){ |
| | | continue; |
| | | } |
| | | SoccerCountries soccerCountries = new SoccerCountries(); |
| | | soccerCountries.setName(SoccerResponseUtil.objectToStr(jsonObject.get("code"))); |
| | | soccerCountries.setCode(SoccerResponseUtil.objectToStr(jsonObject.get("name"))); |
| | | soccerCountries.setFlag(SoccerResponseUtil.objectToStr(jsonObject.get("flag"))); |
| | | soccerCountriesMapper.insert(soccerCountries); |
| | | } |
| | | SoccerCountries soccerCountries = new SoccerCountries(); |
| | | soccerCountries.setName(SoccerResponseUtil.objectToStr(jsonObject.get("code"))); |
| | | soccerCountries.setCode(SoccerResponseUtil.objectToStr(jsonObject.get("name"))); |
| | | soccerCountries.setFlag(SoccerResponseUtil.objectToStr(jsonObject.get("flag"))); |
| | | soccerCountriesMapper.insert(soccerCountries); |
| | | } |
| | | } |
| | | return new FebsResponse().success(); |
| | | return new FebsResponse().success().data(jsonResponse); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse leagues(LeaguesApiDto leaguesApiDto) { |
| | | HttpResponse<String> response = null; |
| | | HttpResponse<String> httpResponse = null; |
| | | int season = ObjectUtil.isEmpty(leaguesApiDto.getSeason()) ? DateUtil.date().year() : leaguesApiDto.getSeason(); |
| | | String current = ObjectUtil.isEmpty(leaguesApiDto.getCurrent()) ? "true" : leaguesApiDto.getCurrent(); |
| | | try { |
| | | /** |
| | | * https://v3.football.api-sports.io/leagues?season=2023¤t=true |
| | | */ |
| | | response = Unirest.get(" https://v3.football.api-sports.io/leagues") |
| | | httpResponse = Unirest.get(" https://v3.football.api-sports.io/leagues") |
| | | .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") |
| | | .header("x-rapidapi-host", "v3.football.api-sports.io") |
| | | .queryString("season",season) |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | JSONArray jsonArray = SoccerResponseUtil.getResponseToJSONArray(response); |
| | | if(CollUtil.isNotEmpty(jsonArray)){ |
| | | for(Object list : jsonArray){ |
| | | JSONObject parseObj1 = JSONUtil.parseObj(list); |
| | | Object leagueObj = parseObj1.get("league"); |
| | | JSONObject parseObjLeague = JSONUtil.parseObj(leagueObj); |
| | | JSONObject leagueStr = JSONUtil.parseObj(parseObjLeague); |
| | | LeaguesResponse leaguesResponse = SoccerResponseUtil.getLeaguesResponse(httpResponse); |
| | | if(ObjectUtil.isNotEmpty(leaguesResponse)){ |
| | | List<LeaguesInfo> responses = leaguesResponse.getResponse(); |
| | | if(CollUtil.isNotEmpty(responses)){ |
| | | for(LeaguesInfo leaguesInfo : responses){ |
| | | |
| | | Integer leaguesId = SoccerResponseUtil.objectToInteger(leagueStr.get("id")); |
| | | List<SoccerLeagues> soccerLeaguesList = soccerLeaguesMapper.selectList(new QueryWrapper<SoccerLeagues>().eq("leagues_id", leaguesId)); |
| | | if(CollUtil.isNotEmpty(soccerLeaguesList)){ |
| | | continue; |
| | | SoccerLeagues soccerLeagues = new SoccerLeagues(); |
| | | Integer leaguesId = SoccerResponseUtil.objectToInteger(leaguesInfo.getLeague().getId()); |
| | | List<SoccerLeagues> soccerLeaguesList = soccerLeaguesMapper.selectList(new QueryWrapper<SoccerLeagues>().eq("leagues_id", leaguesId)); |
| | | if(CollUtil.isNotEmpty(soccerLeaguesList)){ |
| | | continue; |
| | | } |
| | | soccerLeagues.setLeaguesId(SoccerResponseUtil.objectToInteger(leaguesInfo.getLeague().getId())); |
| | | soccerLeagues.setLeaguesName(SoccerResponseUtil.objectToStr(leaguesInfo.getLeague().getName())); |
| | | soccerLeagues.setLeaguesType(SoccerResponseUtil.objectToStr(leaguesInfo.getLeague().getType())); |
| | | soccerLeagues.setLeaguesLogo(SoccerResponseUtil.objectToStr(leaguesInfo.getLeague().getLogo())); |
| | | |
| | | soccerLeagues.setCountryName(SoccerResponseUtil.objectToStr(leaguesInfo.getCountry().getName())); |
| | | soccerLeagues.setCountryCode(SoccerResponseUtil.objectToStr(leaguesInfo.getCountry().getCode())); |
| | | soccerLeagues.setCountryFlag(SoccerResponseUtil.objectToStr(leaguesInfo.getCountry().getFlag())); |
| | | soccerLeaguesMapper.insert(soccerLeagues); |
| | | } |
| | | SoccerLeagues soccerLeagues = new SoccerLeagues(); |
| | | soccerLeagues.setLeaguesId(SoccerResponseUtil.objectToInteger(leagueStr.get("id"))); |
| | | soccerLeagues.setLeaguesName(SoccerResponseUtil.objectToStr(leagueStr.get("name"))); |
| | | soccerLeagues.setLeaguesType(SoccerResponseUtil.objectToStr(leagueStr.get("type"))); |
| | | soccerLeagues.setLeaguesLogo(SoccerResponseUtil.objectToStr(leagueStr.get("logo"))); |
| | | soccerLeaguesMapper.insert(soccerLeagues); |
| | | } |
| | | } |
| | | return new FebsResponse().success(); |
| | | |
| | | return new FebsResponse().success().data(leaguesResponse); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse timezone() { |
| | | HttpResponse<String> httpResponse = null; |
| | | try { |
| | | httpResponse = Unirest.get("https://v3.football.api-sports.io/timezone") |
| | | .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") |
| | | .header("x-rapidapi-host", "v3.football.api-sports.io").asString(); |
| | | } catch (UnirestException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | JsonResponse jsonResponse = SoccerResponseUtil.getJsonResponse(httpResponse); |
| | | if(ObjectUtil.isNotEmpty(jsonResponse)){ |
| | | List<Object> responses = jsonResponse.getResponse(); |
| | | if(CollUtil.isNotEmpty(jsonResponse.getResponse())){ |
| | | for(Object timezoneName : responses){ |
| | | SoccerTimezone soccerTimezone = new SoccerTimezone(); |
| | | soccerTimezone.setTimezoneName(SoccerResponseUtil.objectToStr(timezoneName)); |
| | | soccerTimezoneMapper.insert(soccerTimezone); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return new FebsResponse().success().data(jsonResponse); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse seasons() { |
| | | HttpResponse<String> httpResponse = null; |
| | | /** |
| | | * https://v3.football.api-sports.io/leagues/seasons |
| | | */ |
| | | try { |
| | | httpResponse = Unirest.get("https://v3.football.api-sports.io/leagues/seasons") |
| | | .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") |
| | | .header("x-rapidapi-host", "v3.football.api-sports.io").asString(); |
| | | } catch (UnirestException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | JsonResponse jsonResponse = SoccerResponseUtil.getJsonResponse(httpResponse); |
| | | if(ObjectUtil.isNotEmpty(jsonResponse)){ |
| | | List<Object> responses = jsonResponse.getResponse(); |
| | | if(CollUtil.isNotEmpty(jsonResponse.getResponse())){ |
| | | for(Object seasonsName : responses){ |
| | | SoccerLeaguesSeasons soccerLeaguesSeasons = new SoccerLeaguesSeasons(); |
| | | soccerLeaguesSeasons.setSeasonsName(SoccerResponseUtil.objectToStr(seasonsName)); |
| | | soccerLeaguesSeasonsMapper.insert(soccerLeaguesSeasons); |
| | | } |
| | | } |
| | | } |
| | | return new FebsResponse().success().data(jsonResponse); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse teams(TeamsApiDto teamsApiDto) { |
| | | HttpResponse<String> httpResponse = null; |
| | | String country = teamsApiDto.getCountry(); |
| | | |
| | | try { |
| | | /** |
| | | * https://v3.football.api-sports.io/teams |
| | | */ |
| | | httpResponse = Unirest.get(" https://v3.football.api-sports.io/teams") |
| | | .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") |
| | | .header("x-rapidapi-host", "v3.football.api-sports.io") |
| | | .queryString("country",country) |
| | | .asString(); |
| | | } catch (UnirestException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | TeamsInfoResponse teamsInfoResponse = SoccerResponseUtil.getTeamsInfoResponse(httpResponse); |
| | | if(ObjectUtil.isNotEmpty(teamsInfoResponse)){ |
| | | List<TeamsInfo> responses = teamsInfoResponse.getResponse(); |
| | | if(CollUtil.isNotEmpty(responses)){ |
| | | for(TeamsInfo teamsInfo : responses){ |
| | | |
| | | Team team = teamsInfo.getTeam(); |
| | | Integer teamId = team.getId(); |
| | | List<SoccerTeam> soccerTeams = soccerTeamMapper.selectList(new QueryWrapper<SoccerTeam>().eq("team_id", teamId)); |
| | | if(CollUtil.isEmpty(soccerTeams)){ |
| | | SoccerTeam soccerTeam = new SoccerTeam(); |
| | | soccerTeam.setTeamId(team.getId()); |
| | | soccerTeam.setName(team.getName()); |
| | | soccerTeam.setCode(team.getCode()); |
| | | soccerTeam.setCountry(team.getCountry()); |
| | | soccerTeam.setFounded(team.getFounded()); |
| | | soccerTeam.setNational(team.getNational()); |
| | | soccerTeam.setLogo(team.getLogo()); |
| | | soccerTeamMapper.insert(soccerTeam); |
| | | } |
| | | |
| | | Venue venue = teamsInfo.getVenue(); |
| | | Integer venueId = venue.getId(); |
| | | List<SoccerVenue> soccerVenues = soccerVenueMapper.selectList(new QueryWrapper<SoccerVenue>().eq("venue_id", venueId)); |
| | | if(CollUtil.isEmpty(soccerVenues)){ |
| | | SoccerVenue soccerVenue = new SoccerVenue(); |
| | | soccerVenue.setVenueId(venue.getId()); |
| | | soccerVenue.setName(venue.getName()); |
| | | soccerVenue.setAddress(venue.getAddress()); |
| | | soccerVenue.setCity(venue.getCity()); |
| | | soccerVenue.setCapacity(venue.getCapacity()); |
| | | soccerVenue.setSurface(venue.getSurface()); |
| | | soccerVenue.setImage(venue.getImage()); |
| | | soccerVenueMapper.insert(soccerVenue); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return new FebsResponse().success().data(teamsInfoResponse); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String str = "{\n" + |
| | | " \"get\": \"leagues\",\n" + |
| | | " \"parameters\": {\n" + |
| | | " \"season\": \"2008\",\n" + |
| | | " \"country\": \"World\"\n" + |
| | | " },\n" + |
| | | " \"errors\": [],\n" + |
| | | " \"results\": 1,\n" + |
| | | " \"paging\": {\n" + |
| | | " \"current\": 1,\n" + |
| | | " \"total\": 1\n" + |
| | | " },\n" + |
| | | " \"response\": [\n" + |
| | | " {\n" + |
| | | " \"league\": {\n" + |
| | | " \"id\": 4,\n" + |
| | | " \"name\": \"Euro Championship\",\n" + |
| | | " \"type\": \"Cup\",\n" + |
| | | " \"logo\": \"https://media.api-sports.io/football/leagues/4.png\"\n" + |
| | | " },\n" + |
| | | " \"country\": {\n" + |
| | | " \"name\": \"World\",\n" + |
| | | " \"code\": null,\n" + |
| | | " \"flag\": null\n" + |
| | | " },\n" + |
| | | " \"seasons\": [\n" + |
| | | " {\n" + |
| | | " \"year\": 2008,\n" + |
| | | " \"start\": \"2008-06-07\",\n" + |
| | | " \"end\": \"2008-06-29\",\n" + |
| | | " \"current\": false,\n" + |
| | | " \"coverage\": {\n" + |
| | | " \"fixtures\": {\n" + |
| | | " \"events\": true,\n" + |
| | | " \"lineups\": true,\n" + |
| | | " \"statistics_fixtures\": false,\n" + |
| | | " \"statistics_players\": false\n" + |
| | | " },\n" + |
| | | " \"standings\": false,\n" + |
| | | " \"players\": true,\n" + |
| | | " \"top_scorers\": true,\n" + |
| | | " \"top_assists\": true,\n" + |
| | | " \"top_cards\": true,\n" + |
| | | " \"injuries\": false,\n" + |
| | | " \"predictions\": true,\n" + |
| | | " \"odds\": false\n" + |
| | | " }\n" + |
| | | " }\n" + |
| | | " ]\n" + |
| | | " }\n" + |
| | | " ]\n" + |
| | | "}"; |
| | | LeaguesResponse leaguesResponse = new LeaguesResponse(); |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | try { |
| | | leaguesResponse = mapper.readValue(str, LeaguesResponse.class); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | System.out.println(leaguesResponse); |
| | | } |
| | | } |