instagram: Hacer más resiliente

This commit is contained in:
Cat /dev/Nulo 2023-01-02 23:45:13 -03:00
parent 1e18e5100d
commit e11c967c29

View file

@ -2,6 +2,7 @@ package main
import ( import (
"encoding/json" "encoding/json"
"errors"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
@ -10,7 +11,8 @@ import (
type QueryResponse struct { type QueryResponse struct {
Data struct { Data struct {
ShortcodeMedia struct { ShortcodeMedia *struct {
Type string `json:"__typename"`
VideoUrl string `json:"video_url"` VideoUrl string `json:"video_url"`
Owner struct { Owner struct {
Username string `json:"username"` Username string `json:"username"`
@ -34,10 +36,14 @@ type Response struct {
} }
func Lookup(urlSrc string) (Response, error) { 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") url, _ := url.Parse("https://www.instagram.com/graphql/query/?query_hash=b3055c01b4b222b8a47dc12b090e4e64")
query := url.Query() 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() url.RawQuery = query.Encode()
resp, err := http.Get(url.String()) resp, err := http.Get(url.String())
@ -52,6 +58,12 @@ func Lookup(urlSrc string) (Response, error) {
if err != nil { if err != nil {
return Response{}, err 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{ return Response{
VideoUrl: response.Data.ShortcodeMedia.VideoUrl, VideoUrl: response.Data.ShortcodeMedia.VideoUrl,
Author: response.Data.ShortcodeMedia.Owner.Username, Author: response.Data.ShortcodeMedia.Owner.Username,