Jack 2 months ago
commit 990963cd70
  1. 65
      .gitignore
  2. 48
      api/hd4k-downloader.api
  3. 3
      etc/hd4kdownloader.yaml
  4. 5
      go.mod
  5. 2
      go.sum
  6. 34
      hd4kdownloader.go
  7. 10
      internal/config/config.go
  8. 22
      internal/svc/servicecontext.go
  9. 30
      internal/types/types.go

65
.gitignore vendored

@ -0,0 +1,65 @@
.DS_Store
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
.idea/*
xml_files/
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
other/split_clash_config/split_config
ai_news/save_data
daily/*.txt

@ -0,0 +1,48 @@
syntax = "v1"
info(
title: "HD4K漫画下载服务"
desc: "下载HD4K漫画图片的API服务"
author: "hd4k-downloader"
version: "v1.0.0"
)
type (
// 下载请求
DownloadRequest {
Title string `json:"title"`
Imgs map[string]string `json:"imgs"`
}
// 下载进度详情
ProgressDetail {
Key string `json:"key"`
URL string `json:"url"`
Status string `json:"status"`
Message string `json:"message"`
SavedAs string `json:"saved_as,optional"`
}
// 下载响应
DownloadResponse {
Success bool `json:"success"`
Message string `json:"message"`
Title string `json:"title"`
Folder string `json:"folder"`
JsonPath string `json:"json_path"`
Total int `json:"total"`
Saved int `json:"saved"`
Skipped int `json:"skipped"`
Failed int `json:"failed"`
Details []ProgressDetail `json:"details"`
}
)
@server(
middleware: Cors
timeout: 300000ms # 添加时间单位ms
)
service hd4k_downloader {
@handler SaveImages
post /api/save_imgs (DownloadRequest) returns (DownloadResponse)
}

@ -0,0 +1,3 @@
Name: hd4k_downloader
Host: 0.0.0.0
Port: 8888

@ -0,0 +1,5 @@
module hd4k-downloader
go 1.24.7
require github.com/zeromicro/go-zero v1.9.3 // indirect

@ -0,0 +1,2 @@
github.com/zeromicro/go-zero v1.9.3 h1:dJ568uUoRJY0RUxo4aH4htSglbEUF60WiM1MZVkTK9A=
github.com/zeromicro/go-zero v1.9.3/go.mod h1:JBAtfXQvErk+V7pxzcySR0mW6m2I4KPhNQZGASltDRQ=

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package main
import (
"flag"
"fmt"
"hd4k-downloader/internal/config"
"hd4k-downloader/internal/handler"
"hd4k-downloader/internal/svc"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/rest"
)
var configFile = flag.String("f", "etc/hd4kdownloader.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
server := rest.MustNewServer(c.RestConf)
defer server.Stop()
ctx := svc.NewServiceContext(c)
handler.RegisterHandlers(server, ctx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}

@ -0,0 +1,10 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package config
import "github.com/zeromicro/go-zero/rest"
type Config struct {
rest.RestConf
}

@ -0,0 +1,22 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package svc
import (
"github.com/zeromicro/go-zero/rest"
"hd4k-downloader/internal/config"
"hd4k-downloader/internal/middleware"
)
type ServiceContext struct {
Config config.Config
Cors rest.Middleware
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
Cors: middleware.NewCorsMiddleware().Handle,
}
}

@ -0,0 +1,30 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.9.2
package types
type DownloadRequest struct {
Title string `json:"title"`
Imgs map[string]string `json:"imgs"`
}
type DownloadResponse struct {
Success bool `json:"success"`
Message string `json:"message"`
Title string `json:"title"`
Folder string `json:"folder"`
JsonPath string `json:"json_path"`
Total int `json:"total"`
Saved int `json:"saved"`
Skipped int `json:"skipped"`
Failed int `json:"failed"`
Details []ProgressDetail `json:"details"`
}
type ProgressDetail struct {
Key string `json:"key"`
URL string `json:"url"`
Status string `json:"status"`
Message string `json:"message"`
SavedAs string `json:"saved_as,optional"`
}
Loading…
Cancel
Save