mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-20 06:20:08 +08:00
93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package pixiv
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/tls"
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/Yiwen-Chan/ZeroBot-Plugin/api/utils"
|
|
)
|
|
|
|
// urlCache 缓存并返回缓存路径
|
|
func (this *Illust) PixivPicDown(path string) (savePath string, err error) {
|
|
url := this.ImageUrls
|
|
pid := this.Pid
|
|
url = strings.ReplaceAll(url, "img-original", "img-master")
|
|
url = strings.ReplaceAll(url, "_p0", "_p0_master1200")
|
|
url = strings.ReplaceAll(url, ".png", ".jpg")
|
|
// 文件名为url的hash值
|
|
savePath = path + utils.Int2Str(pid) + ".jpg"
|
|
// 文件存在或文件大小大于10kb
|
|
if utils.PathExists(savePath) && utils.FileSize(savePath) > 10240 {
|
|
return savePath, nil
|
|
}
|
|
|
|
// 模拟QQ客户端请求
|
|
client := &http.Client{
|
|
Transport: &http.Transport{
|
|
DisableKeepAlives: true,
|
|
// 绕过sni审查
|
|
TLSClientConfig: &tls.Config{
|
|
ServerName: "-",
|
|
InsecureSkipVerify: true,
|
|
},
|
|
// 更改dns
|
|
Dial: func(network, addr string) (net.Conn, error) {
|
|
return net.Dial("tcp", "210.140.92.142:443")
|
|
},
|
|
},
|
|
}
|
|
reqest, _ := http.NewRequest("GET", url, nil)
|
|
reqest.Header.Set("Referer", "https://www.pixiv.net/")
|
|
reqest.Header.Set("Host", "i.pximg.net")
|
|
reqest.Header.Set("User-Agent", "QQ/8.2.0.1296 CFNetwork/1126")
|
|
|
|
resp, err := client.Do(reqest)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if resp.StatusCode != 200 {
|
|
return "", errors.New(fmt.Sprintf("Download failed, code %d", resp.StatusCode))
|
|
}
|
|
defer resp.Body.Close()
|
|
// 写入文件
|
|
data, _ := ioutil.ReadAll(resp.Body)
|
|
f, _ := os.OpenFile(savePath, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
|
defer f.Close()
|
|
f.Write(data)
|
|
|
|
return savePath, err
|
|
}
|
|
|
|
// PicHash 返回图片的 md5 值
|
|
func PicHash(path string) string {
|
|
data, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return strings.ToUpper(fmt.Sprintf("%x", md5.Sum(data)))
|
|
}
|
|
|
|
// urlCache 缓存并返回缓存路径
|
|
func (this *Illust) RmPic(path string) (err error) {
|
|
url := this.ImageUrls
|
|
pid := this.Pid
|
|
url = strings.ReplaceAll(url, "img-original", "img-master")
|
|
url = strings.ReplaceAll(url, "_p0", "_p0_master1200")
|
|
url = strings.ReplaceAll(url, ".png", ".jpg")
|
|
// 文件名为url的hash值
|
|
savePath := path + utils.Int2Str(pid) + ".jpg"
|
|
// 文件存在或文件大小大于10kb
|
|
if utils.PathExists(savePath) {
|
|
return os.Remove(savePath)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|