init
This commit is contained in:
151
pkg/util/tiktok/tiktok.go
Normal file
151
pkg/util/tiktok/tiktok.go
Normal file
@ -0,0 +1,151 @@
|
||||
package tiktok
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hk/pkg/util/httpUtil"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type tiktokResp struct {
|
||||
Code int64 `json:"code"`
|
||||
Data tiktokData `json:"data"`
|
||||
}
|
||||
|
||||
type tiktokData struct {
|
||||
ID string `json:"id"`
|
||||
AwesomeID string `json:"aweme_id"`
|
||||
Region string `json:"region"`
|
||||
Title string `json:"title"`
|
||||
Cover string `json:"cover"`
|
||||
AiDynamicCover string `json:"ai_dynamic_cover"` // 动态封面
|
||||
OriginCover string `json:"origin_cover"` // 静态封面
|
||||
Duration int `json:"duration"`
|
||||
Play string `json:"play"` // 无水印视频
|
||||
Wmplay string `json:"wmplay"` // 有水印视频
|
||||
Size int `json:"size"`
|
||||
WmSize int `json:"wm_size"`
|
||||
Music string `json:"music"`
|
||||
MusicInfo musicInfo `json:"music_info"`
|
||||
PlayCount int `json:"play_count"`
|
||||
DiggCount int `json:"digg_count"`
|
||||
CommentCount int `json:"comment_count"`
|
||||
ShareCount int `json:"share_count"`
|
||||
DownloadCount int `json:"download_count"`
|
||||
CollectCount int `json:"collect_count"`
|
||||
CreateTime int `json:"create_time"`
|
||||
AnchorsExtras string `json:"anchors_extras"`
|
||||
IsAd bool `json:"is_ad"`
|
||||
CommercialVideoInfo string `json:"commercial_video_info"`
|
||||
ItemCommentSettings int `json:"item_comment_settings"`
|
||||
Author authorDTO `json:"author"`
|
||||
}
|
||||
|
||||
type musicInfo struct {
|
||||
ID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Play string `json:"play"` // 背景音乐
|
||||
Cover string `json:"cover"`
|
||||
Author string `json:"author"`
|
||||
Original bool `json:"original"`
|
||||
Duration int `json:"duration"`
|
||||
Album string `json:"album"`
|
||||
}
|
||||
|
||||
type authorDTO struct {
|
||||
ID string `json:"id"`
|
||||
UniqueID string `json:"unique_id"`
|
||||
Nickname string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
}
|
||||
|
||||
type VideoInfoResponse struct {
|
||||
AuthorID string `json:"authorId"` // 作者ID
|
||||
AuthorUniqueID string `json:"authorUniqueId"` // 作者账号
|
||||
AuthorAvatar string `json:"authorAvatar"` // 作者头像
|
||||
AuthorNickname string `json:"authorNickname"` // 作者昵称
|
||||
|
||||
VideoID string `json:"videoId"` // 视频ID
|
||||
VideoTitle string `json:"videoTitle"` // 作品描述
|
||||
OriginCover string `json:"originCover"` // 静态封面
|
||||
DynamicCover string `json:"dynamicCover"` // 动态封面
|
||||
DestinationURL string `json:"destinationUrl"` // 无水印下载地址
|
||||
WatermarkVideoURL string `json:"watermarkVideoUrl"` // 有水印下载地址
|
||||
|
||||
MusicURL string `json:"musicUrl"` // 背景音乐链接
|
||||
|
||||
OriginalURL string `json:"originalUrl"` // 原始下载链接
|
||||
DownloaderURL string `json:"downloaderUrl"` // 解析后下载地址
|
||||
CreateTime string `json:"createTime"` // 创建时间
|
||||
Result bool `json:"result"` // 结果
|
||||
}
|
||||
|
||||
func GetTiktokVideoInfo(videoUrl string) (*VideoInfoResponse, error) {
|
||||
if len(videoUrl) <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 解析视频地址
|
||||
// 定义需要匹配的前缀
|
||||
prefixes := []string{
|
||||
"https://www.tiktok.com/t/",
|
||||
"https://m.tiktok.com/v/",
|
||||
"https://vm.tiktok.com/",
|
||||
"https://vt.tiktok.com/",
|
||||
"https://dltik.com/",
|
||||
}
|
||||
|
||||
// 检查是否有匹配的前缀
|
||||
for _, prefix := range prefixes {
|
||||
if strings.HasPrefix(videoUrl, prefix) {
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
// 获取视频信息
|
||||
var url = "https://tiktok-download-without-watermark.p.rapidapi.com/analysis?url=" + videoUrl
|
||||
headers := map[string]string{
|
||||
"x-rapidapi-host": "tiktok-download-without-watermark.p.rapidapi.com",
|
||||
"x-rapidapi-key": "4a5bbe21bfmshbd98e7404b74063p19ba22jsne87a37e3b675",
|
||||
}
|
||||
|
||||
body, err := httpUtil.NewRequest().SendGET(url, headers, nil)
|
||||
if err != nil || len(body) <= 0 {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tiktokResp tiktokResp
|
||||
err = json.Unmarshal([]byte(body), &tiktokResp)
|
||||
if err != nil {
|
||||
fmt.Println("解析响应体时发生错误:", err)
|
||||
return nil, err
|
||||
}
|
||||
// 比对 statusCode 是否等于0
|
||||
if tiktokResp.Code != 0 {
|
||||
return nil, nil
|
||||
}
|
||||
var videoInfo = VideoInfoResponse{}
|
||||
|
||||
// 作者信息
|
||||
videoInfo.AuthorID = tiktokResp.Data.Author.ID
|
||||
videoInfo.AuthorAvatar = tiktokResp.Data.Author.Avatar
|
||||
videoInfo.AuthorUniqueID = tiktokResp.Data.Author.UniqueID
|
||||
videoInfo.AuthorNickname = tiktokResp.Data.Author.Nickname
|
||||
|
||||
videoInfo.VideoID = tiktokResp.Data.ID
|
||||
videoInfo.VideoTitle = tiktokResp.Data.Title
|
||||
videoInfo.OriginCover = tiktokResp.Data.OriginCover
|
||||
videoInfo.DynamicCover = tiktokResp.Data.AiDynamicCover
|
||||
videoInfo.DestinationURL = tiktokResp.Data.Play
|
||||
videoInfo.WatermarkVideoURL = tiktokResp.Data.Wmplay
|
||||
|
||||
videoInfo.MusicURL = tiktokResp.Data.MusicInfo.Play
|
||||
|
||||
videoInfo.OriginalURL = videoUrl
|
||||
videoInfo.DownloaderURL = videoUrl
|
||||
|
||||
//videoInfo.CreateTime = tiktokResp.Data.CreateTime
|
||||
|
||||
videoInfo.Result = true
|
||||
return &videoInfo, nil
|
||||
}
|
Reference in New Issue
Block a user