hozonsite/src/getpage.go

98 行
2.3 KiB
Go
Raw パーマリンク Blame 履歴

このファイルには曖昧(ambiguous)なUnicode文字が含まれています

このファイルには、他の文字と見間違える可能性があるUnicode文字が含まれています。 それが意図的なものと考えられる場合は、この警告を無視して構いません。 それらの文字を表示するにはエスケープボタンを使用します。

package src
import (
"os"
"fmt"
"net/http"
"io"
"regexp"
"strings"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
)
// URLでパラメートル(?、=等)がある場合
func Stripurl (url string) string {
res := strings.ReplaceAll(url, "?", "")
res = strings.ReplaceAll(res, "=", "")
return res
}
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
}
// Content-TypeヘッダーはUTF-8又は駄目のエンコーディングかの確認
checkJis := `(?i)<meta.*?charset=(["']?)shift[_-]?jis`
jisRegex, errr := regexp.Compile(checkJis)
if errr != nil {
fmt.Println(errr)
return
}
checkEuc := `(?i)<meta.*?charset=(["']?)euc[_-]?jp`
eucRegex, erre := regexp.Compile(checkEuc)
if erre != nil {
fmt.Println(erre)
return
}
// 文字エンコーディングを変換する
if jisRegex.Match(body) {
shiftJISDecoder := japanese.ShiftJIS.NewDecoder()
utf8Reader := transform.NewReader(
strings.NewReader(string(body)),
shiftJISDecoder,
)
utf8Body, err3 := io.ReadAll(utf8Reader)
if err3 != nil {
fmt.Println("文字エンコーディング変換エラー:", err3)
return
}
body = utf8Body
} else if eucRegex.Match(body) {
eucJPDecoder := japanese.EUCJP.NewDecoder()
utf8Reader := transform.NewReader(
strings.NewReader(string(body)),
eucJPDecoder,
)
utf8Body, err3 := io.ReadAll(utf8Reader)
if err3 != nil {
fmt.Println("文字エンコーディング変換エラー:", err3)
return
}
body = utf8Body
}
// 空index.htmlファイルを創作する
fn, err4 := os.Create(path + "/index.html")
if err4 != nil {
fmt.Println("ファイルの創作エラー:", err4)
return
}
// ソフトの終了する時に実行する
defer fn.Close()
// あのindex.htmlファイルに内容をそのまま書き込む
_, err5 := fn.WriteString(string(body))
if err5 != nil {
fmt.Println("ファイル書込エラー:", err5)
}
}