commit b80852e7a09c52e46a7af130458a4d9b4e58b041 Author: dengqn <434500374@qq.com> Date: Thu Sep 25 19:53:41 2025 +0800 aaaa 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
聆音Club
+
+ Make a donation +
+ + + + + + + +
+

+ 发布电子书可使用聆音Club图书发种工具链接
+
+ 自己手动发布请遵循以下规则:种子信息填写规范与指导链接
+
+ + + + +
+ 全站 [Free] 生效中!时间:2025-09-19 + 00:00:00 ~ 2025-09-26 00:00:00
+
+ + +

热门

+ + + + +
+ posterposterposterposterposterposterposterposterposterposter
+
+ + + + + + + + + + + + + + + + + + + + +
+

<< 上一页      下一页 >>
1 - 50 | 51 - 100 | 101 - 150 | 151 - 200 | ... | 28051 - 28100 | 28101 - 28150 | 28151 - 28164

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类型标题 + commentstimesizeseedersleecherssnatched发布者 +
电子书 + + + + + + + + +
圭恰迪尼格言集 + [热门] FreeH&R
作者: (Yi Da + Li)Fu Lang Qie Si Ke·Gui Qia Di Ni | 译者: 王坚 译 / 刘训练 校 | 出版社: 译林出版社 | 出版年: + 2012-8-1 | mobi +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 23天
22时
506.49
KB
2908匿名
电子书 + + + + + + + + +
古典自由主义与自由至上主义 + [热门] FreeH&R
作者: [英] + 诺尔曼·P·巴利 | 译者: 竺乾威 | 出版社: 上海人民出版社 | 出版年: 1998-01 |MOBI +
+
+
+
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 23天
23时
2.83
MB
27013匿名
电子书 + + + + + + + + +
公正 + 该如何做是好 [热门] FreeH&R
作者: [美] 迈克尔·桑德尔 | + 译者: 朱慧玲 | 出版社: 中信出版社 | 出版年: 2011-1-1 | MOBi +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 23天
23时
645.98
KB
34011匿名
电子书 + + + + + + + + +
德意志悲苦剧的起源 + [热门] FreeH&R
作者: [德] + 瓦尔特·本雅明 | 译者: 李双志 / 苏伟 | 出版社: 北京师范大学出版社 | 出版年: 2013-1-1 |mobi +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 23天
23时
598.56
KB
3409匿名
电子书 + + + + + + + + +
道德原则研究 + [热门] FreeH&R
作者: [英] 休谟 + | 译者: 曾晓平 | 出版社: 商务印书馆 | 出版年: 2001-2 |mobi +
+
+
+
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 23天
23时
550.68
KB
2705匿名
电子书 + + + + + + + + +
北大哲学课 + [热门] FreeH&R
作者:张笑恒/中国戏剧出版社/2011【MOBI】 +
+
+
+
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
123天
23时
551.95
KB
29016匿名
电子书 + + + + + + + + +
[失恋后,原本冷淡的青梅竹马变得温柔娇甜][七烏未奏][Vol.01-Vol.02] + [热门] FreeH&R
失恋後、険悪だった幼なじみが砂糖菓子みたいに甘い + | 失恋后,原本冷淡的青梅竹马变得像砂糖点心一样温柔甜美 ~先苦后甜~ +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
10时
10.32
MB
15043匿名
电子书 + + + + + + + + +
[我的青梅竹马似乎是第一女主角][3pu][Vol.01] + [热门] FreeH&R
俺の幼馴染はメインヒロインらしい。 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
11时
10.78
MB
8 + 034匿名
电子书 + + + + + + + + +
[小书痴的下克上:汉娜蕾贵族院五年级生][香月美夜][Vol.01] + [热门] FreeH&R
本好きの下剋上 + ハンネローレの貴族院五年生 | 书虫的下克上~汉娜萝蕾贵族院五年级 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
17时
4.70
MB
9 + 012匿名
电子书 + + + + + + + + +
[δ和γ的理学部笔记][逆井卓馬][Vol.01-Vol.02] + [热门] FreeH&R
デルタとガンマの理学部ノート +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
19时
15.49
MB
9 + 013匿名
电子书 + + + + + + + + +
[成为阳光系的我专属的青春至上主义][持崎湯葉][Vol.01] + FreeH&R
陽キャになった俺の青春至上主義 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
22时
3.67
MB
9 + 013匿名
电子书 + + + + + + + + +
[对恋爱中的少女传达爱意,只需三十一字就足够!][畑野ライ麦][Vol.01-Vol.02] + FreeH&R
恋する少女にささやく愛は、みそひともじだけあればいい + | 浅吟低唱,三十一字道尽恋慕少女所期的爱 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 24天
23时
7.57
MB
10012匿名
电子书 + + + + + + + + +
[回复术士的重启人生~即死魔法与复制技能的极致回复术~][月夜涙][Vol.01-Vol.10] + [热门] FreeH&R
回復術士のやり直し + ~即死魔法とスキルコピーの超越ヒール~ | 回复术士的重启人生 ~即死魔法与技能复制的超越治愈~ +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 25天
0时
99.37
MB
14012匿名
电子书 + + + + + + + + +
[女王的御用甜点师][野村美月][Vol.01-Vol.02] + FreeH&R
アルジャン・カレール 〜革命の英雄、或いは女王の菓子職人〜 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 25天
1时
35.24
MB
9 + 010匿名
有声书 + + + + + + + + +
[想要成为影之实力者!][逢沢大介×東西×坂野杏梨][Vol.01-Vol.14][未完][bili] + [热门] FreeH&R
陰の実力者になりたくて! + | 我想要成為影之強者!| bili | +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 25天
6时
4.56
GB
8 + 0114匿名
电子书 + + + + + + + + +
[单禺玄言][明公&李瑾][001-230][未完结][B站电子版] + [热门] FreeH&R
未完 | bili | + 简中 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
1.60
GB
5 + 016匿名
电子书 + + + + + + + + +
[太臟人氣王傳說][大亞門][東立][魔蛙][8完] + [热门] FreeH&R
太脏人气王传说 + | Taizou Mote King Saga | 太臓もて王サーガ | 完结 | 繁中 | 東立 | scan by 魔蛙 | ZIP +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
330.43
MB
7 + 016匿名
电子书 + + + + + + + + +
[狐神][金英彬×俞贤][Vol.01] + [热门] FreeH&R
라온 | 亞圖 | 繁中 + | 未完结 | ZIP | Scan by LYC +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
66.88
MB
8 + 06匿名
电子书 + + + + + + + + +
[荒川弘][百姓贵族][Vol 01-Vol 07][未完][東立] + [热门] FreeH&R
百姓貴族 | 未完 + | 东立 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
548.22
MB
8 + 015匿名
电子书 + + + + + + + + +
[山海师][狼烟无言][Chap.001-Chap.126] + [热门] FreeH&R
完结 | 简中 | + 有妖气 | ZIP +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
630.54
MB
8 + 016匿名
电子书 + + + + + + + + +
[时间支配者][彭杰][Chap.001-Chap.244] + FreeH&R
時間支配者 + | 未完结 | 简中 | 有妖气 | 休刊 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
20时
743.10
MB
7 + 013匿名
电子书 + + + + + + + + +
[一起一起這裡那裡 + 重掃版][異識][尖端][堕落的猴子][3未] FreeH&R
一起一起這裡那裡 | あっちこっち + | 尖端 | 繁中 | 未完 | 堕落的猴子 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 29天
22时
209.00
MB
5 + 09匿名
电子书 + + + + + + + + +
[吾皇巴扎黑][白茶][1-327话+单行本] + [热门] FreeH&R
吾皇巴扎黑 | 国漫 + | 长图页漫 | 未完 | 简中 | 自购 | 第12届金龙奖铜奖 | 连载版+单行本 | Bili +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
0天
2.79
GB
12022匿名
电子书 + + + + + + + + +
[新功夫旋風兒-柔道篇][蛭田達也][東立][aaa874160][27完] + [热门] FreeH&R
新・コータローまかりとおる! + 柔道編 | 東立 | aaa874160 | 繁体 | RAR | 完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
1天
3.27
GB
10023匿名
电子书 + + + + + + + + +
[有閑俱樂部][一条由香莉][尖端][zsliming][19未] + FreeH&R
有閑倶楽部 + | 尖端 | zsliming | 繁体 | ZIP | 未完 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
1天
2.87
GB
3 + 015匿名
电子书 + + + + + + + + +
[逆天武神][分布文化][Chap.001-Chap.037] + [热门] FreeH&R
腾讯动漫 | 全彩 + | 完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
1天
96.13
MB
12018匿名
电子书 + + + + + + + + +
[厨妖师][夕力][Chap + 001-Chap 087] [热门] FreeH&R
腾讯动漫 | 全彩 | 完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
4天
163.69
MB
9 + 019匿名
电子书 + + + + + + + + +
[无间地狱][Neoman][Chap + 01-Chap 55] [热门] FreeH&R
腾讯动漫 | 全彩 | 完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
260.83
MB
15026匿名
电子书 + + + + + + + + +
[惊悚系列][漫神共创][Chap.001-Chap.045] + [热门] FreeH&R
彩色页漫 | + 总45节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
177.79
MB
11021匿名
电子书 + + + + + + + + +
[我可不是老实人][yaua][Chap + 001-Chap 048] FreeH&R
彩色页漫 | 总48节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
220.08
MB
9 + 016匿名
电子书 + + + + + + + + +
[笨蛋,跟我走!][扣子][Chap + 001-Chap 045] FreeH&R
彩色页漫 | 总45节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
283.70
MB
10016匿名
电子书 + + + + + + + + +
[微光世界][bless x 一纸鲸文化][Chap 001-Chap + 083] [热门] FreeH&R
彩色页漫 | 总83节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
711.24
MB
9 + 017匿名
电子书 + + + + + + + + +
[女帝直播攻略(旧)][巬囲㶫工坊][Chap 001-Chap + 042] FreeH&R
彩色页漫 | 总42节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
255.42
MB
10014匿名
电子书 + + + + + + + + +
[伏龙镇异事][Doris][Chap + 001-Chap 094] [热门] FreeH&R
彩色页漫 | 总94节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
212.41
MB
10018匿名
电子书 + + + + + + + + +
[十七岁那年][张三三][Chap + 01-Chap 44] [热门] FreeH&R
腾讯动漫 | 全彩 | 完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
7天
102.95
MB
11018匿名
电子书 + + + + + + + + +
[武学宗师在异世界做少女真难][上海我梦动漫][Chap.001-Chap.036] + FreeH&R
彩色页漫 + | 总36节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
147.38
MB
9 + 011匿名
电子书 + + + + + + + + +
[与兔共枕][星空社][Chap.001-Chap.032] + [热门] FreeH&R
彩色页漫 | + 总32节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
91.13
MB
13014匿名
电子书 + + + + + + + + +
[虚游神][惊面兔][Chap + 001-Chap 067] FreeH&R
彩色页漫 | 总67节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
194.25
MB
9 + 015匿名
电子书 + + + + + + + + +
[棉花糖与白日梦][扣子][Chap + 001-Chap 069](1) FreeH&R
彩色页漫 | 总69节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
437.38
MB
9 + 014匿名
电子书 + + + + + + + + +
[我当鸟人的那几年][明漫][Chap.001-Chap.068] + FreeH&R
彩色页漫 + | 总68节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
263.20
MB
10013匿名
电子书 + + + + + + + + +
[azusa] [当猫面向西边时][漆原友紀][Vol 01-Vol + 03][东贩][电子版] [热门] FreeH&R
猫が西向きゃ | 貓往西走 | + 东贩 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
456.47
MB
12021匿名
电子书 + + + + + + + + +
[嗜血王爵的告白][坐岸卡漫][Chap.01-Chap.42] + FreeH&R
简中|腾讯动漫|完结 +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
266.30
MB
11013匿名
电子书 + + + + + + + + +
[神女大人套路多][番奇动漫][Chap.001-Chap.096] + [热门] FreeH&R
彩色页漫 | + 总96节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
716.19
MB
9 + 015匿名
电子书 + + + + + + + + +
[我在古代拆CP][十二朝夕][Chap.001-Chap.049] + FreeH&R
彩色页漫 + | 总49节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
371.97
MB
9 + 013匿名
电子书 + + + + + + + + +
[和尚与小龙君][陌七][Chap + 001-Chap 071] [热门] FreeH&R
彩色页漫 | 总71节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
676.12
MB
10014匿名
电子书 + + + + + + + + +
[南部档案][南派泛娱][Chap.001-Chap.024] + [热门] FreeH&R
彩色页漫 | + 总24节章 | 简中 | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
114.45
MB
10015匿名
电子书 + + + + + + + + +
风洞实验数据的误差与修正 + [热门] FreeH&R
作者:恽起麟[PDF] +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
7.06
MB
18018匿名
电子书 + + + + + + + + +
[牌局][非人哉][Chap + 001-Chap 046] [热门] FreeH&R
彩色页漫 | 总46节章 | 简中 + | 完结 | 腾讯动漫 | cbz +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
346.51
MB
9 + 017匿名
电子书 + + + + + + + + +
飞行试验工程 + [热门] FreeH&R
作者: 周自全 | + 出版社: 航空工业出版社 | 出版年: 2010-12 |PDF +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
18.91
MB
20022匿名
电子书 + + + + + + + + +
飞行器研制系统工程 + [热门] FreeH&R
作者:阮镰 [pdf] +
+
+
+ imdbN/A
+
+ doubanN/A
+
+
download
Unbookmarked
+
0 + 1月
8天
9.19
MB
19012匿名
+

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); + } + } +}