package dyjx import ( "dysy/apis" "dysy/models" "dysy/models/mysql" "dysy/tools" "encoding/json" "errors" "fmt" "github.com/asmcos/requests" "github.com/gin-gonic/gin" "io/ioutil" "net/http" "strings" ) func DouYinUrlJieXi(c *gin.Context) { //前端给端视频连接 var inData models.DyJieXiInput var outData models.DyJieXiOutput err := c.ShouldBindJSON(&inData) if err != nil { outData.Code = apis.Code400 outData.Message = apis.InputFail c.JSON(http.StatusOK, outData) return } err, outData = DeWater(inData) if err != nil { outData.Code = apis.Code500 outData.Message = err.Error() c.JSON(http.StatusOK, outData) return } outData.Code = apis.Code200 outData.Message = apis.Success c.JSON(http.StatusOK, outData) } func DeWater(in models.DyJieXiInput) (error, models.DyJieXiOutput) { var out models.DyJieXiOutput var dysy mysql.DysyUrlInfo var p []byte //fmt.Println("test") str := "" baseHost := in.Url client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } //client.Head() res, err := client.Get(baseHost) if err != nil { return errors.New(apis.ClientGetFail), out } n, err := res.Body.Read(p) fmt.Println("n=", n) str = res.Header.Get("Location") fmt.Println("res.Body = ", string(p)) comma := strings.Index(str, "/video/") pos := strings.Index(str, "/?") //fmt.Println(comma, pos, str[comma+7:pos]) var inData models.DyJieXi baseHost = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + str[comma+7:pos] fmt.Println("baseHost = ", baseHost) req := requests.Requests() resp, err := req.Get(baseHost) if err != nil { return errors.New(apis.RedirectUrlFail), out } err = json.Unmarshal([]byte(resp.Text()), &inData) if err != nil { return errors.New(apis.JsonUnmarshalFail), out //fmt.Println() } //fmt.Println(inData) //data,_ :=json.Marshal(inData) //fmt.Println(string(data)) //视频url var videoUrl = inData.ItemList[0].Video.PlayAddr.URLList[0] //fmt.Println(inData.ItemList[0].Video.PlayAddr.URLList[0]) //fmt.Println(inData.ItemList[0].Video.PlayAddr.URI) //fmt.Println(strings.Replace(videoUrl, "playwm", "play", 1)) out.Data.VideoUrl = strings.Replace(videoUrl, "playwm", "play", 1) //音频url //musicUrl = dyResult.getItem_list().get(0).getMusic().getPlay_url().getUri(); //dyDto.setMusicUrl(musicUrl); //fmt.Println(inData.ItemList[0].Music.PlayURL.URI) //fmt.Println(inData.ItemList[0].Music.PlayURL.URLList[0]) out.Data.AudioUrl = inData.ItemList[0].Music.PlayURL.URI //videoPic = dyResult.getItem_list().get(0).getVideo().getDynamic_cover().getUrl_list().get(0); //dyDto.setVideoPic(videoPic); //封面 //fmt.Println(inData.ItemList[0].Video.DynamicCover.URLList[0]) out.Data.VideoPic = inData.ItemList[0].Video.DynamicCover.URLList[0] //文案 //desc = dyResult.getItem_list().get(0).getDesc(); // dyDto.setDesc(desc); //fmt.Println(inData.ItemList[0].Desc) out.Data.Desc = inData.ItemList[0].Desc //数据库创建记录 dysy.Desc = out.Data.Desc dysy.VideoPic = out.Data.VideoPic dysy.AudioURL = out.Data.AudioUrl dysy.DouYinShortURL = in.Url dysy.DeWaterVideoURL = out.Data.VideoUrl dysy.DouYinBaseHost = baseHost dysy.Number = 1 dysy.UpdateTime = tools.GetCurrntTimeStr() dysy.CreateTime = tools.GetCurrntTimeStr() dysy.Create(dysy.DeWaterVideoURL) fmt.Println("out.Data.VideoUrl = ", out.Data.VideoUrl) client1 := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } //client.Head() res1, err := client1.Get(out.Data.VideoUrl) if err != nil { return errors.New(apis.ClientGetFail), out } ss, err := ioutil.ReadAll(res1.Body) fmt.Println(string(ss)) //reqq := requests.Requests() // 获取 header //header, err := ubaRequestHeader("") //if err != nil { // fmt.Println(err.Error()) //} //fmt.Println(header) //respp, err := reqq.Get(out.Data.VideoUrl, header) //if err != nil { // fmt.Println(err.Error()) //} ////fmt.Println(respp.Text()) //fmt.Println(respp.Text()[0:100]) //index := strings.Index(respp.Text(), "src") //fmt.Println("index = ", index) //打开视频连接 //reqq := requests.Requests() //resp, err = reqq.Get(out.Data.VideoUrl) //if err != nil { // fmt.Println("err =", err.Error()) //} //respp, err := http.Post(out.Data.VideoUrl, "text/html", nil) //if err != nil { // fmt.Println("http get error", err) //} //body, err := ioutil.ReadAll(respp.Body) //if err != nil { // fmt.Println("read error", err) // //} //str = respp.Header.Get("Location") //fmt.Println("str = ", str) //fmt.Println(string(body)[0:100]) //index := strings.Index(string(body), "src") //fmt.Println("index = ", index) //fmt.Println("resp = ", resp.Text()) //fmt.Println("resp = ", resp.SaveFile("./name")) //fmt.Println("resp = ", string(resp.Content())) return nil, out } func ubaRequestHeader(body string) (header requests.Header, err error) { // 正确返回 return requests.Header{ "Content-Type": "text/html; charset=utf-8", "User-Agent": "Mozilla/5.0 (Linux; Android 9.0; Z832 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36", }, nil }