src/main/java/cc/mrbird/febs/common/contants/SoccerContants.java
New file @@ -0,0 +1,6 @@ package cc.mrbird.febs.common.contants; public class SoccerContants { public static final String RESPONSE = "response"; } src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
@@ -130,7 +130,7 @@ } @ApiOperation(value = "获取国家", notes = "获取国家") @GetMapping(value = "/testApi") @GetMapping(value = "/countries") public FebsResponse testApi() { HttpResponse<String> response = null; try { src/main/java/cc/mrbird/febs/dapp/soccer/controller/SoccerController.java
New file @@ -0,0 +1,35 @@ package cc.mrbird.febs.dapp.soccer.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; import cc.mrbird.febs.dapp.soccer.service.CountryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @Slf4j @RequiredArgsConstructor @CrossOrigin("*") @RestController @Api(value = "FOOTBALL", tags = "FOOTBALL") @RequestMapping(value = "/dapi/footBall") public class SoccerController { private final CountryService countryService; @ApiOperation(value = "获取国家", notes = "获取国家") @GetMapping(value = "/countries") public FebsResponse countriesApi() { return countryService.countries(); } @ApiOperation(value = "获取联赛", notes = "获取联赛") @PostMapping(value = "/leagues") public FebsResponse leagues(LeaguesApiDto leaguesApiDto) { return countryService.leagues(leaguesApiDto); } } src/main/java/cc/mrbird/febs/dapp/soccer/dto/LeaguesApiDto.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.dapp.soccer.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @@ -8,11 +9,14 @@ * integer = 4 characters YYYY * The season of the league */ @ApiModelProperty(value = "年份,YYYY", example = "2024") private Integer season; /** * string Return the list of active seasons or the las...Show pattern * Enum: "true" "false" * The state of the league */ @ApiModelProperty(value = "联赛状态,Enum: \"true\" \"false\"", example = "true") private String current; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/SoccerCountries.java
New file @@ -0,0 +1,14 @@ package cc.mrbird.febs.dapp.soccer.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("soccer_countries") public class SoccerCountries extends BaseEntity { private String name;//名称 private String code;//编码 private String flag;//旗帜 } src/main/java/cc/mrbird/febs/dapp/soccer/mapper/SoccerCountriesMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.dapp.soccer.mapper; import cc.mrbird.febs.dapp.soccer.entity.SoccerCountries; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SoccerCountriesMapper extends BaseMapper<SoccerCountries> { } src/main/java/cc/mrbird/febs/dapp/soccer/service/CountryService.java
New file @@ -0,0 +1,13 @@ package cc.mrbird.febs.dapp.soccer.service; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; import cc.mrbird.febs.dapp.soccer.entity.SoccerCountries; import com.baomidou.mybatisplus.extension.service.IService; public interface CountryService extends IService<SoccerCountries> { FebsResponse countries(); FebsResponse leagues(LeaguesApiDto leaguesApiDto); } src/main/java/cc/mrbird/febs/dapp/soccer/service/Impl/CountryServiceImpl.java
New file @@ -0,0 +1,97 @@ 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.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.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.extension.service.impl.ServiceImpl; 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; @Slf4j @Service @RequiredArgsConstructor public class CountryServiceImpl extends ServiceImpl<SoccerCountriesMapper, SoccerCountries> implements CountryService { private final SoccerCountriesMapper soccerCountriesMapper; private final SoccerLeaguesMapper soccerLeaguesMapper; @Override public FebsResponse countries() { HttpResponse<String> response = null; try { response = 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); 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(); } @Override public FebsResponse leagues(LeaguesApiDto leaguesApiDto) { HttpResponse<String> response = 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") .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(); } 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); 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); } } System.out.println(jsonArray); log.info(String.valueOf(response.getRawBody())); return new FebsResponse().success(); } } src/main/java/cc/mrbird/febs/dapp/soccer/util/SoccerResponseUtil.java
New file @@ -0,0 +1,25 @@ package cc.mrbird.febs.dapp.soccer.util; import cc.mrbird.febs.common.contants.SoccerContants; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.mashape.unirest.http.HttpResponse; public class SoccerResponseUtil { public static JSONArray getResponseToJSONArray(HttpResponse<String> response){ JSONObject parseObj = JSONUtil.parseObj(response.getBody()); Object responseStr = parseObj.get(SoccerContants.RESPONSE); return JSONUtil.parseArray(responseStr); } public static String objectToStr(Object object){ return ObjectUtil.isEmpty(object) ? "-" : (String) object; } public static Integer objectToInteger(Object object){ return ObjectUtil.isEmpty(object) ? 0 : (Integer) object; } }