fix douyin bug

pull/51/head
肥羊 3 years ago
parent 50e8b97a00
commit 4f5df2fbb5
  1. 75
      Golang/liveurls/douyin.go
  2. 6
      Golang/main.go

@ -9,7 +9,6 @@ package liveurls
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
@ -17,6 +16,7 @@ import (
)
type Douyin struct {
Quality string
Shorturl string
Rid string
}
@ -45,8 +45,7 @@ func GetRoomId(url string) any {
}
func (d *Douyin) GetRealurl() any {
var mediamap map[string]map[string]map[string]map[string]any
var roomstatus map[string]map[string]map[string]int
var mediamap map[string]map[string]map[string]map[string]map[string]any
var roomid string
if str, ok := GetRoomId(d.Shorturl).(string); ok {
roomid = str
@ -54,24 +53,72 @@ func (d *Douyin) GetRealurl() any {
return nil
}
client := &http.Client{}
r, _ := http.NewRequest("GET", "https://webcast.amemv.com/webcast/room/reflow/info/?type_id=0&live_id=1&room_id="+roomid+"&sec_user_id=&app_id=1128", nil)
r.Header.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
r.Header.Add("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")
params := map[string]string{
"aid": "6383",
"live_id": "1",
"device_platform": "web",
"language": "zh-CN",
"enter_from": "web_search",
"cookie_enabled": "true",
"screen_width": "1920",
"screen_height": "1080",
"browser_language": "zh-CN",
"browser_name": "Chrome",
"room_id": roomid,
"scene": "pc_stream_4k",
}
r, _ := http.NewRequest("GET", "https://live.douyin.com/webcast/room/info_by_scene/?", nil)
q := r.URL.Query()
for k, v := range params {
q.Add(k, v)
}
r.URL.RawQuery = q.Encode()
resp, _ := client.Do(r)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
str, _ := url.QueryUnescape(string(body))
json.Unmarshal([]byte(str), &mediamap)
json.Unmarshal([]byte(str), &roomstatus)
var realurl any
if mediaslice, ok := mediamap["data"]["room"]["stream_url"]["hls_pull_url_map"].(map[string]any); ok {
for k, v := range mediaslice {
if k == "FULL_HD1" {
realurl = fmt.Sprintf("%v", v)
}
if roomstatus["data"]["room"]["status"] != 2 {
realurl = nil
if mediaslice, ok := mediamap["data"]["stream_url"]["live_core_sdk_data"]["pull_data"]["Hls"].([]any); ok {
for _, v := range mediaslice {
if newmediamap, ok := v.(map[string]any); ok {
for k := range newmediamap {
switch d.Quality {
case "uhd":
{
if newmediamap[k] == "uhd" {
realurl = newmediamap["url"]
}
}
case "origin":
{
if newmediamap[k] == "origin" {
realurl = newmediamap["url"]
}
}
case "hd":
{
if newmediamap[k] == "hd" {
realurl = newmediamap["url"]
}
}
case "sd":
{
if newmediamap[k] == "sd" {
realurl = newmediamap["url"]
}
}
case "ld":
{
if newmediamap[k] == "ld" {
realurl = newmediamap["url"]
}
}
}
}
}
}
}
return realurl

@ -65,9 +65,11 @@ func setupRouter(adurl string) *gin.Engine {
})
r.GET("/douyin", func(c *gin.Context) {
vrurl := c.Query("url")
url := c.Query("url")
quality := c.DefaultQuery("quality", "origin")
douyinobj := &liveurls.Douyin{}
douyinobj.Shorturl = vrurl
douyinobj.Shorturl = url
douyinobj.Quality = quality
c.Redirect(http.StatusMovedPermanently, duanyan(adurl, douyinobj.GetRealurl()))
})

Loading…
Cancel
Save