Skip to content

Commit

Permalink
新增 Epic白嫖游戏查询
Browse files Browse the repository at this point in the history
  • Loading branch information
VarleyT committed Oct 29, 2022
1 parent c7e2bc9 commit 9298819
Show file tree
Hide file tree
Showing 10 changed files with 258 additions and 14 deletions.
7 changes: 4 additions & 3 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@
## 功能

- 登录
- 注册(需验证码)
- 登出
- 签到
- 注册(需验证码)
- 时间限制
- 登录限制
- 签到
- 抖音解析
- 原神抽卡分析
- Epic每周白嫖

## TODO
> ~~大饼绘制区~~
- [ ] Epic每周白嫖
- [x] Epic每周白嫖
- [ ] CS:GO音乐盒试听
- [ ] Jetbrain全家桶验证服务器
8 changes: 7 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
<version>3.5.2</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -80,6 +80,12 @@
<version>0.5.10</version>
</dependency>

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@

import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.extern.slf4j.Slf4j;
import online.fycloud.webapi.common.data.douyin.DouYin;
import online.fycloud.webapi.common.data.genshin.GenShinPrayInfo;
import online.fycloud.webapi.common.data.genshin.GenShinRequestUrl;
import online.fycloud.webapi.common.entity.FreeGame;
import online.fycloud.webapi.common.logic.DouYinParse;
import online.fycloud.webapi.common.logic.GenShinAnalyse;
import online.fycloud.webapi.common.service.FreeGameService;
import online.fycloud.webapi.core.annotation.LimitRequest;
import online.fycloud.webapi.core.common.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
Expand All @@ -26,7 +28,7 @@
*/
@Slf4j
@RestController
@RequestMapping("/API")
@RequestMapping(value = "/API")
public class ApiController {
/**
* 抖音视频解析
Expand Down Expand Up @@ -55,8 +57,8 @@ public R<DouYin> douyin(@RequestBody @NotEmpty String url, HttpServletResponse r

/**
* 原神抽卡分析
*
* @// TODO: 2022/9/26 同一时间只能有一个用户访问
* <p>
* TODO: 2022/9/26 同一时间只能有一个用户访问
*/
@LimitRequest
@PostMapping("/genshin")
Expand All @@ -75,4 +77,13 @@ public R<GenShinPrayInfo> genshin(@RequestBody @Validated GenShinRequestUrl genS
}
return R.success(genShinPrayInfo);
}

@Autowired
private FreeGameService freeGameService;

@GetMapping("/freegame")
public String freeGame() {
List<FreeGame> list = freeGameService.getInfos();
return JSON.toJSONString(R.success(list), SerializerFeature.WriteNullListAsEmpty);
}
}
78 changes: 78 additions & 0 deletions src/main/java/online/fycloud/webapi/common/entity/FreeGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package online.fycloud.webapi.common.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
* 游戏白嫖信息
*
* @author VarleyT
*/
@Data
@AllArgsConstructor
@TableName(value = "free_game")
public class FreeGame implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
@JSONField(serialize = false)
private Integer id;

/**
* 游戏名
*/
@JSONField(ordinal = 1)
private String gameName;

/**
* 链接
*/
@JSONField(ordinal = 3)
private String url;

/**
* 类型
*/
@JSONField(ordinal = 4)
private String type;

