--- a/search.go Thu Sep 06 11:28:42 2018 +0200
+++ b/search.go Thu Sep 06 11:43:44 2018 +0200
@@ -7,21 +7,15 @@
package madon
import (
+ "strings"
+
"github.com/sendgrid/rest"
)
// Search search for contents (accounts or statuses) and returns a Results
-func (mc *Client) Search(query string, resolve bool) (*Results, error) {
- if query == "" {
- return nil, ErrInvalidParameter
- }
-
- params := make(apiCallParams)
- params["q"] = query
- if resolve {
- params["resolve"] = "true"
- }
-
+func (mc *Client) searchV1(params apiCallParams) (*Results, error) {
+ // We use a custom structure with shadowed Hashtags field,
+ // since the v1 version only returns strings.
var resultsV1 struct {
Results
Hashtags []string `json:"hashtags"`
@@ -39,3 +33,36 @@
return &results, nil
}
+
+func (mc *Client) searchV2(params apiCallParams) (*Results, error) {
+ var results Results
+ if err := mc.apiCall("v2/"+"search", rest.Get, params, nil, nil, &results); err != nil {
+ return nil, err
+ }
+
+ return &results, nil
+}
+
+// Search search for contents (accounts or statuses) and returns a Results
+func (mc *Client) Search(query string, resolve bool) (*Results, error) {
+ if query == "" {
+ return nil, ErrInvalidParameter
+ }
+
+ // The parameters are the same in both v1 & v2 API versions
+ params := make(apiCallParams)
+ params["q"] = query
+ if resolve {
+ params["resolve"] = "true"
+ }
+
+ r, err := mc.searchV2(params)
+
+ // This is not a very beautiful way to check the error cause, I admit.
+ if err != nil && strings.Contains(err.Error(), "bad server status code (404)") {
+ // Fall back to v1 API endpoint
+ r, err = mc.searchV1(params)
+ }
+
+ return r, err
+}