123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 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
- 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()
- }
- //视频url
- var videoUrl = inData.ItemList[0].Video.PlayAddr.URLList[0]
- out.Data.VideoUrl = strings.Replace(videoUrl, "playwm", "play", 1)
- //音频url
- out.Data.AudioUrl = inData.ItemList[0].Music.PlayURL.URI
- out.Data.VideoPic = inData.ItemList[0].Video.DynamicCover.URLList[0]
- 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))
- videoStr := string(ss)
- //截取字符串
- comma = strings.Index(videoStr, "\"")
- pos = strings.Index(videoStr[comma+1:], "\">")
- fmt.Println(videoStr[comma+1 : pos+comma+1])
- out.Data.VideoUrl = strings.Replace(videoStr[comma+1:pos+comma+1], "http", "https", 1)
- out.Data.VideoUrl = out.Data.VideoUrl + ".mp4"
- //截取
- comma = strings.Index(out.Data.VideoUrl, "https://")
- pos = strings.Index(out.Data.VideoUrl[comma+1:], ".com")
- fmt.Println(out.Data.VideoUrl[comma : pos+comma+4+1])
- 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
- }
|