"encoding/json"
"net/http"
"net/url"
- "errors"
- "github.com/skratchdot/open-golang/open"
- qr "github.com/skip2/go-qrcode"
c "github.com/qydysky/bili_danmu/CV"
J "github.com/qydysky/bili_danmu/Json"
+
+ p "github.com/qydysky/part"
+ g "github.com/qydysky/part/get"
web "github.com/qydysky/part/web"
+ reqf "github.com/qydysky/part/reqf"
funcCtrl "github.com/qydysky/part/funcCtrl"
- g "github.com/qydysky/part/get"
- p "github.com/qydysky/part"
+
uuid "github.com/gofrs/uuid"
+ qr "github.com/skip2/go-qrcode"
+ "github.com/mdp/qrterminal/v3"
+ "github.com/skratchdot/open-golang/open"
)
var apilog = c.Log.Base(`api`)
//html
{
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.bilibili.com/x/space/acc/info?mid=`+strconv.Itoa(UpUid)+`&jsonp=jsonp`,
Timeout:10,
Retry:2,
//html
{
- r := g.Get(p.Rval{
+ r := g.Get(reqf.Rval{
Url:"https://live.bilibili.com/" + Roomid,
})
Roomid := strconv.Itoa(c.Roomid)
{//使用其他api
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=" + Roomid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + Roomid,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?no_playurl=0&mask=1&qn=0&platform=web&protocol=0,1&format=0,2&codec=0,1&room_id=" + Roomid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + Roomid,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?no_playurl=0&mask=1&qn="+ strconv.Itoa(c.Live_qn) +"&platform=web&protocol=0,1&format=0,2&codec=0,1&room_id=" + Roomid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + Roomid,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?type=0&id=" + Roomid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + Roomid,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
});err != nil {
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuMedalAnchorInfo?ruid=" + uid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/xlive/general-interface/v1/rank/getHotRank?ruid=`+strconv.Itoa(c.UpUid)+`&room_id=`+Roomid+`&is_pre=0&page_size=50&source=2&area_id=`+strconv.Itoa(c.ParentAreaID),
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/" + Roomid,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topList?roomid=`+Roomid+`&page=1&ruid=`+strconv.Itoa(c.UpUid)+`&page_size=29`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/" + Roomid,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
var player_js_url string
{//获取player_js_url
- r := g.Get(p.Rval{
+ r := g.Get(reqf.Rval{
Url:"https://live.bilibili.com/blanc/" + Roomid,
})
}
{//获取VERSION
- r := g.Get(p.Rval{
+ r := g.Get(reqf.Rval{
Url:player_js_url,
})
if p.Checkfile().IsExist("cookie.txt") {//读取cookie文件
if cookieString := string(CookieGet());cookieString != ``{
- for k,v := range p.Cookies_String_2_Map(cookieString){//cookie存入全局变量syncmap
+ for k,v := range reqf.Cookies_String_2_Map(cookieString){//cookie存入全局变量syncmap
c.Cookie.Store(k, v)
}
if miss := CookieCheck([]string{
var img_url string
var oauth string
{//获取二维码
- r := p.Req()
- if e := r.Reqf(p.Rval{
+ r := reqf.Req()
+ if e := r.Reqf(reqf.Rval{
Url:`https://passport.bilibili.com/qrcode/getLoginUrl`,
Timeout:10,
Retry:2,
defer server.Shutdown(context.Background())
if c.K_v.LoadV(`扫码登录自动打开标签页`).(bool) {open.Run(`http://`+server.Addr+`/qr.png`)}
- apilog.L(`W: `,`打开链接扫码登录:`,`http://`+server.Addr+`/qr.png`)
+ apilog.L(`W: `,`打开链接扫码登录:`,`http://`+server.Addr+`/qr.png`).Block(1000)
+ //show qr code in cmd
+ qrterminal.GenerateWithConfig(img_url, qrterminal.Config{
+ Level: qrterminal.L,
+ Writer: os.Stdout,
+ BlackChar: qrterminal.BLACK,
+ WhiteChar: qrterminal.WHITE,
+ })
p.Sys().Timeoutf(1)
}
//有新实例,退出
if boot_Get_cookie.NeedExit(id) {return}
- r := p.Req()
- if e := r.Reqf(p.Rval{
+ r := reqf.Req()
+ if e := r.Reqf(reqf.Rval{
Url:`https://passport.bilibili.com/qrcode/getLoginInfo`,
PostStr:`oauthKey=`+oauth,
Header:map[string]string{
`Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`,
`Referer`: `https://passport.bilibili.com/login`,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
apilog.L(`E: `,`getLoginInfo cookies len == 0`)
return
} else {
- cookie = p.Map_2_Cookies_String(p.Cookies_List_2_Map(v))//cookie to string
+ cookie = reqf.Map_2_Cookies_String(reqf.Cookies_List_2_Map(v))//cookie to string
}
if cookie == `` {
apilog.L(`E: `,`getLoginInfo cookies ""`)
if boot_Get_cookie.NeedExit(id) {return}
{//写入cookie.txt
- for k,v := range p.Cookies_String_2_Map(cookie){
+ for k,v := range reqf.Cookies_String_2_Map(cookie){
c.Cookie.Store(k, v)
}
//生成cookieString
{//获取牌子列表
var medalList []TGet_list_in_room
for pageNum:=1; true;pageNum+=1{
- r := p.Req()
- if e := r.Reqf(p.Rval{
+ r := reqf.Req()
+ if e := r.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/fans_medal/v5/live_fans_medal/iApiMedal?page=`+strconv.Itoa(pageNum)+`&pageSize=10`,
Header:map[string]string{
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
})
{//获取
- r := p.Req()
- if e := r.Reqf(p.Rval{
+ r := reqf.Req()
+ if e := r.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/live_user/v1/UserInfo/get_weared_medal`,
Header:map[string]string{
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
}
}
{//切换牌子
- r := p.Req()
- if e := r.Reqf(p.Rval{
+ r := reqf.Req()
+ if e := r.Reqf(reqf.Rval{
Url:post_url,
PostStr:post_str,
Header:map[string]string{
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
`Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`,
`Referer`: `https://passport.bilibili.com/login`,
},
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/all",
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/all",
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
}
for _,roomid := range roomIdList{//获取
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/live/getRoomKanBanModel?roomid=`+roomid,
Header:map[string]string{
`Host`: `live.bilibili.com`,
//cookie
var has bool
- for k,v := range p.Cookies_List_2_Map(req.Response.Cookies()){
+ for k,v := range reqf.Cookies_List_2_Map(req.Response.Cookies()){
c.Cookie.Store(k, v)
if k == `LIVE_BUVID` {has = true}
}
return true
})
- CookieSet([]byte(p.Map_2_Cookies_String(Cookie)))
+ CookieSet([]byte(reqf.Map_2_Cookies_String(Cookie)))
c.LIVE_BUVID = true
return true
})
- req := p.Req()
+ req := reqf.Req()
for {
//新调用,此退出
if boot_F_x25Kn.NeedExit(id) {return}
- if err := req.Reqf(p.Rval{
+ if err := req.Reqf(reqf.Rval{
Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/E`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
PostStr:url.PathEscape(PostStr),
Timeout:5,
Retry:2,
});err != nil {
- if !errors.Is(err, context.DeadlineExceeded) {
+ if !reqf.IsTimeout(err) {
apilog.L(`E: `,err)
return
}
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/X`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
PostStr:url.PathEscape(PostStr),
Timeout:5,
Retry:2,
});err != nil {
- if errors.Is(err, context.DeadlineExceeded) {
+ if !reqf.IsTimeout(err) {
loop_num -= 1
apilog.L(`W: `,`响应超时,将重试`)
continue
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/xlive/web-room/v1/gift/bag_list?t=`+strconv.Itoa(int(p.Sys().GetMTime()))+`&room_id=`+strconv.Itoa(c.Roomid),
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/getStatus`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:`https://link.bilibili.com/p/center/index`,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/getRule`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:`https://link.bilibili.com/p/center/index`,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return true
})
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/silver2coin`,
PostStr:url.PathEscape(post_str),
Header:map[string]string{
`Cache-Control`: `no-cache`,
`Content-Type`: `application/x-www-form-urlencoded`,
`Referer`:`https://link.bilibili.com/p/center/index`,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
}
func save_cookie(Cookies []*http.Cookie){
- for k,v := range p.Cookies_List_2_Map(Cookies){
+ for k,v := range reqf.Cookies_List_2_Map(Cookies){
c.Cookie.Store(k, v)
}
Cookie[k.(string)] = v.(string)
return true
})
- CookieSet([]byte(p.Map_2_Cookies_String(Cookie)))
+ CookieSet([]byte(reqf.Map_2_Cookies_String(Cookie)))
}
//正在直播主播
return true
})
- req := p.Req()
+ req := reqf.Req()
for pageNum:=1; true; pageNum+=1 {
- if err := req.Reqf(p.Rval{
+ if err := req.Reqf(reqf.Rval{
Url:`https://api.live.bilibili.com/relation/v1/feed/feed_list?page=`+strconv.Itoa(pageNum)+`&pagesize=10`,
Header:map[string]string{
`Host`: `api.live.bilibili.com`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:`https://t.bilibili.com/pages/nav/index_new`,
- `Cookie`:p.Map_2_Cookies_String(Cookie),
+ `Cookie`:reqf.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
Roomid := strconv.Itoa(Roomid_int)
{//使用其他api
- req := p.Req()
- if err := req.Reqf(p.Rval{
+ req := reqf.Req()
+ if err := req.Reqf(reqf.Rval{
Url:"https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid=" + Roomid,
Header:map[string]string{
`Referer`:"https://live.bilibili.com/" + Roomid,