Token string
Parent_area_id int
Area_id int
- wearing_FansMedal bool
}
var apilog = c.Log.Base(`api`)
c.Title != ``{return}
{//使用其他api
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.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,
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
return
}
if api_limit.TO() {return}//超额请求阻塞,超时将取消
+
+ CookieM := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ CookieM[k.(string)] = v.(string)
+ return true
+ })
- Cookie := p.Map_2_Cookies_String(c.Cookie)
+ Cookie := p.Map_2_Cookies_String(CookieM)
if i := strings.Index(Cookie, "PVID="); i != -1 {
if d := strings.Index(Cookie[i:], ";"); d == -1 {
Cookie = Cookie[:i]
})
if e := r.S(`"durl":[`, `]`, 0, 0).Err;e == nil {
if urls := p.Json().GetArrayFrom("[" + r.RS[0] + "]", "url");urls != nil {
- apilog.L(`W: `,"直播中")
+ apilog.L(`I: `,"直播中")
c.Liveing = true
o.Live_status = 1
for _,v := range urls {
switch live_status.(float64) {
case 2:
c.Liveing = false
- apilog.L(`W: `,"轮播中")
+ apilog.L(`I: `,"轮播中")
return
case 0: //未直播
c.Liveing = false
- apilog.L(`W: `,"未在直播")
+ apilog.L(`I: `,"未在直播")
return
case 1:
c.Liveing = true
- apilog.L(`W: `,"直播中")
+ apilog.L(`I: `,"直播中")
default:
apilog.L(`W: `,"live_status:", live_status)
}
}
if v,ok := c.Default_qn[cu_qn];ok {
- apilog.L(`W: `,"当前清晰度:", v)
+ apilog.L(`I: `,"当前清晰度:", v)
}
return
}
}
Roomid := strconv.Itoa(o.Roomid)
if api_limit.TO() {return}//超额请求阻塞,超时将取消
-
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
req := p.Req()
if err := req.Reqf(p.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(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
if uid == "" {return ""}
if api_limit.TO() {return ""}//超额请求阻塞,超时将取消
apilog := apilog.Base_add(`获取头像`)
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
req := p.Req()
if err := req.Reqf(p.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(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
var self_loop func(page int)
self_loop = func(page int){
if page <= 0 || session_roomid != c.Roomid{return}
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
req := p.Req()
if err := req.Reqf(p.Rval{
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
if api_limit.TO() {return}//超额请求阻塞,超时将取消
apilog := apilog.Base_add(`获取热门榜`)
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/xlive/general-interface/v1/rank/getHotRank?ruid=`+strconv.Itoa(i.Uid)+`&room_id=`+strconv.Itoa(c.Roomid)+`&is_pre=0&page_size=50&source=2&area_id=`+strconv.Itoa(i.Parent_area_id),
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
if api_limit.TO() {return}//超额请求阻塞,超时将取消
apilog := apilog.Base_add(`获取舰长数`)
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topList?roomid=`+strconv.Itoa(c.Roomid)+`&page=1&ruid=`+strconv.Itoa(i.Uid)+`&page_size=29`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
return
} else {
c.GuardNum = int(num.(float64))
- apilog.L(`W: `,"舰长数获取成功", c.GuardNum)
+ apilog.L(`I: `,"舰长数获取成功", c.GuardNum)
}
return
}
return
}
c.VERSION = r.RS[0]
- apilog.L(`W: `,"api version", c.VERSION)
+ apilog.L(`I: `,"api version", c.VERSION)
}
}
},
})
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
for max_try > 0 && !change_room_sign {
max_try -= 1
p.Sys().Timeoutf(3)
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(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
}
{//写入cookie.txt
for k,v := range p.Cookies_String_2_Map(cookie){
- c.Cookie[k] = v
+ c.Cookie.Store(k, v)
}
f := p.File()
f.FileWR(p.Filel{
}
}
-func (i *api) Switch_FansMedal() {
- if len(c.Cookie) == 0 {return}
+func (i *api) CheckSwitch_FansMedal() {
+ if c.Cookie.Len() == 0 {return}
if api_limit.TO() {return}//超额请求阻塞,超时将取消
apilog := apilog.Base_add(`切换粉丝牌`)
- Cookie := p.Map_2_Cookies_String(c.Cookie)
- {//验证是否本直播间牌子
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+ {//获取当前牌子,验证是否本直播间牌子
r := p.Req()
if e := r.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/live_user/v1/UserInfo/get_weared_medal`,
Header:map[string]string{
- `Cookie`:Cookie,
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
apilog.L(`E: `,e)
return
}
- res := string(r.Respon)
- if v,ok := p.Json().GetValFromS(res, "data.roominfo.room_id").(float64);ok && int(v) == c.Roomid {
+ var res struct{
+ Code int `json:"code"`
+ Msg string `json:"msg"`
+ Message string `json:"message"`
+ Data struct{
+ Roominfo struct{
+ Room_id int `json:"room_id"`
+ } `json:"roominfo"`
+ } `json:"data"`
+ }
+ if e := json.Unmarshal(r.Respon, &res);e != nil && res.Msg == ``{//未佩戴时的data是array型会导致错误
+ apilog.L(`E: `,e)
+ return
+ }
+
+ c.Wearing_FansMedal = res.Data.Roominfo.Room_id//更新佩戴信息
+ if res.Data.Roominfo.Room_id == c.Roomid {
return
}
}
if e := r.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/fans_medal/v1/FansMedal/get_list_in_room`,
Header:map[string]string{
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:10,
Retry:2,
return
}
}
+
+ if medal_id == 0 {//无牌
+ if c.Wearing_FansMedal == 0 {//当前没牌
+ apilog.L(`I: `,`当前无粉丝牌,不切换`)
+ return
+ }
+ }
}
var (
post_url string
post_str string
)
{//生成佩戴信息
- csrf := c.Cookie[`bili_jct`]
+ csrf := c.Cookie.LoadV(`bili_jct`).(string)
if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct=");return}
post_str = `csrf_token=`+csrf+`&csrf=`+csrf
- i.wearing_FansMedal = medal_id != 0
if medal_id == 0 {//无牌,不佩戴牌子
post_url = `https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/take_off`
} else {
Url:post_url,
PostStr:post_str,
Header:map[string]string{
- `Cookie`:Cookie,
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
`Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`,
`Referer`: `https://passport.bilibili.com/login`,
},
}
res := string(r.Respon)
if v,ok := p.Json().GetValFromS(res, "code").(float64);ok && v == 0 {
- apilog.L(`W: `,`自动切换粉丝牌`)
+ apilog.L(`I: `,`自动切换粉丝牌`)
+ c.Wearing_FansMedal = medal_id//更新佩戴信息
return
}
if v,ok := p.Json().GetValFromS(res, "message").(string);ok {
//签到
func Dosign() {
apilog := apilog.Base_add(`签到`).L(`T: `,`签到`)
- if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return}
+ if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return}
if api_limit.TO() {return}//超额请求阻塞,超时将取消
{//检查是否签到
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/all",
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
}
{//签到
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/all",
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
func (i *api) Get_LIVE_BUVID() (o *api){
o = i
apilog := apilog.Base_add(`LIVE_BUVID`).L(`T: `,`获取LIVE_BUVID`)
- if c.Cookie[`LIVE_BUVID`] != `` {apilog.L(`I: `,`存在`);return}
- if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return}
+ if c.Cookie.LoadV(`LIVE_BUVID`).(string) != `` {apilog.L(`I: `,`存在`);return}
+ if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return}
if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消
for {//获取
//cookie
var has bool
for k,v := range p.Cookies_List_2_Map(req.Response.Cookies()){
- c.Cookie[k] = v
+ c.Cookie.Store(k, v)
if k == `LIVE_BUVID` {has = true}
}
if has {
}
}
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
f := p.File()
f.FileWR(p.Filel{
File: `cookie.txt`,
Write: true,
- Context: []interface{}{p.Map_2_Cookies_String(c.Cookie)},
+ Context: []interface{}{p.Map_2_Cookies_String(Cookie)},
})
return
}
func (i *api) F_x25Kn() (o *api) {
o = i
apilog := apilog.Base_add(`小心心`).L(`T: `,`获取小心心`)
- if o.wearing_FansMedal {apilog.L(`I: `,`无粉丝牌,不获取`);return}
- if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return}
- if c.Cookie[`LIVE_BUVID`] == `` {apilog.L(`E: `,`失败!无LIVE_BUVID`);return}
+ if c.Wearing_FansMedal == 0{apilog.L(`I: `,`无粉丝牌,不获取`);return}
+ if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return}
+ if c.Cookie.LoadV(`LIVE_BUVID`).(string) == `` {apilog.L(`E: `,`失败!无LIVE_BUVID`);return}
if o.Parent_area_id == -1 {apilog.L(`E: `,`失败!未获取Parent_area_id`);return}
if o.Area_id == -1 {apilog.L(`E: `,`失败!未获取Area_id`);return}
if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消
loop_num = 0
)
- csrf := c.Cookie[`bili_jct`]
+ csrf := c.Cookie.LoadV(`bili_jct`).(string)
if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct");return}
- LIVE_BUVID := c.Cookie[`LIVE_BUVID`]
+ LIVE_BUVID := c.Cookie.LoadV(`LIVE_BUVID`).(string)
if LIVE_BUVID == `` {apilog.L(`E: `,"Cookie错误,无LIVE_BUVID");return}
var new_uuid string
PostStr += `csrf_token=`+csrf+`&csrf=`+csrf+`&`
PostStr += `visit_id=`
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/E`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(o.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
PostStr:url.PathEscape(PostStr),
Timeout:3,
} else {
PostStr = `s=`+wasm+`&`+PostStr
}
-
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/X`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(o.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
PostStr:url.PathEscape(PostStr),
Timeout:3,
func Gift_list() (list []Gift_list_type_Data_List) {
apilog := apilog.Base_add(`礼物列表`).L(`T: `,`获取礼物列表`)
- if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return}
+ if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return}
if c.Roomid == 0 {apilog.L(`E: `,`失败!无Roomid`);return}
if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.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),
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:"https://live.bilibili.com/"+strconv.Itoa(c.Roomid),
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
//银瓜子2硬币
func Silver_2_coin() {
apilog := apilog.Base_add(`银瓜子=>硬币`).L(`T: `,`银瓜子=>硬币`)
- if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return}
+ if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return}
if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消
var Silver int
{//验证是否还有机会
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/getStatus`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:`https://link.bilibili.com/p/center/index`,
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
}
{//获取交换规则,验证数量足够
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/getRule`,
`Pragma`: `no-cache`,
`Cache-Control`: `no-cache`,
`Referer`:`https://link.bilibili.com/p/center/index`,
- `Cookie`:p.Map_2_Cookies_String(c.Cookie),
+ `Cookie`:p.Map_2_Cookies_String(Cookie),
},
Timeout:3,
Retry:2,
}
if Silver < res.Data.Silver_2_coin_price{
- apilog.L(`E: `, `当前银瓜子数量不足`)
+ apilog.L(`W: `, `当前银瓜子数量不足`)
return
}
}
{//交换
- csrf := c.Cookie[`bili_jct`]
+ csrf := c.Cookie.LoadV(`bili_jct`).(string)
if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct=");return}
post_str := `csrf_token=`+csrf+`&csrf=`+csrf
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
req := p.Req()
if err := req.Reqf(p.Rval{
Url:`https://api.live.bilibili.com/pay/v1/Exchange/silver2coin`,
`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(c.Cookie),
+ `Cookie`:p.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){
- c.Cookie[k] = v
+ c.Cookie.Store(k, v)
}
f := p.File()
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
f.FileWR(p.Filel{
File: `cookie.txt`,
Write: true,
- Context: []interface{}{p.Map_2_Cookies_String(c.Cookie)},
+ Context: []interface{}{p.Map_2_Cookies_String(Cookie)},
})
}
\ No newline at end of file