diff --git a/src/main/java/net/lamgc/cgj/pixiv/PixivDownload.java b/src/main/java/net/lamgc/cgj/pixiv/PixivDownload.java index 7b4e504..29ec8d4 100644 --- a/src/main/java/net/lamgc/cgj/pixiv/PixivDownload.java +++ b/src/main/java/net/lamgc/cgj/pixiv/PixivDownload.java @@ -247,6 +247,43 @@ public class PixivDownload { }); } + /** + * 从JsonArray获取数据 + * @param rankingArray JsonArray对象 + * @param rankStart 开始索引, 从0开始 + * @param range 范围 + * @return 返回List对象 + */ + public static List getRanking(JsonArray rankingArray, int rankStart, int range) { + //需要添加一个总量, 否则会完整跑完一次. + //检查是否为最后一次请求,和剩余量有多少 + log.info("正在读取JsonArray...(rankStart: {}, range: {})", rankStart, range); + ArrayList results = new ArrayList<>(rankingArray.size()); + for (int rankIndex = rankStart; rankIndex < rankingArray.size() && rankIndex < range; rankIndex++) { + JsonElement jsonElement = rankingArray.get(rankIndex); + JsonObject rankInfo = jsonElement.getAsJsonObject(); + int rank = rankInfo.get("rank").getAsInt(); + int illustId = rankInfo.get("illust_id").getAsInt(); + int authorId = rankInfo.get("user_id").getAsInt(); + String authorName = rankInfo.get("user_name").getAsString(); + String title = rankInfo.get("title").getAsString(); + log.info("当前到第 {}/{} 名(总共 {} 名), IllustID: {}, Author: ({}) {}, Title: {}", rank, rankStart + range - 1, range, illustId, authorId, authorName, title); + results.add(rankInfo); + } + log.info("JsonArray读取完成."); + return results; + } + + /** + * 获取排行榜 + * @param contentType 排行榜类型 + * @param mode 排行榜模式 + * @param time 查询时间 + * @param rankStart 开始排名, 从1开始 + * @param range 取范围 + * @return 成功返回有值List, 失败且无异常返回空 + * @throws IOException 获取异常时抛出 + */ public List getRanking(PixivURL.RankingContentType contentType, PixivURL.RankingMode mode, Date time, int rankStart, int range) throws IOException { if(rankStart <= 0) { diff --git a/src/test/java/net/lamgc/cgj/pixiv/PixivDownloadTest.java b/src/test/java/net/lamgc/cgj/pixiv/PixivDownloadTest.java index 97ce6a8..74515c6 100644 --- a/src/test/java/net/lamgc/cgj/pixiv/PixivDownloadTest.java +++ b/src/test/java/net/lamgc/cgj/pixiv/PixivDownloadTest.java @@ -106,7 +106,7 @@ public class PixivDownloadTest { GregorianCalendar gregorianCalendar = new GregorianCalendar(); gregorianCalendar.setTime(new Date()); - gregorianCalendar.add(Calendar.DATE, -1); + gregorianCalendar.add(Calendar.DATE, -2); Date queryDate = gregorianCalendar.getTime(); String date = new SimpleDateFormat("yyyyMMdd").format(queryDate); log.info("查询时间: {}", date); @@ -126,7 +126,7 @@ public class PixivDownloadTest { zos.setLevel(9); log.info("正在调用方法..."); try { - pixivDownload.getRankingAsInputStream(null, PixivURL.RankingMode.MODE_DAILY_R18, queryDate, 15, PixivDownload.PageQuality.ORIGINAL, (rank, link, rankInfo, inputStream) -> { + pixivDownload.getRankingAsInputStream(null, PixivURL.RankingMode.MODE_DAILY_R18, queryDate, 500, PixivDownload.PageQuality.ORIGINAL, (rank, link, rankInfo, inputStream) -> { try { ZipEntry entry = new ZipEntry("Rank" + rank + "-" + link.substring(link.lastIndexOf("/") + 1)); entry.setComment(rankInfo.toString()); @@ -153,7 +153,7 @@ public class PixivDownloadTest { GregorianCalendar gregorianCalendar = new GregorianCalendar(); gregorianCalendar.setTime(new Date()); - gregorianCalendar.add(Calendar.DATE, -1); + gregorianCalendar.add(Calendar.DATE, -2); Date queryDate = gregorianCalendar.getTime(); String date = new SimpleDateFormat("yyyyMMdd").format(queryDate); log.info("查询时间: {}", date); @@ -173,8 +173,9 @@ public class PixivDownloadTest { log.info("正在调用方法..."); try { - pixivDownload.getRankingAsInputStream(null, null, queryDate, 65, 55, PixivDownload.PageQuality.ORIGINAL, (rank, link, rankInfo, inputStream) -> { - try { + pixivDownload.getRankingAsInputStream(null, null, queryDate, 5, 50, PixivDownload.PageQuality.ORIGINAL, (rank, link, rankInfo, inputStream) -> { + /*try { + ZipEntry entry = new ZipEntry("Rank" + rank + "-" + link.substring(link.lastIndexOf("/") + 1)); entry.setComment(rankInfo.toString()); log.info("正在写入: " + entry.getName()); @@ -182,9 +183,11 @@ public class PixivDownloadTest { IOUtils.copy(inputStream, zos); zos.flush(); log.info("已成功写入 {}", entry.getName()); + inputStream.close(); } catch (IOException e) { log.error("写入文件项时发生异常", e); - } + }*/ + log.info("空操作"); }); } finally { zos.finish();