diff --git a/instagram/instagram.go b/instagram/instagram.go index e88ec6e..fd94f48 100644 --- a/instagram/instagram.go +++ b/instagram/instagram.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "errors" "io" "net/http" "net/url" @@ -10,7 +11,8 @@ import ( type QueryResponse struct { Data struct { - ShortcodeMedia struct { + ShortcodeMedia *struct { + Type string `json:"__typename"` VideoUrl string `json:"video_url"` Owner struct { Username string `json:"username"` @@ -34,10 +36,14 @@ type Response struct { } func Lookup(urlSrc string) (Response, error) { + urlSrcParsed, err := url.Parse(urlSrc) + if err != nil { + return Response{}, err + } url, _ := url.Parse("https://www.instagram.com/graphql/query/?query_hash=b3055c01b4b222b8a47dc12b090e4e64") query := url.Query() - query.Add("variables", "{\"shortcode\":\""+path.Base(urlSrc)+"\",\"child_comment_count\":3,\"fetch_comment_count\":40,\"parent_comment_count\":24,\"has_threaded_comments\":true}") + query.Add("variables", "{\"shortcode\":\""+path.Base(urlSrcParsed.Path)+"\",\"child_comment_count\":3,\"fetch_comment_count\":40,\"parent_comment_count\":24,\"has_threaded_comments\":true}") url.RawQuery = query.Encode() resp, err := http.Get(url.String()) @@ -52,6 +58,12 @@ func Lookup(urlSrc string) (Response, error) { if err != nil { return Response{}, err } + if response.Data.ShortcodeMedia == nil { + return Response{}, errors.New("No encontré el video.") + } + if response.Data.ShortcodeMedia.Type != "GraphVideo" { + return Response{}, errors.New("Esto no es un video.") + } return Response{ VideoUrl: response.Data.ShortcodeMedia.VideoUrl, Author: response.Data.ShortcodeMedia.Owner.Username,