package cc.mrbird.febs.dapp.soccer.service.Impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; 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.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; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; @Slf4j @Service @RequiredArgsConstructor public class CountryServiceImpl extends ServiceImpl implements CountryService { 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 httpResponse = null; try { 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(); } JsonResponse jsonResponse = SoccerResponseUtil.getJsonResponse(httpResponse); if(ObjectUtil.isNotEmpty(jsonResponse)){ List responses = jsonResponse.getResponse(); if(CollUtil.isNotEmpty(responses)){ for(Object list : responses){ JSONObject jsonObject = JSONUtil.parseObj(list); String code = SoccerResponseUtil.objectToStr(jsonObject.get("code")); List soccerCountryList = soccerCountriesMapper.selectList(new QueryWrapper().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); } } } return new FebsResponse().success().data(jsonResponse); } @Override public FebsResponse leagues(LeaguesApiDto leaguesApiDto) { HttpResponse 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 */ 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) .queryString("current",current) .asString(); } catch (UnirestException e) { e.printStackTrace(); } LeaguesResponse leaguesResponse = SoccerResponseUtil.getLeaguesResponse(httpResponse); if(ObjectUtil.isNotEmpty(leaguesResponse)){ List responses = leaguesResponse.getResponse(); if(CollUtil.isNotEmpty(responses)){ for(LeaguesInfo leaguesInfo : responses){ SoccerLeagues soccerLeagues = new SoccerLeagues(); Integer leaguesId = SoccerResponseUtil.objectToInteger(leaguesInfo.getLeague().getId()); List soccerLeaguesList = soccerLeaguesMapper.selectList(new QueryWrapper().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); } } } return new FebsResponse().success().data(leaguesResponse); } @Override public FebsResponse timezone() { HttpResponse 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 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 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 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 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 responses = teamsInfoResponse.getResponse(); if(CollUtil.isNotEmpty(responses)){ for(TeamsInfo teamsInfo : responses){ Team team = teamsInfo.getTeam(); if(ObjectUtil.isNotEmpty(team)){ Integer teamId = team.getId(); List soccerTeams = soccerTeamMapper.selectList(new QueryWrapper().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(); if(ObjectUtil.isNotEmpty(venue)){ Integer venueId = venue.getId(); List soccerVenues = soccerVenueMapper.selectList(new QueryWrapper().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); } }