保存したページをローカル化(未完了)

このコミットが含まれているのは:
守矢諏訪子 2023-05-11 16:22:52 +09:00
コミット 9cac3331e7
2個のファイルの変更63行の追加2行の削除

ファイルの表示

@ -49,7 +49,7 @@ func main () {
path := mkdirs(args[1], cnf.datapath)
getpage(args[1], path)
// TODO: ページの確認
//scanpage(path)
scanpage(path, args[1], cnf.datapath)
fmt.Println(cnf.domain + strings.Replace(path, cnf.datapath, "", 1))
}
return

63
prep.go
ファイルの表示

@ -8,6 +8,7 @@ import (
"path/filepath"
"net/http"
"io"
"regexp"
)
func checkexist (url string, prefix string) []string {
@ -73,4 +74,64 @@ func getpage (url string, path string) {
}
}
//func scanpage (path string) {}
func scanpage (path string, domain string, thisdomain string) {
fn, err := os.ReadFile(path + "/index.html")
if err != nil {
fmt.Println("ファイルを開けられなかった:", err)
return
}
/* 削除 */
var script = regexp.MustCompile(`(<script.*</script>)`).ReplaceAllString(string(fn), "")
var noscript = regexp.MustCompile(`(<noscript.*</noscript>)`).ReplaceAllString(string(script), "")
var audio = regexp.MustCompile(`(<script.*</script>)`).ReplaceAllString(string(noscript), "")
var video = regexp.MustCompile(`(<script.*</script>)`).ReplaceAllString(string(audio), "")
var iframe = regexp.MustCompile(`(<script.*</script>)`).ReplaceAllString(string(video), "")
/* 追加ダウンロード+ローカル化 */
var ass = regexp.MustCompile(`(<img.*src="|<link.*href=")(.*\.)(png|webm|jpg|jpeg|gif|css)`)
for _, cssx := range ass.FindAllString(iframe, -1) {
s := regexp.MustCompile(`(.*src="|.*href=")`).Split(cssx, -1)
ss := regexp.MustCompile(`(".*)`).Split(s[1], -1)
if strings.HasPrefix(ss[0], "http://") || strings.HasPrefix(ss[0], "https://") {
// TODO
} else {
fss := strings.Split(ss[0], "/")
filename := fss[len(fss)-1]
if filename == "" {
continue
}
f, err := os.Create(path + "/" + filename)
if err != nil {
fmt.Println("2. 作成失敗:", err)
return
}
defer f.Close()
af := domain + ss[0]
if !strings.HasPrefix(ss[0], "/") {
af = domain + "/" + ss[0]
}
i, err := http.Get(af)
if err != nil {
fmt.Println("2. ダウンロードに失敗:", err)
return
}
defer i.Body.Close()
_, err = io.Copy(f, i.Body)
if err != nil {
fmt.Println("2. コピーに失敗:", err)
return
}
iframe = strings.Replace(iframe, ss[0], "/" + filename, -1)
}
err := os.WriteFile(path + "/index.html", []byte(iframe), 0644)
if err != nil {
fmt.Println("書込に失敗")
return
}
}
}