You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.8 KiB
81 lines
2.8 KiB
// Package liveurls
|
|
// @Time:2023/06/03 05:40
|
|
// @File:yy.go
|
|
// @SoftWare:Goland
|
|
// @Author:feiyang
|
|
// @Contact:TG@feiyangdigital
|
|
|
|
package liveurls
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"regexp"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type Yy struct {
|
|
Rid string
|
|
Quality string
|
|
}
|
|
|
|
type StreamLineAddr struct {
|
|
CdnInfo struct {
|
|
Url string `json:"url"`
|
|
} `json:"cdn_info"`
|
|
}
|
|
|
|
type Result struct {
|
|
AvpInfoRes struct {
|
|
StreamLineAddr map[string]StreamLineAddr `json:"stream_line_addr"`
|
|
} `json:"avp_info_res"`
|
|
}
|
|
|
|
func (y *Yy) GetLiveUrl() any {
|
|
firstrid := y.Rid
|
|
quality := y.Quality
|
|
var rid string
|
|
checkUrl := "https://wap.yy.com/mobileweb/" + firstrid
|
|
client := &http.Client{}
|
|
req, _ := http.NewRequest("GET", checkUrl, nil)
|
|
req.Header.Set("Referer", "https://wap.yy.com")
|
|
req.Header.Set("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1")
|
|
res, _ := client.Do(req)
|
|
defer res.Body.Close()
|
|
body, _ := io.ReadAll(res.Body)
|
|
re := regexp.MustCompile(`md5Hash[\s\S]*?sid.*'(.*)'.*?getQuery`)
|
|
realdata := re.FindStringSubmatch(string(body))
|
|
|
|
if len(realdata) > 0 {
|
|
rid = realdata[1]
|
|
} else {
|
|
return nil
|
|
}
|
|
millis_13 := time.Now().UnixNano() / int64(time.Millisecond)
|
|
millis_10 := time.Now().Unix()
|
|
data := fmt.Sprintf(`{"head":{"seq":%d,"appidstr":"0","bidstr":"121","cidstr":"%s","sidstr":"%s","uid64":0,"client_type":108,"client_ver":"5.14.13","stream_sys_ver":1,"app":"yylive_web","playersdk_ver":"5.14.13","thundersdk_ver":"0","streamsdk_ver":"5.14.13"},"client_attribute":{"client":"web","model":"","cpu":"","graphics_card":"","os":"chrome","osversion":"106.0.0.0","vsdk_version":"","app_identify":"","app_version":"","business":"","width":"1536","height":"864","scale":"","client_type":8,"h265":0},"avp_parameter":{"version":1,"client_type":8,"service_type":0,"imsi":0,"send_time":%d,"line_seq":-1,"gear":%s,"ssl":1,"stream_format":0}}`, millis_13, rid, rid, millis_10, quality)
|
|
url := "https://stream-manager.yy.com/v3/channel/streams?uid=0&cid=" + rid + "&sid=" + rid + "&appid=0&sequence=" + strconv.FormatInt(millis_13, 10) + "&encode=json"
|
|
req, _ = http.NewRequest("POST", url, bytes.NewBuffer([]byte(data)))
|
|
req.Header.Set("Content-Type", "text/plain;charset=UTF-8")
|
|
req.Header.Set("Referer", "https://www.yy.com/")
|
|
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42")
|
|
|
|
res, _ = client.Do(req)
|
|
defer res.Body.Close()
|
|
body, _ = io.ReadAll(res.Body)
|
|
var result Result
|
|
json.Unmarshal(body, &result)
|
|
if len(result.AvpInfoRes.StreamLineAddr) > 0 {
|
|
var arr []string
|
|
for k := range result.AvpInfoRes.StreamLineAddr {
|
|
arr = append(arr, k)
|
|
}
|
|
return result.AvpInfoRes.StreamLineAddr[arr[0]].CdnInfo.Url
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|