2023.3.11更新,新鲜出炉了一个小工具,电脑端访问最佳,可能不稳定,速度有点慢,http://101.43.93.226/tools/bilibili
最近想学一点英语,在b站上找到了TED合集,想把里面的字幕给整下来,所以就简单写了一个脚本,有兴趣的同学可以自取。
-
拿到字幕
在网页按F12,刷新页面,在network里过滤.json, 出来的两个就是字幕了。
-
解析字幕
代码如下,直接创建一个main.go文件就好
package main
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
Parse()
}
func Parse() {
dir, _ := os.Getwd()
chinese := do(filepath.Join(dir, "/script/chinese.json"))
en := do(filepath.Join(dir, "/script/en.json"))
resultFile := filepath.Join(dir, "/script/result")
file, err := os.Create(resultFile)
if err != nil {
fmt.Println(err)
}
for i, item := range en {
file.WriteString(item[0])
file.WriteString(item[1])
file.WriteString(chinese[i+1][1]) // 中文脚本多了一行翻译人员,如果没有则把i+1改成i
file.WriteString("\n")
}
file.Close()
}
func do(path string) (lines [][]string) {
contentBytes, err := os.ReadFile(path)
if err != nil {
fmt.Println(err)
}
var contentJson map[string]interface{}
err = json.Unmarshal(contentBytes, &contentJson)
body := contentJson["body"]
scriptJson, _ := body.([]interface{})
for _, item := range scriptJson {
itemMap, _ := item.(map[string]interface{})
from, _ := itemMap["from"].(float64)
to, _ := itemMap["to"].(float64)
text, _ := itemMap["content"].(string)
text = strings.ReplaceAll(text, "\n", " ")
lines = append(lines, []string{fmt.Sprintf("from %v to %v \n", from, to), fmt.Sprintf("%v \n", text)})
}
return lines
}
注意设置好路径,执行go run main.go就行咯。
- 看效果