JSOUP 获取 Nikke cdkey
Contents
这个网站的 cdkey 更新很及时,写了几行代码自动抓取信息,再配合邮件功能和定时器,看还会不会抢不到 XD
@Service
public class NikkeCDKeyService extends ServiceImpl<NikkeCdkeyMapper, NikkeCdkey> {
@Resource
private NikkeCdkeyMapper nikkeCdkeyMapper;
// 爬取 cdkey 信息
@SneakyThrows
@Transactional(rollbackFor = Exception.class)
public Result<Object> getCdKeyInfoByCSS() {
String url = "https://gamewith.jp/nikke/article/show/371014";
String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";
Document doc = Jsoup.connect(url)
.userAgent(userAgent)
.get();
// 按日期分类出来的 cdkey 表格, 一个日期内可能有多个 cdkey
// 主要是用来获取日期天数
Elements codeTableElements = doc.select("#article-body > div.code"); // size:12
// 总 h3 标签数对应的元素集合
Elements h3Elements = doc.select("#article-body > h3");
List<NikkeCdkey> nikkeCdkeyList = new ArrayList<>();
for (int j = 0, codeTableElementsSize = codeTableElements.size(); j < codeTableElementsSize; j++) {
Element element = codeTableElements.get(j);
// 实际发布 cdkey 日期的 h3 标签
String title = h3Elements.get(j).text();
Elements cdkeyElements = element.select("table > tbody > tr > td:nth-child(1)");
Elements rewardElements = element.select("table > tbody > tr > td:nth-child(2)");
// cdkeyElements 与 rewardElements 是一一对应的, 用哪个 size 都一样
for (int i = 0; i < cdkeyElements.size(); i++) {
NikkeCdkey nikkeCdkey = new NikkeCdkey();
String cdkey = cdkeyElements.get(i).text();
String reward = rewardElements.get(i).text();
nikkeCdkey.setTitle(title);
nikkeCdkey.setCdkey(cdkey);
nikkeCdkey.setReward(reward);
nikkeCdkeyList.add(nikkeCdkey);
}
}
int i = nikkeCdkeyMapper.saveOrUpdateByCdkey(nikkeCdkeyList);
return Result.ok("集合大小: " + i);
}
// 展示 cdkey 信息
public Result<Object> showCDKey() {
List<NikkeCdkey> nikkeCdkeyList = nikkeCdkeyMapper.selectList(null);
return Result.ok(nikkeCdkeyList);
}
}