У меня есть функция для вызова API Twitter. Если вход содержит ключевое слово с не-ascii символом (q=éxito
), API отвечает: 401
:
https://api.twitter.com/1.1/search/tweets.json?q=éxito&count=100&result_type=recent&include_entities=true
, но с символами all-ascii в URL, отвечает ж / ОК:
https://api.twitter.com/1.1/search/tweets.json?q=teampixel&count=100&result_type=recent&include_entities=true
func GetJson(url string, target interface{}) error {
e := godotenv.Load()
if e != nil {
fmt.Print(e)
}
println(url)
config := oauth1.NewConfig(os.Getenv("API_KEY"), os.Getenv("API_SECRET_KEY"))
token := oauth1.NewToken(os.Getenv("ACCESS_TOKEN"), os.Getenv("ACCESS_TOKEN_SECRET"))
// httpClient will automatically authorize http.Request's
httpClient := config.Client(oauth1.NoContext, token)
resp, e := httpClient.Get(url)
const errorDelay = 30
if e != nil {
fmt.Println("Connection Issue")
time.Sleep(errorDelay * time.Second)
return GetJson(url, target)
}
defer resp.Body.Close()
if resp.StatusCode == 429 {
fmt.Println("\nThrotteling")
time.Sleep(errorDelay * time.Second)
return GetJson(url, target)
}
if resp.StatusCode == 404 {
fmt.Println("Could not find", url)
return errors.New("not found")
}
fmt.Printf("Results: %v\n", resp.StatusCode)
return json.NewDecoder(resp.Body).Decode(target)
}