From b80852e7a09c52e46a7af130458a4d9b4e58b041 Mon Sep 17 00:00:00 2001 From: dengqn <434500374@qq.com> Date: Thu, 25 Sep 2025 19:53:41 +0800 Subject: [PATCH] aaaa --- .gitignore | 39 + .idea/.gitignore | 8 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/encodings.xml | 7 + .idea/misc.xml | 17 + .idea/vcs.xml | 6 + pom.xml | 60 + .../java/com/dengqn/app/lingyinapi/Main.java | 23 + .../com/dengqn/app/lingyinapi/apis/Seed.java | 62 + .../app/lingyinapi/beans/SeedListItem.java | 11 + .../app/lingyinapi/config/CookieConfig.java | 20 + .../lingyinapi/config/HttpClientConfig.java | 88 + .../dengqn/app/lingyinapi/html/HtmlTool.java | 65 + .../dengqn/app/lingyinapi/http/HttpTool.java | 36 + src/main/resources/application-dev.properties | 6 + src/main/resources/application.properties | 1 + src/main/resources/test-seed-list-page.html | 3160 +++++++++++++++++ .../app/lingyinapi/http/HttpToolTest.java | 29 + 18 files changed, 3643 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 src/main/java/com/dengqn/app/lingyinapi/Main.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/apis/Seed.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/beans/SeedListItem.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/config/CookieConfig.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/config/HttpClientConfig.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/html/HtmlTool.java create mode 100644 src/main/java/com/dengqn/app/lingyinapi/http/HttpTool.java create mode 100644 src/main/resources/application-dev.properties create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/test-seed-list-page.html create mode 100644 src/test/java/com/dengqn/app/lingyinapi/http/HttpToolTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..480bdf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.kotlin + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..df79943 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ef94371 --- /dev/null +++ b/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.dengqn.app + lingyin-api + 1.0 + + + 25 + 25 + UTF-8 + + + + + + org.springframework.boot + spring-boot-starter-web + 3.5.5 + + + org.springframework.boot + spring-boot-starter-test + 3.5.5 + + + + org.jsoup + jsoup + 1.21.2 + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + + org.projectlombok + lombok + 1.18.40 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 25 + 25 + + + + + + diff --git a/src/main/java/com/dengqn/app/lingyinapi/Main.java b/src/main/java/com/dengqn/app/lingyinapi/Main.java new file mode 100644 index 0000000..95aeba1 --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/Main.java @@ -0,0 +1,23 @@ +package com.dengqn.app.lingyinapi; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * + * @author dengqn + * @since 2025/9/23 18:45 + */ +@Slf4j +@SpringBootApplication +public class Main { + + void main(String[] args) { + try { + SpringApplication.run(Main.class, args); + } catch (Throwable e) { + log.info("error on app starting: {}", e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/apis/Seed.java b/src/main/java/com/dengqn/app/lingyinapi/apis/Seed.java new file mode 100644 index 0000000..cdf9b1d --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/apis/Seed.java @@ -0,0 +1,62 @@ +package com.dengqn.app.lingyinapi.apis; + +import com.dengqn.app.lingyinapi.beans.SeedListItem; +import com.dengqn.app.lingyinapi.config.CookieConfig; +import com.dengqn.app.lingyinapi.html.HtmlTool; +import com.dengqn.app.lingyinapi.http.HttpTool; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 获取种子分页情况 + * + * @author dengqn + * @since 2025/9/23 19:11 + */ +@Slf4j +@RestController +@RequestMapping("/seed") +public class Seed { + + private OkHttpClient okHttpClient; + + public Seed(OkHttpClient okHttpClient) { + this.okHttpClient = okHttpClient; + } + + @GetMapping("/list") + public ResponseEntity> getSeedPage( + @RequestParam(required = false, defaultValue = "0", name = "inclbookmarked") String inclbookmarked, + @RequestParam(required = false, defaultValue = "1", name = "incldead") String incldead, + @RequestParam(required = false, defaultValue = "0", name = "spstate") String spstate, + @RequestParam(required = false, defaultValue = "1", name = "page") String page + ) throws IOException { + + String url = "https://pt.soulvoice.club/special.php?inclbookmarked=%s&incldead=%s&spstate=%s&page=%s" + .formatted(inclbookmarked, incldead, spstate, page); + String html = HttpTool.getHTML(url, okHttpClient); + log.info("html:{}", html); + Document doc = Jsoup.parse(html); + List listItem = HtmlTool.getSeedListItem(doc); + return ResponseEntity.ok(listItem); + } + + + + +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/beans/SeedListItem.java b/src/main/java/com/dengqn/app/lingyinapi/beans/SeedListItem.java new file mode 100644 index 0000000..383ce8f --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/beans/SeedListItem.java @@ -0,0 +1,11 @@ +package com.dengqn.app.lingyinapi.beans; + +/** + * + * @author dengqn + * @since 2025/9/25 18:22 + */ +public record SeedListItem(String seedCover, String seedName, String seedUrl, boolean isFree, boolean isHitAndRun, + String downloadUrl, String time, String size, String seeders, String views, + boolean isAnonymous) { +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/config/CookieConfig.java b/src/main/java/com/dengqn/app/lingyinapi/config/CookieConfig.java new file mode 100644 index 0000000..489bd68 --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/config/CookieConfig.java @@ -0,0 +1,20 @@ +package com.dengqn.app.lingyinapi.config; + +import lombok.Data; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + * @author dengqn + * @since 2025/9/23 19:10 + */ +@Data +@Component +@ConfigurationProperties(prefix = "site.config.cookies") +public class CookieConfig { + private String secureLogin; + private String securePass; + private String secureUid; +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/config/HttpClientConfig.java b/src/main/java/com/dengqn/app/lingyinapi/config/HttpClientConfig.java new file mode 100644 index 0000000..9670aaa --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/config/HttpClientConfig.java @@ -0,0 +1,88 @@ +package com.dengqn.app.lingyinapi.config; + +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.net.ssl.SSLEngine; +import javax.net.ssl.X509ExtendedTrustManager; +import java.io.IOException; +import java.net.Socket; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Optional; + +/** + * + * @author dengqn + * @since 2025/9/24 11:45 + */ +@Slf4j +@Configuration +public class HttpClientConfig { + + private CookieConfig cookieConfig; + + public HttpClientConfig(CookieConfig cookieConfig) { + this.cookieConfig = cookieConfig; + } + + @Bean + public OkHttpClient okHttpClient() { + return new OkHttpClient.Builder() + .cookieJar(new CookieJar() { + @Override + public void saveFromResponse(@NotNull HttpUrl httpUrl, @NotNull List list) { + + } + + @NotNull + @Override + public List loadForRequest(@NotNull HttpUrl httpUrl) { + return List.of( + new Cookie.Builder().domain("pt.soulvoice.club").name("c_secure_login").value(cookieConfig.getSecureLogin()).build(), + new Cookie.Builder().domain("pt.soulvoice.club").name("c_secure_uid").value(cookieConfig.getSecureUid()).build(), + new Cookie.Builder().domain("pt.soulvoice.club").name("c_secure_pass").value(cookieConfig.getSecurePass()).build() + ); + } + }) + .callTimeout(Duration.of(10, ChronoUnit.MINUTES)) + .addInterceptor(new HTTPClientInterceptor()) + .build(); + } + + + class HTTPClientInterceptor implements Interceptor { + + @NotNull + @Override + public Response intercept(@NotNull Chain chain) throws IOException { + StringBuilder query = new StringBuilder(); + query.append("\n------------------------\n"); + query.append("URL:\n"); + query.append("[").append(chain.request().method()).append("]-").append(chain.request().url()).append("\n"); + Headers headers = chain.request().headers(); + query.append("\nHEADER:\n"); + for (String name : headers.names()) { + String value = headers.get(name); + query.append("| ").append(name).append(":").append(value).append("\n"); + } + Optional.ofNullable(chain.request().body()).ifPresent(op -> { + try { + query.append("body length: ").append(op.contentLength()).append("\n"); + } catch (IOException e) { + e.printStackTrace(); + } + }); + query.append("------------------------\n"); + log.info(query.toString()); + return chain.proceed(chain.request()); + } + } + +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/html/HtmlTool.java b/src/main/java/com/dengqn/app/lingyinapi/html/HtmlTool.java new file mode 100644 index 0000000..fe02349 --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/html/HtmlTool.java @@ -0,0 +1,65 @@ +package com.dengqn.app.lingyinapi.html; + +import com.dengqn.app.lingyinapi.beans.SeedListItem; +import lombok.extern.slf4j.Slf4j; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * + * @author dengqn + * @since 2025/9/25 18:28 + */ +@Slf4j +public class HtmlTool { + public static List getSeedListItem(Document doc) { + List items = new ArrayList<>(); + + Element torrents; + try { + torrents = doc.getElementsByClass("torrents").getFirst(); + } catch (Exception e) { + e.printStackTrace(); + return new ArrayList<>(); + } + + return torrents.select("tr").stream().skip(1) + .map(tr -> { + try { + /** + * 标题部分 + */ + Element torrentNames = tr.getElementsByTag("table").first(); + Elements seedNames = torrentNames.getElementsByTag("td"); + String seedCover = seedNames.get(0).getElementsByTag("img").first().attr("data-src"); + String seedName = seedNames.get(1).getElementsByTag("a").first().attr("title"); + String seedUrl = seedNames.get(1).getElementsByTag("a").first().attr("href"); + boolean isFree = seedNames.get(1).getElementsByClass("pro_free").size() > 0; + boolean isHitAndRun = seedNames.get(1).getElementsByClass("hitandrun").size() > 0; + String downloadUrl = seedNames.get(3).getElementsByTag("a").first().attr("href"); + /** + * 数据 + */ + Elements tds = tr.selectXpath("td"); + // skip 3 + // 时间(title属性) + String time = tds.get(3).getElementsByTag("span").first().attr("title"); + String size = tds.get(4).text().trim(); + String seeders = tds.get(5).getElementsByTag("b").first().text().trim(); + String views = tds.get(7).getElementsByTag("b") == null || tds.get(7).getElementsByTag("b").size() == 0 ? "0" : tds.get(7).getElementsByTag("b").first().text().trim(); + boolean isAnonymous = tds.get(8).text().trim().contains("匿名"); + + + return new SeedListItem(seedCover, seedName, seedUrl, isFree, isHitAndRun, downloadUrl, time, size, seeders, views, isAnonymous); + } catch (Exception e) { + log.error("解析报错跳过:" + e.getMessage()); + return null; + } + }).filter(Objects::nonNull).toList(); + } +} diff --git a/src/main/java/com/dengqn/app/lingyinapi/http/HttpTool.java b/src/main/java/com/dengqn/app/lingyinapi/http/HttpTool.java new file mode 100644 index 0000000..24f5a5f --- /dev/null +++ b/src/main/java/com/dengqn/app/lingyinapi/http/HttpTool.java @@ -0,0 +1,36 @@ +package com.dengqn.app.lingyinapi.http; + +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okhttp3.internal.http.HttpMethod; + +import java.io.IOException; + +/** + * + * @author dengqn + * @since 2025/9/24 14:23 + */ +@Slf4j +public class HttpTool { + public static String getHTML(String url, OkHttpClient okHttpClient) { + try { + Response response = okHttpClient.newCall(new Request.Builder() + .url(url) + .method("GET", null) + .build()) + .execute(); + ResponseBody body = response.body(); + if (body == null) return ""; + + byte[] bytes = body.bytes(); + return new String(bytes); + } catch (IOException e) { + log.error(e.getLocalizedMessage(), e); + return ""; + } + } +} diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties new file mode 100644 index 0000000..dd2fce4 --- /dev/null +++ b/src/main/resources/application-dev.properties @@ -0,0 +1,6 @@ +server.port=46578 +server.servlet.context-path=/lingyin-api + +site.config.cookies.secureLogin=bm9wZQ%3D%3D +site.config.cookies.securePass=69da36c4a07a6ce260aab777dc99b9d5 +site.config.cookies.secureUid=MTQ5MTkw diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..cbb42d2 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.profiles.active=dev diff --git a/src/main/resources/test-seed-list-page.html b/src/main/resources/test-seed-list-page.html new file mode 100644 index 0000000..a827053 --- /dev/null +++ b/src/main/resources/test-seed-list-page.html @@ -0,0 +1,3160 @@ + + + + + + 聆音Club :: 特别 - Powered by NexusPHP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 首 页 + 论 坛 + 种 子 + 阅 听 + 候 选 + 求 种 + 发 布 + 字 幕 + 排 行 榜 + 规 则 + 常见问题 + 联系管理组 + + + + + + + + + + + + + + 欢迎回来, dengqn [退出] + [ 控制面板 ] + [收藏] + 魔力值 [使用]: 155,626.9 [签到已得260, 补签卡: 2] [勋章] + 邀请 [发送]: 0(0) + 分享率: 8.890 上传量: 839.92 GB 下载量: 94.47 GB 当前活动: 112 0 + 可连接:是 连接数:无限制 H&R: [0/0/15] 认领: [0/1000] + + + 7 (0 新) 0 + + + + + + + + + + + + + + 发布电子书可使用聆音Club图书发种工具(链接) + + 自己手动发布请遵循以下规则:种子信息填写规范与指导(链接) + + + + + 全站 [Free] 生效中!时间:2025-09-19 + 00:00:00 ~ 2025-09-26 00:00:00 + + + + + + 热门 + + + + + + + + + + + 搜索箱 + + + + + + + + + + + 分类 + + + + + + + + + + + + + + + + 语言 + + + + 其它 + + + 英文 + + + 中文 + + + + + + + + 编码 + + + + Other + + + PDF + + + MOBI + + + EPUB + + + AZW/AZW3 + + + + + + + + 类别 + + + + 其它 + + + 耽美 + + + 漫画 + + + 轻小说 + + + 英文原版 + + + 网络小说 + + + 生活时尚 + + + 学习教育 + + + 经济管理 + + + 励志成功 + + + + + 人文社科 + + + 小说文学 + + + 历史传记 + + + + + + + + + + + + + + 显示断种/活种? + + + + + + 包括断种 + 活种 + 断种 + + + + + + 显示促销种子? + + + + + + 全部 + 普通 + 免费 + 2X + 2X免费 + 50% + 2X 50% + 30% + + + + + + 显示收藏? + + + + + + 全部 + 仅收藏 + 仅未收藏 + + + + + + 体积范围(GB): + + + + + ~ + + + + + + 做种人数范围: + + + + + ~ + + + + + + 下载人数范围: + + + + + ~ + + + + + + 完成次数范围: + + + + + ~ + + + + + + 发布时间范围: + + + + + ~ + + + + + + + + + + + + + 搜索关键字: + + + + + + + + + + + + + + + + 范围: + + 标题 + 简介 + 发布者 + IMDb链接 + + + 匹配模式: + + 与 + 准确 + + + + + + 2025 吴邪私家笔记 不眠日 凡人修仙传 神奇4侠 剑来 异形 FRDS 基地 喜马拉雅 侏罗纪世界 仙逆 wiki 暴风圈 神奇四侠 + + + + 应求特效完结禁转原创首发官方DIY国语中字HDR杜比HLG + + + + + + + + + + +<< 上一页 下一页 >>1 - 50 | 51 - 100 | 101 - 150 | 151 - 200 | ... | 28051 - 28100 | 28101 - 28150 | 28151 - 28164 + + + 类型 + 标题 + + + + + + + + 发布者 + + + + + + + + + + 圭恰迪尼格言集 + [热门] 作者: (Yi Da + Li)Fu Lang Qie Si Ke·Gui Qia Di Ni | 译者: 王坚 译 / 刘训练 校 | 出版社: 译林出版社 | 出版年: + 2012-8-1 | mobi + + + + + N/A + + N/A + + + + + + + 0 + + 23天22时 + 506.49KB + 29 + 0 + 8 + 匿名 + + + + + + + + + 古典自由主义与自由至上主义 + [热门] 作者: [英] + 诺尔曼·P·巴利 | 译者: 竺乾威 | 出版社: 上海人民出版社 | 出版年: 1998-01 |MOBI + + + + + + + + N/A + + N/A + + + + + + + 0 + + 23天23时 + 2.83MB + 27 + 0 + 13 + 匿名 + + + + + + + + + 公正 + 该如何做是好 [热门] 作者: [美] 迈克尔·桑德尔 | + 译者: 朱慧玲 | 出版社: 中信出版社 | 出版年: 2011-1-1 | MOBi + + + + + N/A + + N/A + + + + + + + 0 + + 23天23时 + 645.98KB + 34 + 0 + 11 + 匿名 + + + + + + + + + 德意志悲苦剧的起源 + [热门] 作者: [德] + 瓦尔特·本雅明 | 译者: 李双志 / 苏伟 | 出版社: 北京师范大学出版社 | 出版年: 2013-1-1 |mobi + + + + + N/A + + N/A + + + + + + + 0 + + 23天23时 + 598.56KB + 34 + 0 + 9 + 匿名 + + + + + + + + + 道德原则研究 + [热门] 作者: [英] 休谟 + | 译者: 曾晓平 | 出版社: 商务印书馆 | 出版年: 2001-2 |mobi + + + + + + + + N/A + + N/A + + + + + + + 0 + + 23天23时 + 550.68KB + 27 + 0 + 5 + 匿名 + + + + + + + + + 北大哲学课 + [热门] 作者:张笑恒/中国戏剧出版社/2011【MOBI】 + + + + + + + + N/A + + N/A + + + + + + + 1 + 23天23时 + 551.95KB + 29 + 0 + 16 + 匿名 + + + + + + + + + [失恋后,原本冷淡的青梅竹马变得温柔娇甜][七烏未奏][Vol.01-Vol.02] + [热门] 失恋後、険悪だった幼なじみが砂糖菓子みたいに甘い + | 失恋后,原本冷淡的青梅竹马变得像砂糖点心一样温柔甜美 ~先苦后甜~ + + + + + N/A + + N/A + + + + + + + 0 + + 24天10时 + 10.32MB + 15 + 0 + 43 + 匿名 + + + + + + + + + [我的青梅竹马似乎是第一女主角][3pu][Vol.01] + [热门] 俺の幼馴染はメインヒロインらしい。 + + + + + N/A + + N/A + + + + + + + 0 + + 24天11时 + 10.78MB + 8 + + 0 + 34 + 匿名 + + + + + + + + + [小书痴的下克上:汉娜蕾贵族院五年级生][香月美夜][Vol.01] + [热门] 本好きの下剋上 + ハンネローレの貴族院五年生 | 书虫的下克上~汉娜萝蕾贵族院五年级 + + + + + N/A + + N/A + + + + + + + 0 + + 24天17时 + 4.70MB + 9 + + 0 + 12 + 匿名 + + + + + + + + + [δ和γ的理学部笔记][逆井卓馬][Vol.01-Vol.02] + [热门] デルタとガンマの理学部ノート + + + + + N/A + + N/A + + + + + + + 0 + + 24天19时 + 15.49MB + 9 + + 0 + 13 + 匿名 + + + + + + + + + [成为阳光系的我专属的青春至上主义][持崎湯葉][Vol.01] + 陽キャになった俺の青春至上主義 + + + + + N/A + + N/A + + + + + + + 0 + + 24天22时 + 3.67MB + 9 + + 0 + 13 + 匿名 + + + + + + + + + [对恋爱中的少女传达爱意,只需三十一字就足够!][畑野ライ麦][Vol.01-Vol.02] + 恋する少女にささやく愛は、みそひともじだけあればいい + | 浅吟低唱,三十一字道尽恋慕少女所期的爱 + + + + + N/A + + N/A + + + + + + + 0 + + 24天23时 + 7.57MB + 10 + 0 + 12 + 匿名 + + + + + + + + + [回复术士的重启人生~即死魔法与复制技能的极致回复术~][月夜涙][Vol.01-Vol.10] + [热门] 回復術士のやり直し + ~即死魔法とスキルコピーの超越ヒール~ | 回复术士的重启人生 ~即死魔法与技能复制的超越治愈~ + + + + + N/A + + N/A + + + + + + + 0 + + 25天0时 + 99.37MB + 14 + 0 + 12 + 匿名 + + + + + + + + + [女王的御用甜点师][野村美月][Vol.01-Vol.02] + アルジャン・カレール 〜革命の英雄、或いは女王の菓子職人〜 + + + + + N/A + + N/A + + + + + + + 0 + + 25天1时 + 35.24MB + 9 + + 0 + 10 + 匿名 + + + + + + + + + [想要成为影之实力者!][逢沢大介×東西×坂野杏梨][Vol.01-Vol.14][未完][bili] + [热门] 陰の実力者になりたくて! + | 我想要成為影之強者!| bili | + + + + + N/A + + N/A + + + + + + + 0 + + 25天6时 + 4.56GB + 8 + + 0 + 114 + 匿名 + + + + + + + + + [单禺玄言][明公&李瑾][001-230][未完结][B站电子版] + [热门] 未完 | bili | + 简中 + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 1.60GB + 5 + + 0 + 16 + 匿名 + + + + + + + + + [太臟人氣王傳說][大亞門][東立][魔蛙][8完] + [热门] 太脏人气王传说 + | Taizou Mote King Saga | 太臓もて王サーガ | 完结 | 繁中 | 東立 | scan by 魔蛙 | ZIP + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 330.43MB + 7 + + 0 + 16 + 匿名 + + + + + + + + + [狐神][金英彬×俞贤][Vol.01] + [热门] 라온 | 亞圖 | 繁中 + | 未完结 | ZIP | Scan by LYC + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 66.88MB + 8 + + 0 + 6 + 匿名 + + + + + + + + + [荒川弘][百姓贵族][Vol 01-Vol 07][未完][東立] + [热门] 百姓貴族 | 未完 + | 东立 + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 548.22MB + 8 + + 0 + 15 + 匿名 + + + + + + + + + [山海师][狼烟无言][Chap.001-Chap.126] + [热门] 完结 | 简中 | + 有妖气 | ZIP + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 630.54MB + 8 + + 0 + 16 + 匿名 + + + + + + + + + [时间支配者][彭杰][Chap.001-Chap.244] + 時間支配者 + | 未完结 | 简中 | 有妖气 | 休刊 + + + + + N/A + + N/A + + + + + + + 0 + + 29天20时 + 743.10MB + 7 + + 0 + 13 + 匿名 + + + + + + + + + [一起一起這裡那裡 + 重掃版][異識][尖端][堕落的猴子][3未] 一起一起這裡那裡 | あっちこっち + | 尖端 | 繁中 | 未完 | 堕落的猴子 + + + + + N/A + + N/A + + + + + + + 0 + + 29天22时 + 209.00MB + 5 + + 0 + 9 + 匿名 + + + + + + + + + [吾皇巴扎黑][白茶][1-327话+单行本] + [热门] 吾皇巴扎黑 | 国漫 + | 长图页漫 | 未完 | 简中 | 自购 | 第12届金龙奖铜奖 | 连载版+单行本 | Bili + + + + + N/A + + N/A + + + + + + + 0 + + 1月0天 + 2.79GB + 12 + 0 + 22 + 匿名 + + + + + + + + + [新功夫旋風兒-柔道篇][蛭田達也][東立][aaa874160][27完] + [热门] 新・コータローまかりとおる! + 柔道編 | 東立 | aaa874160 | 繁体 | RAR | 完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月1天 + 3.27GB + 10 + 0 + 23 + 匿名 + + + + + + + + + [有閑俱樂部][一条由香莉][尖端][zsliming][19未] + 有閑倶楽部 + | 尖端 | zsliming | 繁体 | ZIP | 未完 + + + + + N/A + + N/A + + + + + + + 0 + + 1月1天 + 2.87GB + 3 + + 0 + 15 + 匿名 + + + + + + + + + [逆天武神][分布文化][Chap.001-Chap.037] + [热门] 腾讯动漫 | 全彩 + | 完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月1天 + 96.13MB + 12 + 0 + 18 + 匿名 + + + + + + + + + [厨妖师][夕力][Chap + 001-Chap 087] [热门] 腾讯动漫 | 全彩 | 完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月4天 + 163.69MB + 9 + + 0 + 19 + 匿名 + + + + + + + + + [无间地狱][Neoman][Chap + 01-Chap 55] [热门] 腾讯动漫 | 全彩 | 完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 260.83MB + 15 + 0 + 26 + 匿名 + + + + + + + + + [惊悚系列][漫神共创][Chap.001-Chap.045] + [热门] 彩色页漫 | + 总45节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 177.79MB + 11 + 0 + 21 + 匿名 + + + + + + + + + [我可不是老实人][yaua][Chap + 001-Chap 048] 彩色页漫 | 总48节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 220.08MB + 9 + + 0 + 16 + 匿名 + + + + + + + + + [笨蛋,跟我走!][扣子][Chap + 001-Chap 045] 彩色页漫 | 总45节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 283.70MB + 10 + 0 + 16 + 匿名 + + + + + + + + + [微光世界][bless x 一纸鲸文化][Chap 001-Chap + 083] [热门] 彩色页漫 | 总83节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 711.24MB + 9 + + 0 + 17 + 匿名 + + + + + + + + + [女帝直播攻略(旧)][巬囲㶫工坊][Chap 001-Chap + 042] 彩色页漫 | 总42节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 255.42MB + 10 + 0 + 14 + 匿名 + + + + + + + + + [伏龙镇异事][Doris][Chap + 001-Chap 094] [热门] 彩色页漫 | 总94节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 212.41MB + 10 + 0 + 18 + 匿名 + + + + + + + + + [十七岁那年][张三三][Chap + 01-Chap 44] [热门] 腾讯动漫 | 全彩 | 完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月7天 + 102.95MB + 11 + 0 + 18 + 匿名 + + + + + + + + + [武学宗师在异世界做少女真难][上海我梦动漫][Chap.001-Chap.036] + 彩色页漫 + | 总36节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 147.38MB + 9 + + 0 + 11 + 匿名 + + + + + + + + + [与兔共枕][星空社][Chap.001-Chap.032] + [热门] 彩色页漫 | + 总32节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 91.13MB + 13 + 0 + 14 + 匿名 + + + + + + + + + [虚游神][惊面兔][Chap + 001-Chap 067] 彩色页漫 | 总67节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 194.25MB + 9 + + 0 + 15 + 匿名 + + + + + + + + + [棉花糖与白日梦][扣子][Chap + 001-Chap 069](1) 彩色页漫 | 总69节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 437.38MB + 9 + + 0 + 14 + 匿名 + + + + + + + + + [我当鸟人的那几年][明漫][Chap.001-Chap.068] + 彩色页漫 + | 总68节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 263.20MB + 10 + 0 + 13 + 匿名 + + + + + + + + + [azusa] [当猫面向西边时][漆原友紀][Vol 01-Vol + 03][东贩][电子版] [热门] 猫が西向きゃ | 貓往西走 | + 东贩 + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 456.47MB + 12 + 0 + 21 + 匿名 + + + + + + + + + [嗜血王爵的告白][坐岸卡漫][Chap.01-Chap.42] + 简中|腾讯动漫|完结 + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 266.30MB + 11 + 0 + 13 + 匿名 + + + + + + + + + [神女大人套路多][番奇动漫][Chap.001-Chap.096] + [热门] 彩色页漫 | + 总96节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 716.19MB + 9 + + 0 + 15 + 匿名 + + + + + + + + + [我在古代拆CP][十二朝夕][Chap.001-Chap.049] + 彩色页漫 + | 总49节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 371.97MB + 9 + + 0 + 13 + 匿名 + + + + + + + + + [和尚与小龙君][陌七][Chap + 001-Chap 071] [热门] 彩色页漫 | 总71节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 676.12MB + 10 + 0 + 14 + 匿名 + + + + + + + + + [南部档案][南派泛娱][Chap.001-Chap.024] + [热门] 彩色页漫 | + 总24节章 | 简中 | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 114.45MB + 10 + 0 + 15 + 匿名 + + + + + + + + + 风洞实验数据的误差与修正 + [热门] 作者:恽起麟[PDF] + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 7.06MB + 18 + 0 + 18 + 匿名 + + + + + + + + + [牌局][非人哉][Chap + 001-Chap 046] [热门] 彩色页漫 | 总46节章 | 简中 + | 完结 | 腾讯动漫 | cbz + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 346.51MB + 9 + + 0 + 17 + 匿名 + + + + + + + + + 飞行试验工程 + [热门] 作者: 周自全 | + 出版社: 航空工业出版社 | 出版年: 2010-12 |PDF + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 18.91MB + 20 + 0 + 22 + 匿名 + + + + + + + + + 飞行器研制系统工程 + [热门] 作者:阮镰 [pdf] + + + + + N/A + + N/A + + + + + + + 0 + + 1月8天 + 9.19MB + 19 + 0 + 12 + 匿名 + + +1 - 50 + | 51 - 100 | 101 - 150 | 151 - 200 | ... | 28051 - 28100 | 28101 - 28150 | 28151 - 28164<< 上一页 下一页 >> + + + + + + + + + + + + diff --git a/src/test/java/com/dengqn/app/lingyinapi/http/HttpToolTest.java b/src/test/java/com/dengqn/app/lingyinapi/http/HttpToolTest.java new file mode 100644 index 0000000..8f5207d --- /dev/null +++ b/src/test/java/com/dengqn/app/lingyinapi/http/HttpToolTest.java @@ -0,0 +1,29 @@ +package com.dengqn.app.lingyinapi.http; + + +import com.dengqn.app.lingyinapi.beans.SeedListItem; +import com.dengqn.app.lingyinapi.html.HtmlTool; +import lombok.extern.slf4j.Slf4j; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.IOException; +import java.util.List; + +@Slf4j +@SpringBootTest +public class HttpToolTest { + + @Test + public void testGetHtml() throws IOException { + String htmlData = new String(this.getClass().getResourceAsStream("/test-seed-list-page.html").readAllBytes()); +// log.info("htmlData: {}", htmlData); + Document parse = Jsoup.parse(htmlData); + List listItem = HtmlTool.getSeedListItem(parse); + for (SeedListItem seedListItem : listItem) { + log.info("item-->{}", seedListItem); + } + } +}
<< 上一页 下一页 >>1 - 50 | 51 - 100 | 101 - 150 | 151 - 200 | ... | 28051 - 28100 | 28101 - 28150 | 28151 - 28164
1 - 50 + | 51 - 100 | 101 - 150 | 151 - 200 | ... | 28051 - 28100 | 28101 - 28150 | 28151 - 28164<< 上一页 下一页 >> +