update douyin

pull/35/head
肥羊 3 years ago
parent 62f9084aeb
commit 05bb28ddc0
  1. 4
      Golang/go.mod
  2. 70
      Golang/liveurls/douyin.go
  3. 2
      Golang/main.go

@ -3,15 +3,15 @@ module Golang
go 1.19
require (
github.com/dlclark/regexp2 v1.7.0
github.com/dop251/goja v0.0.0-20230203172422-5460598cfa32
github.com/etherlabsio/go-m3u8 v1.0.0
github.com/forgoer/openssl v1.5.0
github.com/gin-gonic/gin v1.8.2
github.com/tidwall/gjson v1.14.4
)
require (
github.com/etherlabsio/go-m3u8 v1.0.0 // indirect
github.com/dlclark/regexp2 v1.7.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect

@ -9,6 +9,7 @@ package liveurls
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
@ -16,7 +17,6 @@ import (
)
type Douyin struct {
Quality string
Shorturl string
Rid string
}
@ -45,7 +45,7 @@ func GetRoomId(url string) any {
}
func (d *Douyin) GetRealurl() any {
var mediamap map[string]map[string]map[string]map[string]map[string]any
var mediamap map[string]map[string]map[string]map[string]any
var roomid string
if str, ok := GetRoomId(d.Shorturl).(string); ok {
roomid = str
@ -53,72 +53,20 @@ func (d *Douyin) GetRealurl() any {
return nil
}
client := &http.Client{}
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()
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("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36")
r.Header.Add("upgrade-insecure-requests", "1")
resp, _ := client.Do(r)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
str, _ := url.QueryUnescape(string(body))
json.Unmarshal([]byte(str), &mediamap)
var realurl any
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"]
}
}
}
}
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)
}
}
}
return realurl

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

Loading…
Cancel
Save