From 024a7844129242d8977240852ff046c1552d33f4 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 20 Feb 2017 12:19:59 +0000 Subject: [PATCH] Fix data structure --- .../matrix-org/go-neb/services/imgur/imgur.go | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/github.com/matrix-org/go-neb/services/imgur/imgur.go b/src/github.com/matrix-org/go-neb/services/imgur/imgur.go index 4c8cb60..cbff5aa 100644 --- a/src/github.com/matrix-org/go-neb/services/imgur/imgur.go +++ b/src/github.com/matrix-org/go-neb/services/imgur/imgur.go @@ -87,9 +87,9 @@ type imgurGalleryAlbum struct { } type imgurSearchResponse struct { - Data json.RawMessage `json:"data"` - Success bool `json:"success"` // Request completed successfully - Status int `json:"status"` // HTTP response code + Data []json.RawMessage `json:"data"` + Success bool `json:"success"` // Request completed successfully + Status int `json:"status"` // HTTP response code } // Service contains the Config fields for the Imgur service. @@ -159,9 +159,10 @@ func (s *Service) cmdImgurImgSearch(client *gomatrix.Client, roomID, userID stri } // FIXME -- Sometimes upload fails with a cryptic error - "msg=Upload request failed code=400" + log.Printf("Uploading image at: %s", imgURL) resUpload, err := client.UploadLink(imgURL) if err != nil { - return nil, fmt.Errorf("Failed to upload Imgur image to matrix: %s", err.Error()) + return nil, fmt.Errorf("Failed to upload Imgur image (%s) to matrix: %s", imgURL, err.Error()) } return gomatrix.ImageMessage{ @@ -191,11 +192,12 @@ func (s *Service) cmdImgurImgSearch(client *gomatrix.Client, roomID, userID stri func (s *Service) text2imgImgur(query string) (*imgurGalleryImage, *imgurGalleryAlbum, error) { log.Info("Searching Imgur for an image of a ", query) - var base = "https://api.imgur.com/3/gallery/search/" + query = url.QueryEscape(query) + var base = "https://api.imgur.com/3/gallery/search" var sort = "time" // time | viral | top var window = "all" // day | week | month | year | all var page = 1 - var urlString = fmt.Sprintf("%s/%s/%s/%d", base, sort, window, page) + var urlString = fmt.Sprintf("%s/%s/%s/%d?q=%s", base, sort, window, page, query) u, err := url.Parse(urlString) if err != nil { @@ -207,7 +209,6 @@ func (s *Service) text2imgImgur(query string) (*imgurGalleryImage, *imgurGallery return nil, nil, err } - log.Printf("Client ID: %s", s.ClientID) req.Header.Add("Authorization", "Client-ID "+s.ClientID) res, err := httpClient.Do(req) if res != nil { @@ -225,28 +226,26 @@ func (s *Service) text2imgImgur(query string) (*imgurGalleryImage, *imgurGallery return nil, nil, fmt.Errorf("No images found - %s", err.Error()) } - // Check if we have an image or a gallery - var dataInt map[string]interface{} - if err := json.Unmarshal(searchResults.Data, &dataInt); err != nil || searchResults.Data == nil { - return nil, nil, fmt.Errorf("Failed to parse response data - %s", err.Error()) + log.Printf("%d results were returned from Imgur", len(searchResults.Data)) + for i := 0; i < len(searchResults.Data); i++ { + // Return the first image result + var image imgurGalleryImage + if err := json.Unmarshal(searchResults.Data[i], &image); err == nil { + return &image, nil, nil + } } // Return an album - if dataInt["is_album"].(bool) { - var album imgurGalleryAlbum - if err := json.Unmarshal(searchResults.Data, &album); err != nil { - return nil, nil, fmt.Errorf("Failed to parse album data - %s", err.Error()) - } + // if dataInt["is_album"].(bool) { + // var album imgurGalleryAlbum + // if err := json.Unmarshal(searchResults.Data, &album); err != nil { + // return nil, nil, fmt.Errorf("Failed to parse album data - %s", err.Error()) + // } + // + // return nil, &album, nil + // } - return nil, &album, nil - } - - // Return an image - var image imgurGalleryImage - if err := json.Unmarshal(searchResults.Data, &image); err != nil { - return nil, nil, fmt.Errorf("Failed to parse image data - %s", err.Error()) - } - return &image, nil, nil + return nil, nil, fmt.Errorf("No images found") } // response2String returns a string representation of an HTTP response body