Skip to content

Commit 4dd2ed3

Browse files
committed
Refactor with coroutine
1 parent 89facf8 commit 4dd2ed3

File tree

17 files changed

+222
-299
lines changed

17 files changed

+222
-299
lines changed

.idea/compiler.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
# SinaBlogPicDownloader
22

3-
获取新浪博客照片原图的下载器,根据博文URL解析出文章中所有缩略图对应的原图地址,批量下载。
3+
新浪博客文章原图的下载器,根据文章`URL`解析出文中所有缩略图对应的原图地址,批量下载,支持同时下载多个文章`URL`
44

55
参见[我的这篇文章](https://apqx.me/post/original/2021/12/12/关于-编程-的一件小事.html)
66

77
# 使用方式
88

9-
解压`SinaBlogPicDownloader-*.*.*.zip`,根据所使用的操作系统双击`SinaBlogPicDownloader``SinaBlogPicDownloader.bat`即可启动命令行程序。
9+
解压`SinaBlogPicDownloader-*.*.*.zip`,根据所使用的操作系统双击`SinaBlogPicDownloader``SinaBlogPicDownloader.bat`即可启动命令行程序,遵循提示输入文章URL
1010

11-
程序使用`Kotlin`编写,目标运行环境`JRE 17`,在`Windows``macOS``Linux`平台的`JVM`上均可运行。
11+
或手动编译执行:
1212

13-
支持2种下载模式,下载目录为`[user]/Downlaod/SinaDownload/`
13+
```sh
14+
# 工程根目录下执行
15+
./gradlew run
16+
```
1417

15-
## 模式1
18+
下载目录为`[user]/Downlaod/SinaDownload/`
1619

17-
根据文章`URL`下载,自动解析`URL`并下载博文中所有的图片原图。
20+
# 运行环境
1821

19-
## 模式2
20-
21-
根据缩略图下载,把想要的缩略图从浏览器拖到`[user]/Downlaod/SinaThumb/`中,执行此程序即可下载原图。
22+
程序使用`Kotlin`编写,目标运行环境`JRE 21`,在`Windows``macOS``Linux`平台的`JVM`上均可运行。

build.gradle.kts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
plugins {
2-
id ("org.jetbrains.kotlin.jvm") version "1.9.20" apply true
2+
kotlin ("jvm") version "1.9.20" apply true
3+
id("io.ktor.plugin") version "2.3.9" apply true
34
application
4-
55
}
66

77
group = "me.mudan"
88
version = "1.0.0"
99

1010
dependencies {
11+
implementation("io.ktor:ktor-client-okhttp-jvm:2.3.9")
1112
// 直接访问buildSrc中的kotlin代码
1213
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
1314
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
1415
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.20")
1516
implementation("org.jsoup:jsoup:1.15.3")
17+
implementation("ch.qos.logback:logback-classic:1.5.3")
18+
val ktorVersion = "2.3.9"
19+
// ktor使用的HTTP引擎
20+
implementation("io.ktor:ktor-client-okhttp:$ktorVersion")
21+
// ktor实现的核心代码
22+
implementation("io.ktor:ktor-client-core:$ktorVersion")
23+
// ktor的日志插件
24+
implementation("io.ktor:ktor-client-logging:$ktorVersion")
1625
}
1726

1827
tasks.getByName<Test>("test") {
@@ -21,16 +30,12 @@ tasks.getByName<Test>("test") {
2130

2231
java {
2332
toolchain {
24-
languageVersion = JavaLanguageVersion.of(17)
33+
languageVersion = JavaLanguageVersion.of(21)
2534
}
2635
}
2736

28-
tasks.compileKotlin {
29-
kotlinOptions.jvmTarget = "17"
30-
}
31-
32-
tasks.compileTestKotlin {
33-
kotlinOptions.jvmTarget = "17"
37+
kotlin {
38+
jvmToolchain(21)
3439
}
3540

3641
application {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.4-bin.zip
3+
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.5-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

settings.gradle.kts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
pluginManagement {
22
repositories {
3-
maven("https://maven.aliyun.com/repository/gradle-plugin")
4-
maven("https://maven.aliyun.com/repository/central")
5-
maven("https://maven.aliyun.com/repository/google")
3+
// central+jcenter+google
4+
maven("https://mirrors.cloud.tencent.com/nexus/repository/maven-public")
65
gradlePluginPortal()
76
mavenCentral()
87
google()
98
}
109
}
11-
1210
dependencyResolutionManagement {
1311
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
14-
1512
repositories {
16-
maven("https://maven.aliyun.com/repository/central")
17-
maven("https://maven.aliyun.com/repository/google")
13+
// central+jcenter+google
14+
maven("https://mirrors.cloud.tencent.com/nexus/repository/maven-public")
1815
mavenCentral()
1916
google()
2017
}

src/main/kotlin/me/mudan/sina/App.kt

Lines changed: 17 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,30 @@
11
package me.mudan.sina
22

3-
import me.mudan.sina.parser.ThumbParser
4-
import me.mudan.sina.parser.URLParser
3+
import me.mudan.sina.download.download
4+
import me.mudan.sina.tools.LogUtil
5+
import me.mudan.sina.tools.getImgIdListFromUrl
56
import java.io.*
67

78
/**
8-
* 保存着缩略图的目录
9+
* 输出目录
910
*/
10-
private val thumbDir = "${System.getProperty("user.home")}/Downloads/SinaThumb";
11+
private val DOWNLOAD_DIR = "${System.getProperty("user.home")}/Downloads/SinaDownload"
1112

1213
/**
13-
* 下载文件的输出目录
14-
*/
15-
private val outDir = "${System.getProperty("user.home")}/Downloads/SinaDownload";
16-
17-
private val terminalReader = BufferedReader(InputStreamReader(System.`in`))
18-
19-
/**
20-
* 下载新浪博客原图的工具,2种下载模式
21-
* 1. 根据文章URL下载,自动解析URL,下载所有博文中的图片原图
22-
* 2. 根据缩略图下载,把想要的缩略图从浏览器拖到[thumbDir]中,执行此程序即可下载原图
14+
* 下载新浪博客原图,根据文章URL自动解析下载博文中的所有图片原图
2315
*/
2416
fun main() {
25-
println("sina blog picture download tools, select option, then press enter")
26-
println("1. download from blog url")
27-
println("2. download from thumb in $thumbDir")
28-
when (terminalReader.readLine()) {
29-
// 根据URL下载
30-
"1" -> {
31-
println("input url, split with ' ', then press enter")
32-
downloadPicsByUrl(terminalReader.readLine())
33-
}
34-
// 根据缩略图下载
35-
"2" -> {
36-
downloadPicsByThumbFile(File(thumbDir))
37-
}
38-
}
39-
}
40-
41-
private fun checkFile() {
42-
val outDirFile = File(outDir)
43-
if (!outDirFile.exists()) outDirFile.mkdirs()
44-
}
45-
46-
/**
47-
* 根据提供的新浪博客文章URL,自动解析博客中的照片,执行下载
48-
*/
49-
private fun downloadPicsByUrl(urls: String) {
17+
LogUtil.info(
18+
"""
19+
Sina blog picture downloader
20+
Input page urls, split with ' ', then press enter
21+
""".trimIndent()
22+
)
5023
checkFile()
51-
Downloader(terminalReader, URLParser(outDir).parse(urls), outDir).start()
24+
download(getImgIdListFromUrl(readln().trim(), DOWNLOAD_DIR), DOWNLOAD_DIR)
5225
}
5326

54-
/**
55-
* 根据已有的新浪博客缩略图,下载原始照片,缩略图的文件名应是照片ID
56-
*/
57-
private fun downloadPicsByThumbFile(thumbDirFile: File) {
58-
checkFile()
59-
Downloader(terminalReader, ThumbParser().parse(thumbDirFile), outDir).start()
60-
}
61-
62-
27+
private fun checkFile() {
28+
val dirFile = File(DOWNLOAD_DIR)
29+
if (!dirFile.exists()) dirFile.mkdirs()
30+
}

src/main/kotlin/me/mudan/sina/Downloader.kt

Lines changed: 0 additions & 117 deletions
This file was deleted.

src/main/kotlin/me/mudan/sina/Tools.kt

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)