refactor(jm): 重构 JMComic 下载功能
All checks were successful
Sakura-Miki-build / Automatic-Packaging (push) Successful in 2m16s
All checks were successful
Sakura-Miki-build / Automatic-Packaging (push) Successful in 2m16s
- 优化了 OkHttpClient 实例的创建和配置 - 改进了错误处理和日志记录 - 调整了下载流程,增加了重定向处理 - 优化了变量声明和类型定义
This commit is contained in:
parent
308c688f8c
commit
d3931b215c
@ -2,7 +2,7 @@ package info.alinadace.sakuramiki.service.jm.util
|
||||
|
||||
import cn.hutool.core.lang.UUID
|
||||
import com.mavis.service.AlistService
|
||||
import info.alinadace.sakuramiki.util.okHttpClient
|
||||
import info.alinadace.sakuramiki.util.log
|
||||
import info.alinadace.sakuramiki.util.parse
|
||||
import jakarta.annotation.Resource
|
||||
import okhttp3.OkHttpClient
|
||||
@ -19,30 +19,40 @@ import org.springframework.stereotype.Service
|
||||
@Service
|
||||
class DownloadUtil {
|
||||
companion object {
|
||||
private const val DIR = "/AliDrive/JMComic"
|
||||
private const val OWNER = "Grand-cocoa"
|
||||
private const val REPO = "JMComic-Crawler-Python"
|
||||
private const val WORKFLOW_ID = "151600689"
|
||||
private const val BASE = "https://api.github.com"
|
||||
private const val CREATE = "${BASE}/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/dispatches"
|
||||
private const val LIST = "${BASE}/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/runs"
|
||||
private const val GET = "${BASE}/repos/${OWNER}/${REPO}/actions/runs/%d"
|
||||
private const val ARTIFACTS = "${BASE}/repos/${OWNER}/${REPO}/actions/runs/%d/artifacts"
|
||||
private const val DOWNLOAD = "${BASE}/repos/${OWNER}/${REPO}/actions/artifacts/%d/zip"
|
||||
private const val APIKEY = "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"
|
||||
const val DIR = "/AliDrive/JMComic"
|
||||
const val OWNER = "Grand-cocoa"
|
||||
const val REPO = "JMComic-Crawler-Python"
|
||||
const val WORKFLOW_ID = "151600689"
|
||||
const val BASE = "https://api.github.com"
|
||||
const val CREATE = "${BASE}/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/dispatches"
|
||||
const val LIST = "${BASE}/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/runs"
|
||||
const val GET = "${BASE}/repos/${OWNER}/${REPO}/actions/runs/%d"
|
||||
const val ARTIFACTS = "${BASE}/repos/${OWNER}/${REPO}/actions/runs/%d/artifacts"
|
||||
const val DOWNLOAD = "${BASE}/repos/${OWNER}/${REPO}/actions/artifacts/%d/zip"
|
||||
const val APIKEY = "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"
|
||||
|
||||
private const val CREATE_BODY = """{"inputs": {"JM_ALBUM_IDS": "%s","JM_PHOTO_IDS": ""},"ref": "master"}"""
|
||||
const val CREATE_BODY = """{"inputs": {"JM_ALBUM_IDS": "%s","JM_PHOTO_IDS": ""},"ref": "master"}"""
|
||||
|
||||
private fun OkHttpClient.newCall(url: String, method: String, body: RequestBody? = null): Response {
|
||||
val okHttpClient = OkHttpClient.Builder()
|
||||
.followRedirects(false)
|
||||
.addInterceptor {
|
||||
val build = it.request().newBuilder()
|
||||
.addHeader("Authorization", "Bearer $APIKEY")
|
||||
.build()
|
||||
it.proceed(build)
|
||||
}
|
||||
.build()
|
||||
|
||||
fun OkHttpClient.newCall(url: String, method: String, body: RequestBody? = null): Response {
|
||||
return this.newCall(Request.Builder()
|
||||
.url(url)
|
||||
.method(method, body)
|
||||
// .addHeader("Content-Type", "application/json")
|
||||
.addHeader("Authorization", "Bearer $APIKEY")
|
||||
.addHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("Host", "api.github.com")
|
||||
.addHeader("Connection", "keep-alive")
|
||||
//// .addHeader("Content-Type", "application/json")
|
||||
//// .addHeader("Authorization", "Bearer $APIKEY")
|
||||
// .addHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
|
||||
// .addHeader("Accept", "*/*")
|
||||
// .addHeader("Host", "api.github.com")
|
||||
// .addHeader("Connection", "keep-alive")
|
||||
.build()).execute()
|
||||
}
|
||||
}
|
||||
@ -54,12 +64,14 @@ class DownloadUtil {
|
||||
val createBody = CREATE_BODY.format(id).toRequestBody()
|
||||
// Request.Builder().post(createBody).addHeader()
|
||||
val create = okHttpClient.newCall(CREATE, "POST", createBody)
|
||||
if (create.code != 200) return
|
||||
if (create.code != 200 && create.code != 204) return
|
||||
log.info("JMDownload - 下载开始")
|
||||
Thread.sleep(3000)
|
||||
val list = okHttpClient.newCall(LIST, "GET")
|
||||
if (list.code != 200) return
|
||||
log.info("JMDownload - 任务确认")
|
||||
val listBody = parse(list.body?.string()!!)
|
||||
val jobId = listBody.getByPath<Int>("workflow_runs[0].id")
|
||||
val jobId = listBody.getByPath<Long>("workflow_runs[0].id")
|
||||
var status = false
|
||||
for (i in 0..10){
|
||||
Thread.sleep(10000)
|
||||
@ -68,18 +80,29 @@ class DownloadUtil {
|
||||
val getBody = parse(get.body?.string()!!)
|
||||
if (getBody.getByPath<String>("conclusion") == "success"){
|
||||
status = true
|
||||
log.info("JMDownload - 远程下载完成")
|
||||
break
|
||||
}
|
||||
log.info("JMDownload - 进度查询")
|
||||
}
|
||||
if (!status) return
|
||||
val artifacts = okHttpClient.newCall(ARTIFACTS.format(jobId), "GET")
|
||||
if (artifacts.code != 200) return
|
||||
log.info("JMDownload - 工件查询完毕")
|
||||
val artifactsBody = parse(artifacts.body?.string()!!)
|
||||
val artifactId = artifactsBody.getByPath<Int>("artifacts[0].id")
|
||||
val artifactId = artifactsBody.getByPath<Long>("artifacts[0].id")
|
||||
val download = okHttpClient.newCall(DOWNLOAD.format(artifactId), "GET")
|
||||
if (download.code != 200) return
|
||||
val blob = download.body?.bytes()
|
||||
val fastUUID = UUID.fastUUID().toString(true)
|
||||
alistService.uploadFile(blob, DIR, fastUUID)
|
||||
if (download.code != 302) return
|
||||
if (download.headers["Location"] == null) return
|
||||
val downloadUrl = download.headers["Location"]!!
|
||||
if (downloadUrl.isEmpty()) return
|
||||
val downloadFile = okHttpClient.newCall(downloadUrl, "GET")
|
||||
if (downloadFile.code != 200) return
|
||||
log.info("JMDownload - 内容提取完毕")
|
||||
val blob = downloadFile.body?.bytes()
|
||||
val fastUUID = UUID.fastUUID().toString(true) + ".zip"
|
||||
log.info("JMDownload - 开始上传 - {}:{}", DIR, fastUUID)
|
||||
val uploadFile = alistService.uploadFile(blob, DIR, fastUUID)
|
||||
log.info("JMDownload - 上传完毕 - {}", uploadFile)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user