0
Fork 0
mirror of https://codeberg.org/SafeTwitch/safetwitch-backend.git synced 2024-12-22 05:02:58 -05:00

Make clips not need streamer name

This commit is contained in:
dragongoose 2023-10-17 21:55:07 -04:00
parent 9c11f0e8f4
commit 0953928e5e
No known key found for this signature in database
GPG key ID: 01397EEC371CDAA5
2 changed files with 36 additions and 4 deletions

View file

@ -8,7 +8,39 @@ import (
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
) )
func GetClipMetadata(clipSlug string, streamerName string) (structs.Video, error) { func GetClipUsername(clipSlug string) (string, error) {
payload := []TwitchPayload{
{
"operationName": "VideoPlayerStreamInfoOverlayClip",
"variables": map[string]interface{}{
"slug": clipSlug,
},
"extensions": map[string]interface{}{
"persistedQuery": map[string]interface{}{
"version": 1,
"sha256Hash": "d026f1fc6ec6862869684a9768c20e3f6d51f6fd520a2a351dc274356e9c6eb0",
},
},
},
}
_, body, err := parseResponse(payload)
if err != nil {
return "", err
}
videoData := gjson.Get(string(body), "0.data.clip")
streamerName := videoData.Get("broadcaster.login").String()
return streamerName, nil
}
func GetClipMetadata(clipSlug string) (structs.Video, error) {
streamerName, err := GetClipUsername(clipSlug)
if err != nil {
return structs.Video{}, err
}
payload := []TwitchPayload{ payload := []TwitchPayload{
{ {
"operationName": "ClipMetadata", "operationName": "ClipMetadata",
@ -56,6 +88,7 @@ func GetClipMetadata(clipSlug string, streamerName string) (structs.Video, error
videoData := gjson.Get(string(body), "0.data.clip") videoData := gjson.Get(string(body), "0.data.clip")
return structs.Video{ return structs.Video{
Type: "clip",
Title: videoData.Get("title").String(), Title: videoData.Get("title").String(),
Preview: extractor.ProxyUrl(videoData.Get("previewThumbnailURL").String()), Preview: extractor.ProxyUrl(videoData.Get("previewThumbnailURL").String()),
Duration: int(videoData.Get("lengthSeconds").Int()), Duration: int(videoData.Get("lengthSeconds").Int()),

View file

@ -21,10 +21,9 @@ func Routes(route *gin.Engine) {
context.JSON(200, extractor.FormatMessage(data, true)) context.JSON(200, extractor.FormatMessage(data, true))
}) })
clips.GET("/:streamerName/:slug", func(context *gin.Context) { clips.GET("/:slug", func(context *gin.Context) {
slug := context.Param("slug") slug := context.Param("slug")
streamerName := context.Param("streamerName") data, err := twitch.GetClipMetadata(slug)
data, err := twitch.GetClipMetadata(slug, streamerName)
if err != nil { if err != nil {
context.Error(err) context.Error(err)
return return