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" "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 }, } 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) //打开视频连接 reqq := requests.Requests() resp, err = reqq.Post(out.Data.VideoUrl) if err != nil { fmt.Println("err =", err.Error()) } //fmt.Println("resp = ", resp.Text()) return nil, out }