最近又在写Hexo编辑器 🥱

目前已经完成了Hexo博客编辑,发布说说,Pixiv插画收集(暂时完成了部分页面,后端对插画的Crud暂时还没有写好

关于插画上传

这里原本想过批量选择的形式,不过后来pass了

因为我想在上传的同时也保存作者信息以及插画的原路径,批量选择因此也不太合适,所以上传的形式会有点麻烦 🥲

另一种方案是通过插画的url爬取插画和作者信息

中间在取图的时候也是出现了常见的403错误 ,常用的解决方式是在head标签内添加 <meta name="referrer" content="no-referrer"> 但是并没有效果 😓

然后也试了试在proxyTable中配置跨域并设置headers,不过依然不行

目前的解决方式是后端(go)通过模拟请求的方式拿到图片,然后再将图片返回给前端

(下下策,因为这样做需要经过两次传输,服务器会先请求pixiv服务器拿到图片,然后再将图片进行返回,所以自然也就没有直接请求pixiv服务器那么快了

func GetImageByte(url string) []byte {
	client := &http.Client{}
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("Referer", "https://www.pixiv.net/")
	resp, _ := client.Do(req)
	body, _ := ioutil.ReadAll(resp.Body)
	return body
}

Another

这里可能没有更好的处理办法了🙄 (除非给服务器加带宽

顺便也提一嘴图片是怎么拿到的

数据藏在一个id为meta-preload-data的标签当中,attr("content")即可拿到,这些需要在后端完成

java解析html要用到jsoup,模拟请求需要用到httpclient

go需要引入goquery

// 引入
go get github.com/PuerkitoBio/goquery

// 一段使用示例
res, err := http.Get("https://www.pixiv.net/artworks/96461024")
if err != nil {
   fmt.Println(err)
}
defer res.Body.Close()
doc, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
   log.Fatal(err)
}
// 多个元素遍历
doc.Find("#meta-preload-data").Each(func(i int, s *goquery.Selection) {
   fmt.Println(i)
   fmt.Println(s.Attr("content"))
})
// 单个元素
attrV, _ = doc.Find("#meta-preload-data").Attr("content")=
fmt.Println(attrV)

原本f12在找页面请求,想要拿到插画作者信息,查询作者信息的接口虽然找到了,但是找不到作者userId的来源,于是乎就想着大概会在页面里,果不其然 🤣


Ex - ploooosion!