加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
danmakuDownloader.go 1.45 KB
一键复制 编辑 原始数据 按行查看 历史
package main
import (
"bytes"
"compress/zlib"
"io"
"net/http"
"os"
"strings"
)
//func main() {
// args := os.Args
// if len(args) == 3 && args[1] != "" && args[2] != "" {
// downloadFromUrl(args[1], args[2])
// fmt.Println("done")
// } else {
// fmt.Println("参数格式错误!应传入两个参数,第一个参数是弹幕文件的url,第二个参数是弹幕文件保存的路径")
// }
//}
// 从链接地址下载字幕文件,并保存到指定目录
func downloadFromUrl(url string, path string) {
// 从b站下载字幕
res, err := http.Get(url)
if err != nil {
return
}
defer res.Body.Close()
// 创建文件夹
filePath := ""
lIndex := strings.LastIndex(path, "\\")
if lIndex != -1 {
filePath = path[0:lIndex]
} else {
return
}
exists := pathExists(filePath)
if !exists {
err := os.MkdirAll(filePath, 0666)
if err != nil {
return
}
}
// 创建输出文件
create, _ := os.Create(path)
defer create.Close()
if create != nil {
// 对字幕进行zlib解压
buf := &bytes.Buffer{}
header := []byte{0x78, 0x9c}
_, _ = buf.Write(header)
_, _ = buf.ReadFrom(res.Body)
reader, err := zlib.NewReader(buf)
if err != nil {
return
} else {
out := &bytes.Buffer{}
io.Copy(out, reader)
_, _ = create.Write(out.Bytes())
}
}
}
// 判断文件是否存在
func pathExists(path string) bool {
_, err := os.Stat(path)
if err == nil {
return true
}
if os.IsNotExist(err) {
return false
}
return false
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化