url_jx.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package dyjx
  2. import (
  3. "dysy/apis"
  4. "dysy/models"
  5. "encoding/json"
  6. "errors"
  7. "github.com/asmcos/requests"
  8. "github.com/gin-gonic/gin"
  9. "net/http"
  10. "strings"
  11. )
  12. func DouYinUrlJieXi(c *gin.Context) {
  13. //前端给端视频连接
  14. var inData models.DyJieXiInput
  15. var outData models.DyJieXiOutput
  16. err := c.ShouldBindJSON(&inData)
  17. if err != nil {
  18. outData.Code = apis.Code400
  19. outData.Message = apis.InputFail
  20. c.JSON(http.StatusOK, outData)
  21. return
  22. }
  23. err, outData = DeWater(inData)
  24. if err != nil {
  25. outData.Code = apis.Code500
  26. outData.Message = err.Error()
  27. c.JSON(http.StatusOK, outData)
  28. return
  29. }
  30. outData.Code = apis.Code200
  31. outData.Message = apis.Success
  32. c.JSON(http.StatusOK, outData)
  33. }
  34. func DeWater(in models.DyJieXiInput) (error, models.DyJieXiOutput) {
  35. var out models.DyJieXiOutput
  36. //fmt.Println("test")
  37. str := ""
  38. baseHost := in.Url
  39. client := &http.Client{
  40. CheckRedirect: func(req *http.Request, via []*http.Request) error {
  41. return http.ErrUseLastResponse
  42. },
  43. }
  44. res, err := client.Get(baseHost)
  45. if err != nil {
  46. return errors.New(apis.ClientGetFail), out
  47. }
  48. str = res.Header.Get("Location")
  49. comma := strings.Index(str, "/video/")
  50. pos := strings.Index(str, "/?")
  51. //fmt.Println(comma, pos, str[comma+7:pos])
  52. var inData models.DyJieXi
  53. baseHost = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + str[comma+7:pos]
  54. req := requests.Requests()
  55. resp, err := req.Get(baseHost)
  56. if err != nil {
  57. return errors.New(apis.RedirectUrlFail), out
  58. }
  59. err = json.Unmarshal([]byte(resp.Text()), &inData)
  60. if err != nil {
  61. return errors.New(apis.JsonUnmarshalFail), out
  62. //fmt.Println()
  63. }
  64. //fmt.Println(inData)
  65. //视频url
  66. var videoUrl = inData.ItemList[0].Video.PlayAddr.URLList[0]
  67. //fmt.Println(inData.ItemList[0].Video.PlayAddr.URLList[0])
  68. //fmt.Println(inData.ItemList[0].Video.PlayAddr.URI)
  69. //fmt.Println(strings.Replace(videoUrl, "playwm", "play", 1))
  70. out.Data.VideoUrl = strings.Replace(videoUrl, "playwm", "play", 1)
  71. //音频url
  72. //musicUrl = dyResult.getItem_list().get(0).getMusic().getPlay_url().getUri();
  73. //dyDto.setMusicUrl(musicUrl);
  74. //fmt.Println(inData.ItemList[0].Music.PlayURL.URI)
  75. //fmt.Println(inData.ItemList[0].Music.PlayURL.URLList[0])
  76. out.Data.AudioUrl = inData.ItemList[0].Music.PlayURL.URI
  77. //videoPic = dyResult.getItem_list().get(0).getVideo().getDynamic_cover().getUrl_list().get(0);
  78. //dyDto.setVideoPic(videoPic);
  79. //封面
  80. //fmt.Println(inData.ItemList[0].Video.DynamicCover.URLList[0])
  81. out.Data.VideoPic = inData.ItemList[0].Video.DynamicCover.URLList[0]
  82. //文案
  83. //desc = dyResult.getItem_list().get(0).getDesc();
  84. // dyDto.setDesc(desc);
  85. //fmt.Println(inData.ItemList[0].Desc)
  86. out.Data.Desc = inData.ItemList[0].Desc
  87. return nil, out
  88. }