最近又在写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的来源,于是乎就想着大概会在页面里,果不其然 🤣
Comments | NOTHING