読みやすくに
このコミットが含まれているのは:
コミット
8d64bdd11c
35
getpage.go
ノーマルファイル
35
getpage.go
ノーマルファイル
@ -0,0 +1,35 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"io"
|
||||
)
|
||||
|
||||
func getpage (url string, path string) {
|
||||
curl, err := http.Get(url)
|
||||
if err != nil {
|
||||
fmt.Println("CURLエラー:", err)
|
||||
return
|
||||
}
|
||||
|
||||
defer curl.Body.Close()
|
||||
body, err2 := io.ReadAll(curl.Body)
|
||||
if err2 != nil {
|
||||
fmt.Println("読込エラ:", err2)
|
||||
return
|
||||
}
|
||||
|
||||
fn, err3 := os.Create(path + "/index.html")
|
||||
if err3 != nil {
|
||||
fmt.Println("ファイルの創作エラー:", err3)
|
||||
return
|
||||
}
|
||||
|
||||
defer fn.Close()
|
||||
_, err4 := fn.WriteString(string(body))
|
||||
if err4 != nil {
|
||||
fmt.Println("ファイル書込エラー:", err4)
|
||||
}
|
||||
}
|
4
main.go
4
main.go
@ -9,10 +9,6 @@ import (
|
||||
|
||||
var version = "1.0.0"
|
||||
|
||||
func checkprefix (url string) bool {
|
||||
return strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://")
|
||||
}
|
||||
|
||||
func help () {
|
||||
fmt.Println("使い方:");
|
||||
fmt.Println("hozonsite -v :バージョンを表示");
|
||||
|
7
pager.go
7
pager.go
@ -1,7 +0,0 @@
|
||||
package main
|
||||
|
||||
//func scanurl (url string, resnum int) {}
|
||||
|
||||
//func scanpage (url string, path string) {}
|
||||
|
||||
//func getpage (url string, path string) int {}
|
96
prep.go
96
prep.go
@ -6,11 +6,12 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"path/filepath"
|
||||
"net/http"
|
||||
"io"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
func checkprefix (url string) bool {
|
||||
return strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://")
|
||||
}
|
||||
|
||||
func checkexist (url string, prefix string) []string {
|
||||
res, err := filepath.Glob(prefix + "/archive/*" + url2path(url))
|
||||
if err != nil {
|
||||
@ -46,92 +47,3 @@ func mkdirs (url string, prefix string) string {
|
||||
|
||||
return path
|
||||
}
|
||||
|
||||
func getpage (url string, path string) {
|
||||
curl, err := http.Get(url)
|
||||
if err != nil {
|
||||
fmt.Println("CURLエラー:", err)
|
||||
return
|
||||
}
|
||||
|
||||
defer curl.Body.Close()
|
||||
body, err2 := io.ReadAll(curl.Body)
|
||||
if err2 != nil {
|
||||
fmt.Println("読込エラ:", err2)
|
||||
return
|
||||
}
|
||||
|
||||
fn, err3 := os.Create(path + "/index.html")
|
||||
if err3 != nil {
|
||||
fmt.Println("ファイルの創作エラー:", err3)
|
||||
return
|
||||
}
|
||||
|
||||
defer fn.Close()
|
||||
_, err4 := fn.WriteString(string(body))
|
||||
if err4 != nil {
|
||||
fmt.Println("ファイル書込エラー:", err4)
|
||||
}
|
||||
}
|
||||
|
||||
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(`(<audio.*</audio>)`).ReplaceAllString(string(noscript), "")
|
||||
var video = regexp.MustCompile(`(<video.*</video>)`).ReplaceAllString(string(audio), "")
|
||||
var iframe = regexp.MustCompile(`(<iframe.*</iframe>)`).ReplaceAllString(string(video), "")
|
||||
/* 追加ダウンロード+ローカル化 */
|
||||
var ass = regexp.MustCompile(`(<img.*src="|<meta.*content="|<link.*href=")(.*\.)(png|webm|jpg|jpeg|gif|css)`)
|
||||
|
||||
for _, cssx := range ass.FindAllString(iframe, -1) {
|
||||
s := regexp.MustCompile(`(.*src="|.*content="|.*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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
72
scanpage.go
ノーマルファイル
72
scanpage.go
ノーマルファイル
@ -0,0 +1,72 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"strings"
|
||||
"net/http"
|
||||
"io"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
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(`(<audio.*</audio>)`).ReplaceAllString(string(noscript), "")
|
||||
var video = regexp.MustCompile(`(<video.*</video>)`).ReplaceAllString(string(audio), "")
|
||||
var iframe = regexp.MustCompile(`(<iframe.*</iframe>)`).ReplaceAllString(string(video), "")
|
||||
/* 追加ダウンロード+ローカル化 */
|
||||
var ass = regexp.MustCompile(`(<img.*src="|<meta.*content="|<link.*href=")(.*\.)(png|webm|jpg|jpeg|gif|css)`)
|
||||
|
||||
for _, cssx := range ass.FindAllString(iframe, -1) {
|
||||
s := regexp.MustCompile(`(.*src="|.*content="|.*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
|
||||
}
|
||||
}
|
||||
}
|
15
srv.go
15
srv.go
@ -20,23 +20,8 @@ type Page struct {
|
||||
|
||||
func serv (cnf Config, port int) {
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
|
||||
|
||||
ftmpl := []string{cnf.webpath + "/view/index.html", cnf.webpath + "/view/header.html", cnf.webpath + "/view/footer.html"}
|
||||
|
||||
/*http.HandleFunc("/exist", func(w http.ResponseWriter, r *http.Request) {
|
||||
data := &Page{Tit: "トップ", Ver: version}
|
||||
cookie, err := r.Cookie("lang")
|
||||
if err != nil {
|
||||
data.Lan = "ja"
|
||||
} else {
|
||||
data.Lan = cookie.Value
|
||||
}
|
||||
|
||||
if data.Lan == "en" {
|
||||
data.Tit = "Top"
|
||||
}
|
||||
})*/
|
||||
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
data := &Page{Tit: "トップ", Ver: version}
|
||||
cookie, err := r.Cookie("lang")
|
||||
|
読み込み中…
新しいイシューから参照
ユーザーをブロックする