/**
* 开始时间
*/
@JSONField(ordinal = 5, format = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;

/**
* 结束时间
*/
@JSONField(ordinal = 6, format = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;

/**
* 是否永久
*/
@JSONField(ordinal = 7, name = "forever")
private boolean valid;

/**
* 游戏平台
*/
@JSONField(ordinal = 2)
private String store;

@TableField(exist = false)
@JSONField(serialize = false)
private static final long serialVersionUID = 1L;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package online.fycloud.webapi.common.logic;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import online.fycloud.webapi.common.entity.FreeGame;
import online.fycloud.webapi.common.service.FreeGameService;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.LinkedList;
import java.util.List;

/**
* @author VarleyT
* @date 2022/10/6
*/
@Slf4j
@Component
public class FreeGameAnalyse {
private static final String API = "https://steamstats.cn/xi";

@Autowired
private FreeGameService freeGameService;

@Scheduled(cron = "0 0 1 ? * 5")
public void analyse() {
log.info("开始执行定时任务:{}", "获取游戏白嫖信息");
List<FreeGame> freeGameList = new LinkedList<>();
HttpRequest request = HttpUtil.createGet(API).header("accept-language", "zh-CN,zh;q=0.9")
.header("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.header("accept-language", "zh-CN,zh;q=0.9")
.header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36")
.setFollowRedirects(false);
Document doc = Jsoup.parse(request.execute().body());
Elements datas = doc.getElementsByClass("v-data-table__wrapper");
Elements gameInfos = datas.get(0).child(0).child(1).children();
for (Element gameInfo : gameInfos) {
String gameName = gameInfo.child(1).select("a").first().attr("title");
String url = gameInfo.child(1).select("a").first().attr("href");
String type = gameInfo.child(2).text();
DateTime startTime = DateUtil.parse(gameInfo.child(3).text(), "yyyy-MM-dd");
DateTime endTime = DateUtil.parse(gameInfo.child(4).text(), "yyyy-MM-dd")
.offset(DateField.HOUR, 23);
boolean valid = false;
if (gameInfo.child(5).text().equals("是") || gameInfo.child(5).text().equals("yes")) {
valid = true;
}
String store = gameInfo.child(6).getElementsByClass("v-btn__content").get(0).text();
freeGameList.add(new FreeGame(null, gameName, url, type, startTime, endTime, valid, store));
}
freeGameService.add(freeGameList);
log.info("定时任务执行完毕:{}", "获取游戏白嫖信息");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package online.fycloud.webapi.common.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import online.fycloud.webapi.common.entity.FreeGame;
import org.apache.ibatis.annotations.Mapper;

/**
* @author VarleyT
* @date 2022/10/6
*/
@Mapper
public interface FreeGameMapper extends BaseMapper<FreeGame> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package online.fycloud.webapi.common.service;

import com.baomidou.mybatisplus.extension.service.IService;
import online.fycloud.webapi.common.entity.FreeGame;

import java.util.List;

/**
* @author VarleyT
* @date 2022/10/6
*/
public interface FreeGameService extends IService<FreeGame> {

/**
* 新增元素
*
* @param freeGameList
*/
void add(List<FreeGame> freeGameList);

/**
* 获取信息
*
* @return
*/
List<FreeGame> getInfos();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package online.fycloud.webapi.common.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import online.fycloud.webapi.common.entity.FreeGame;
import online.fycloud.webapi.common.mapper.FreeGameMapper;
import online.fycloud.webapi.common.service.FreeGameService;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
* @author VarleyT
* @date 2022/10/6
*/
@Service
public class FreeGameServiceImpl extends ServiceImpl<FreeGameMapper, FreeGame> implements FreeGameService {
@Override
public void add(List<FreeGame> freeGameList) {
freeGameList.forEach(freeGame -> saveOrUpdate(freeGame));
}

@Override
public List<FreeGame> getInfos() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sdf.format(new Date());
List<FreeGame> list = list(new QueryWrapper<FreeGame>()
.apply("start_time < time({0}) and end_time > time({0})", now));
return list;
}


}
4 changes: 4 additions & 0 deletions src/main/java/online/fycloud/webapi/core/common/R.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package online.fycloud.webapi.core.common;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

/**
Expand All @@ -13,14 +14,17 @@ public class R<T> {
/**
* 响应代码
*/
@JSONField(ordinal = 1)
private Integer code;
/**
* 响应信息
*/
@JSONField(ordinal = 2)
private String msg;
/**
* 数据
*/
@JSONField(ordinal = 3)
private T data;
public static <T> R<T> success() {
R<T> r = new R<>();
Expand Down
12 changes: 9 additions & 3 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ spring:
active: dev

datasource:
url: jdbc:mysql://${DB.host}:${DB.port:3306}/${DB.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
url: jdbc:mysql://${DB.host}:${DB.port:3306}/${DB.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: ${DB.username}
password: ${DB.password}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
max-lifetime: 30000
minimum-idle: 3
minimum-idle: 5
maximum-pool-size: 30
jackson:
date-format: yyyy-MM-dd HH:mm:ss
Expand All @@ -30,4 +30,10 @@ server:
prefix: access_log
rotate: true
suffix: .log
directory: logs
directory: logs

API:
Censys:
Authorization: ${censys_secret}
# 网站状态查询
queryAPI: "https://search.censys.io/api/v2/hosts/"

0 comments on commit 9298819

Please sign in to comment.