From e9fbe5c5dbca7d4035951ae99924c4d14eeb7ecd Mon Sep 17 00:00:00 2001 From: nite Date: Sun, 24 Aug 2025 16:53:05 +1000 Subject: [PATCH] refactor --- .vscode/launch.json | 22 +- README.md | 4 +- cmd/download.go | 187 +++-- cmd/package.go | 4 +- downloader/bilinovel/MI LANTING.ttf | Bin 0 -> 3583612 bytes downloader/bilinovel/bilinovel.go | 671 +++++++----------- downloader/bilinovel/epub.go | 122 ---- .../bilinovel/{style.css.go => style.css} | 17 - epub/wrapper.go | 363 ++++++++++ go.mod | 11 + go.sum | 29 +- model/downloader.go | 15 + model/{container_opf.go => epub.go} | 0 model/{struct.go => novel.go} | 21 +- template/container.xml_templ.go | 2 +- template/content.opf_templ.go | 2 +- template/content.xhtml.templ | 10 +- template/content.xhtml_templ.go | 16 +- template/cover.xhtml_templ.go | 2 +- test/bilinovel_test.go | 60 ++ text/wrapper.go | 55 ++ utils/request.go | 34 +- 22 files changed, 1005 insertions(+), 642 deletions(-) create mode 100644 downloader/bilinovel/MI LANTING.ttf delete mode 100644 downloader/bilinovel/epub.go rename downloader/bilinovel/{style.css.go => style.css} (69%) create mode 100644 epub/wrapper.go create mode 100644 model/downloader.go rename model/{container_opf.go => epub.go} (100%) rename model/{struct.go => novel.go} (63%) create mode 100644 test/bilinovel_test.go create mode 100644 text/wrapper.go diff --git a/.vscode/launch.json b/.vscode/launch.json index c286fd1..307f621 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,20 +2,20 @@ "version": "0.2.0", "configurations": [ { - "name": "volume", + "name": "download", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}", - "args": ["download", "volume", "-n", "2025", "-v", "72693"] - }, - { - "name": "novel", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}", - "args": ["download", "novel", "-n", "4325"] + "args": [ + "download", + "-n", + "1410", + "-v", + "52748", + "-t", + "text" + ] } ] -} +} \ No newline at end of file diff --git a/README.md b/README.md index 537f7fd..88e6ba0 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ 1. 下载整本 `https://www.bilinovel.com/novel/2388.html` ```bash - bilinovel-downloader download novel -n 2388 + bilinovel-downloader download -n 2388 ``` 2. 下载单卷 `https://www.bilinovel.com/novel/2388/vol_84522.html` ```bash - bilinovel-downloader download volume -n 2388 -v 84522 + bilinovel-downloader download -n 2388 -v 84522 ``` 3. 对自动生成的 epub 格式不满意可以自行修改后使用命令打包 diff --git a/cmd/download.go b/cmd/download.go index 5848887..9b8e9eb 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -2,7 +2,14 @@ package cmd import ( "bilinovel-downloader/downloader/bilinovel" + "bilinovel-downloader/epub" + "bilinovel-downloader/model" + "bilinovel-downloader/text" + "encoding/json" "fmt" + "log" + "os" + "path/filepath" "github.com/spf13/cobra" ) @@ -11,74 +18,160 @@ var downloadCmd = &cobra.Command{ Use: "download", Short: "Download a novel or volume", Long: "Download a novel or volume", + Run: func(cmd *cobra.Command, args []string) { + err := runDownloadNovel() + if err != nil { + log.Printf("failed to download novel: %v", err) + } + }, } -var downloadNovelCmd = &cobra.Command{ - Use: "novel", - Short: "Download a novel, default download all volumes", - Long: "Download a novel, default download all volumes", - RunE: runDownloadNovel, -} - -var downloadVolumeCmd = &cobra.Command{ - Use: "volume", - Short: "Download a volume", - Long: "Download a volume", - RunE: runDownloadVolume, -} - -type downloadNovelArgs struct { - NovelId int `validate:"required"` - outputPath string -} - -type downloadVolumeArgs struct { +type downloadCmdArgs struct { NovelId int `validate:"required"` VolumeId int `validate:"required"` outputPath string + outputType string } var ( - novelArgs downloadNovelArgs - volumeArgs downloadVolumeArgs + downloadArgs downloadCmdArgs ) func init() { - downloadNovelCmd.Flags().IntVarP(&novelArgs.NovelId, "novel-id", "n", 0, "novel id") - downloadNovelCmd.Flags().StringVarP(&novelArgs.outputPath, "output-path", "o", "./novels", "output path") - - downloadVolumeCmd.Flags().IntVarP(&volumeArgs.NovelId, "novel-id", "n", 0, "novel id") - downloadVolumeCmd.Flags().IntVarP(&volumeArgs.VolumeId, "volume-id", "v", 0, "volume id") - downloadVolumeCmd.Flags().StringVarP(&volumeArgs.outputPath, "output-path", "o", "./novels", "output path") - - downloadCmd.AddCommand(downloadNovelCmd) - downloadCmd.AddCommand(downloadVolumeCmd) + downloadCmd.Flags().IntVarP(&downloadArgs.NovelId, "novel-id", "n", 0, "novel id") + downloadCmd.Flags().IntVarP(&downloadArgs.VolumeId, "volume-id", "v", 0, "volume id") + downloadCmd.Flags().StringVarP(&downloadArgs.outputPath, "output-path", "o", "novels", "output path") + downloadCmd.Flags().StringVarP(&downloadArgs.outputType, "output-type", "t", "epub", "output type, epub or text") RootCmd.AddCommand(downloadCmd) } -func runDownloadNovel(cmd *cobra.Command, args []string) error { - if novelArgs.NovelId == 0 { +func runDownloadNovel() error { + downloader, err := bilinovel.New() + if err != nil { + return fmt.Errorf("failed to create downloader: %v", err) + } + if downloadArgs.NovelId == 0 { return fmt.Errorf("novel id is required") } - err := bilinovel.DownloadNovel(novelArgs.NovelId, novelArgs.outputPath) - if err != nil { - return fmt.Errorf("failed to download novel: %v", err) + if downloadArgs.VolumeId == 0 { + novel, err := downloadNovel(downloader) + if err != nil { + return fmt.Errorf("failed to get novel: %v", err) + } + switch downloadArgs.outputType { + case "epub": + for _, volume := range novel.Volumes { + err = epub.PackVolumeToEpub(volume, downloadArgs.outputPath, downloader.GetStyleCSS(), downloader.GetExtraFiles()) + if err != nil { + return fmt.Errorf("failed to pack volume: %v", err) + } + } + case "text": + for _, volume := range novel.Volumes { + err = text.PackVolumeToText(volume, downloadArgs.outputPath) + if err != nil { + return fmt.Errorf("failed to pack volume: %v", err) + } + } + } + } else { + // 下载单卷 + volume, err := downloadVolume(downloader) + if err != nil { + return fmt.Errorf("failed to get volume: %v", err) + } + switch downloadArgs.outputType { + case "epub": + err = epub.PackVolumeToEpub(volume, downloadArgs.outputPath, downloader.GetStyleCSS(), downloader.GetExtraFiles()) + if err != nil { + return fmt.Errorf("failed to pack volume: %v", err) + } + case "text": + err = text.PackVolumeToText(volume, downloadArgs.outputPath) + if err != nil { + return fmt.Errorf("failed to pack volume: %v", err) + } + } } return nil } -func runDownloadVolume(cmd *cobra.Command, args []string) error { - if volumeArgs.NovelId == 0 { - return fmt.Errorf("novel id is required") - } - if volumeArgs.VolumeId == 0 { - return fmt.Errorf("volume id is required") - } - err := bilinovel.DownloadVolume(volumeArgs.NovelId, volumeArgs.VolumeId, volumeArgs.outputPath) +func downloadNovel(downloader model.Downloader) (*model.Novel, error) { + jsonPath := filepath.Join(downloadArgs.outputPath, fmt.Sprintf("novel-%d.json", downloadArgs.NovelId)) + err := os.MkdirAll(filepath.Dir(jsonPath), 0755) if err != nil { - return fmt.Errorf("failed to download volume: %v", err) + return nil, fmt.Errorf("failed to create directory: %v", err) } - - return nil + _, err = os.Stat(jsonPath) + novel := &model.Novel{} + if err != nil { + if os.IsNotExist(err) { + novel, err = downloader.GetNovel(downloadArgs.NovelId) + if err != nil { + return nil, fmt.Errorf("failed to get novel: %v", err) + } + jsonFile, err := os.Create(jsonPath) + if err != nil { + return nil, fmt.Errorf("failed to create json file: %v", err) + } + defer jsonFile.Close() + err = json.NewEncoder(jsonFile).Encode(novel) + if err != nil { + return nil, fmt.Errorf("failed to encode json file: %v", err) + } + } else { + return nil, fmt.Errorf("failed to get novel: %v", err) + } + } else { + jsonFile, err := os.Open(jsonPath) + if err != nil { + return nil, fmt.Errorf("failed to open json file: %v", err) + } + defer jsonFile.Close() + err = json.NewDecoder(jsonFile).Decode(novel) + if err != nil { + return nil, fmt.Errorf("failed to decode json file: %v", err) + } + } + return novel, nil +} + +func downloadVolume(downloader model.Downloader) (*model.Volume, error) { + jsonPath := filepath.Join(downloadArgs.outputPath, fmt.Sprintf("volume-%d-%d.json", downloadArgs.NovelId, downloadArgs.VolumeId)) + err := os.MkdirAll(filepath.Dir(jsonPath), 0755) + if err != nil { + return nil, fmt.Errorf("failed to create directory: %v", err) + } + _, err = os.Stat(jsonPath) + volume := &model.Volume{} + if err != nil { + if os.IsNotExist(err) { + volume, err = downloader.GetVolume(downloadArgs.NovelId, downloadArgs.VolumeId) + if err != nil { + return nil, fmt.Errorf("failed to get volume: %v", err) + } + jsonFile, err := os.Create(jsonPath) + if err != nil { + return nil, fmt.Errorf("failed to create json file: %v", err) + } + err = json.NewEncoder(jsonFile).Encode(volume) + if err != nil { + return nil, fmt.Errorf("failed to encode json file: %v", err) + } + } else { + return nil, fmt.Errorf("failed to get volume: %v", err) + } + } else { + jsonFile, err := os.Open(jsonPath) + if err != nil { + return nil, fmt.Errorf("failed to open json file: %v", err) + } + defer jsonFile.Close() + err = json.NewDecoder(jsonFile).Decode(volume) + if err != nil { + return nil, fmt.Errorf("failed to decode json file: %v", err) + } + } + return volume, nil } diff --git a/cmd/package.go b/cmd/package.go index c28d945..697b92b 100644 --- a/cmd/package.go +++ b/cmd/package.go @@ -1,7 +1,7 @@ package cmd import ( - "bilinovel-downloader/downloader/bilinovel" + "bilinovel-downloader/epub" "fmt" "github.com/spf13/cobra" @@ -28,7 +28,7 @@ func init() { } func runPackage(cmd *cobra.Command, args []string) error { - err := bilinovel.CreateEpub(pArgs.DirPath) + err := epub.PackEpub(pArgs.DirPath) if err != nil { return fmt.Errorf("failed to create epub: %v", err) } diff --git a/downloader/bilinovel/MI LANTING.ttf b/downloader/bilinovel/MI LANTING.ttf new file mode 100644 index 0000000000000000000000000000000000000000..32fb2c85bb0f878bd2bfbb8b9dfa2cf3edc54203 GIT binary patch literal 3583612 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