查成分新增字段注册日期 (#212)

*  查成分添加注册日期信息

* 🐛 修复头像是webp图片使用不了的问题
This commit is contained in:
himawari 2022-05-03 14:42:58 +08:00 committed by GitHub
parent f8c7e2bf6d
commit 5db03b0441
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 31 deletions

View File

@ -5,6 +5,7 @@ import (
"errors" "errors"
"io" "io"
"net/http" "net/http"
"time"
"github.com/FloatTech/zbputils/binary" "github.com/FloatTech/zbputils/binary"
"github.com/FloatTech/zbputils/web" "github.com/FloatTech/zbputils/web"
@ -42,6 +43,17 @@ func search(keyword string) (r []searchResult, err error) {
return return
} }
// 用mid搜索,主要拿注册时间
func getCardByMid(mid string) (t string, err error) {
requestURL := "https://account.bilibili.com/api/member/getCardByMid?mid=" + mid
data, err := web.GetData(requestURL)
if err != nil {
return
}
t = time.Unix(gjson.ParseBytes(data).Get("card.regtime").Int(), 0).Format("2006-01-02 15:04:05")
return
}
type follower struct { type follower struct {
Mid int `json:"mid"` Mid int `json:"mid"`
Uname string `json:"uname"` Uname string `json:"uname"`
@ -85,14 +97,14 @@ func followings(uid string) (s string, err error) {
if err != nil { if err != nil {
return return
} }
json := gjson.ParseBytes(body) j := gjson.ParseBytes(body)
s = json.Get("data.list.#.uname").Raw s = j.Get("data.list.#.uname").Raw
if json.Get("code").Int() == -101 { if j.Get("code").Int() == -101 {
err = errNeedCookie err = errNeedCookie
return return
} }
if json.Get("code").Int() != 0 { if j.Get("code").Int() != 0 {
err = errors.New(json.Get("message").String()) err = errors.New(j.Get("message").String())
return return
} }
return return

View File

@ -4,8 +4,10 @@ package bilibili
import ( import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"image"
"image/color" "image/color"
"os" "os"
"path"
"sort" "sort"
"strconv" "strconv"
"time" "time"
@ -153,28 +155,29 @@ func init() {
i-- i--
} }
} }
facePath := cachePath + id + "vupFace.png" facePath := cachePath + id + "vupFace" + path.Ext(u.Face)
err = initFacePic(facePath, u.Face) backX := 500
if err != nil { backY := 500
ctx.SendChain(message.Text("ERROR:", err)) var back image.Image
return if path.Ext(u.Face) != ".webp" {
err = initFacePic(facePath, u.Face)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
back, err = gg.LoadImage(facePath)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
back = img.Limit(back, backX, backY)
} }
var backX int
var backY int
back, err := gg.LoadImage(facePath)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
back = img.Limit(back, 500, 500)
backX = back.Bounds().Size().X
backY = back.Bounds().Size().Y
if len(vups) > 50 { if len(vups) > 50 {
ctx.SendChain(message.Text(u.Name + "关注的up主太多了只展示前50个up")) ctx.SendChain(message.Text(u.Name + "关注的up主太多了只展示前50个up"))
vups = vups[:50] vups = vups[:50]
} }
canvas := gg.NewContext(backX*3, int(float64(backY)*(1.1+float64(len(vups))/3))) canvas := gg.NewContext(1500, int(500*(1.1+float64(len(vups))/3)))
fontSize := float64(backX) * 0.1 fontSize := 50.0
canvas.SetColor(color.White) canvas.SetColor(color.White)
canvas.Clear() canvas.Clear()
if back != nil { if back != nil {
@ -192,16 +195,21 @@ func init() {
sl, _ := canvas.MeasureString("好") sl, _ := canvas.MeasureString("好")
length, h := canvas.MeasureString(u.Mid) length, h := canvas.MeasureString(u.Mid)
n, _ := canvas.MeasureString(u.Name) n, _ := canvas.MeasureString(u.Name)
canvas.DrawString(u.Name, float64(backX)*1.1, float64(backY)/3-h) canvas.DrawString(u.Name, 550, 160-h)
canvas.DrawRoundedRectangle(float64(backX)*1.2+n-length*0.1, float64(backY)/3-h*2.5, length*1.2, h*2, fontSize*0.2) canvas.DrawRoundedRectangle(600+n-length*0.1, 160-h*2.5, length*1.2, h*2, fontSize*0.2)
canvas.SetRGB255(221, 221, 221) canvas.SetRGB255(221, 221, 221)
canvas.Fill() canvas.Fill()
canvas.SetColor(color.Black) canvas.SetColor(color.Black)
canvas.DrawString(u.Mid, float64(backX)*1.2+n, float64(backY)/3-h) canvas.DrawString(u.Mid, 600+n, 160-h)
canvas.DrawString(fmt.Sprintf("粉丝:%d", u.Fans), float64(backX)*1.1, float64(backY)/3*2-2.5*h) canvas.DrawString(fmt.Sprintf("粉丝:%d", u.Fans), 550, 240-h)
canvas.DrawString(fmt.Sprintf("关注:%d", len(u.Attentions)), float64(backX)*2, float64(backY)/3*2-2.5*h) canvas.DrawString(fmt.Sprintf("关注:%d", len(u.Attentions)), 1000, 240-h)
canvas.DrawString(fmt.Sprintf("管人痴成分:%.2f%%%d/%d", float64(vupLen)/float64(len(u.Attentions))*100, vupLen, len(u.Attentions)), float64(backX)*1.1, float64(backY)-4*h) canvas.DrawString(fmt.Sprintf("管人痴成分:%.2f%%%d/%d", float64(vupLen)/float64(len(u.Attentions))*100, vupLen, len(u.Attentions)), 550, 320-h)
canvas.DrawString("日期:"+time.Now().Format("2006-01-02"), float64(backX)*1.1, float64(backY)-h) regtime, err := getCardByMid(u.Mid)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
}
canvas.DrawString("注册日期:"+regtime, 550, 400-h)
canvas.DrawString("查询日期:"+time.Now().Format("2006-01-02"), 550, 480-h)
for i, v := range vups { for i, v := range vups {
if i%2 == 1 { if i%2 == 1 {
canvas.SetRGB255(245, 245, 245) canvas.SetRGB255(245, 245, 245)
@ -221,9 +229,9 @@ func init() {
mnl, _ := canvas.MeasureString(m.MedalName) mnl, _ := canvas.MeasureString(m.MedalName)
grad := gg.NewLinearGradient(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h, nl+ml+mnl+sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-1.5*h) grad := gg.NewLinearGradient(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h, nl+ml+mnl+sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-1.5*h)
r, g, b := int2rbg(m.MedalColorStart) r, g, b := int2rbg(m.MedalColorStart)
grad.AddColorStop(0, color.RGBA{uint8(r), uint8(g), uint8(b), 255}) grad.AddColorStop(0, color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 255})
r, g, b = int2rbg(m.MedalColorEnd) r, g, b = int2rbg(m.MedalColorEnd)
grad.AddColorStop(1, color.RGBA{uint8(r), uint8(g), uint8(b), 255}) grad.AddColorStop(1, color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 255})
canvas.SetFillStyle(grad) canvas.SetFillStyle(grad)
canvas.SetLineWidth(4) canvas.SetLineWidth(4)
canvas.MoveTo(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h) canvas.MoveTo(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h)