50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package importers
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.mills.io/prologic/vimeodl"
|
|
)
|
|
|
|
type VimeoImporter struct{}
|
|
|
|
func (i *VimeoImporter) GetVideoInfo(url string) (videoInfo VideoInfo, err error) {
|
|
if strings.HasPrefix(strings.ToLower(url), "vimeo:") {
|
|
url = strings.TrimSpace(strings.SplitN(url, ":", 2)[1])
|
|
}
|
|
|
|
if !strings.HasPrefix(url, "http") {
|
|
url = "https://player.vimeo.com/video/" + url
|
|
}
|
|
|
|
if !strings.HasPrefix(url, "https://player.vimeo.com/video/") {
|
|
playerURL, err := vimeodl.GetPlayerURL(url)
|
|
if err != nil {
|
|
err := fmt.Errorf("error finding player url: %w", err)
|
|
return VideoInfo{}, err
|
|
}
|
|
url = playerURL
|
|
}
|
|
|
|
if !strings.HasSuffix(url, "/") {
|
|
url += "/"
|
|
}
|
|
|
|
url += "config"
|
|
|
|
config, err := vimeodl.GetVideoConfig(url)
|
|
if err != nil {
|
|
err := fmt.Errorf("error retrieving video config: %w", err)
|
|
return VideoInfo{}, err
|
|
}
|
|
|
|
videoInfo.VideoURL = vimeodl.PickBestVideo(config)
|
|
|
|
videoInfo.ThumbnailURL = vimeodl.PickBestThumbnail(config)
|
|
|
|
videoInfo.ID = fmt.Sprintf("%d", config.Video.Id)
|
|
videoInfo.Title = config.Video.Title
|
|
|
|
return
|
|
}
|