package main import ( "fmt" "os" "path" "strconv" "github.com/yinhui87/go-component/language" ) type episode struct { Index int64 `json:"index"` Cid int64 `json:"cid"` Title string `json:"title"` } func main() { episodeProvider := new(mockProvider) epdatas, err := getEPData(episodeProvider, "av1742161", 143, 147) // epdatas, err := getEPData(episodeProvider, "ep173262") if err != nil { panic(err) } for i, epdata := range epdatas { fmt.Printf("%dep %d Cid: %v, Title: %s\n", i, epdata.Index, epdata.Cid, epdata.Title) } // 获取到所有集信息,开始准备文件 filenames, err := getFileList() if err != nil { panic(err) } if len(filenames) != len(epdatas) { panic(fmt.Errorf("file count[%d] diff with epdata count[%d]", len(filenames), len(epdatas))) } for i := 0; i < len(filenames); i++ { epdata := epdatas[i] fmt.Printf("file %s cid[%d] title is %s\n", filenames[i], epdata.Cid, epdata.Title) newName := fmt.Sprintf("%s%s", epdata.Title, path.Ext(filenames[i])) fmt.Println("rename ", filenames[i], " to ", newName) os.Rename(filenames[i], newName) } } func getEPData(provider EpisodeDataProvider, videoNo string, skipIndex ...int64) (episodes []episode, err error) { videoType := videoNo[0:2] videoID, err := strconv.ParseInt(videoNo[2:], 10, 64) if err != nil { return } fmt.Println(videoType, videoID) switch videoType { case "av": avdatas, err := provider.GetAVData(videoID) if err != nil { return episodes, err } for i, avdata := range avdatas { index := int64(i) + 1 if language.ArrayIn(skipIndex, index) == -1 { episodes = append(episodes, episode{ Index: index, Cid: avdata.Cid, Title: avdata.Part, }) } } case "ep": epdatas, err := provider.GetEPData(videoID) if err != nil { return episodes, err } for i, epdata := range epdatas { index := int64(i) + 1 if language.ArrayIn(skipIndex, index) == -1 { episodes = append(episodes, episode{ Index: index, Cid: epdata.Cid, Title: epdata.LongTitle, }) } } } return } func getFileList() (filenames []string, err error) { pwd, err := os.Open(".") if err != nil { return } files, err := pwd.Readdir(0) if err != nil { return } fileTimeMap := make(map[int]string) var fileTimes []int for _, fileInfo := range files { if !fileInfo.IsDir() { fileTimeMap[int(fileInfo.ModTime().Unix())] = fileInfo.Name() fileTimes = append(fileTimes, int(fileInfo.ModTime().Unix())) } } fileTimes = language.ArraySort(fileTimes).([]int) for _, t := range fileTimes { filenames = append(filenames, fileTimeMap[t]) } return }