From 33ba48c96842bda63eb493ca53f1b8c076c1e0ca Mon Sep 17 00:00:00 2001 From: flygrounder Date: Thu, 27 Feb 2020 10:41:03 +0300 Subject: [PATCH] Added error handling if SCG returns non-200 HTTP status code --- cardsinfo/names.go | 4 +++- cardsinfo/scgprices.go | 25 ++++++++++++++++++++++--- vk/message.go | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/cardsinfo/names.go b/cardsinfo/names.go index e44d9b6..19faec5 100644 --- a/cardsinfo/names.go +++ b/cardsinfo/names.go @@ -37,7 +37,9 @@ func GetCardByUrl(path string) string { if err != nil { return "" } - defer response.Body.Close() + defer func() { + _ = response.Body.Close() + }() data, err := ioutil.ReadAll(response.Body) if err != nil { return "" diff --git a/cardsinfo/scgprices.go b/cardsinfo/scgprices.go index 7a97b88..cb1b502 100644 --- a/cardsinfo/scgprices.go +++ b/cardsinfo/scgprices.go @@ -2,8 +2,10 @@ package cardsinfo import ( "encoding/json" + "errors" "github.com/antchfx/htmlquery" "golang.org/x/net/html" + "golang.org/x/net/html/charset" "io/ioutil" "net/http" "strings" @@ -16,13 +18,31 @@ const MaxCards = 4 func GetSCGPrices(name string) ([]CardPrice, error) { preprocessedName := preprocessNameForSearch(name) url := getSCGUrl(preprocessedName) - doc, err := htmlquery.LoadURL(url) + doc, err := getScgHTML(url) if err != nil { return nil, err } return fetchPrices(doc) } +func getScgHTML(url string) (*html.Node, error) { + response, err := http.Get(url) + defer func() { + _ = response.Body.Close() + }() + + if response.StatusCode != http.StatusOK { + return nil, errors.New("not ok status") + } + + r, err := charset.NewReader(response.Body, response.Header.Get("Content-Type")) + if err != nil { + return nil, err + } + + return html.Parse(r) +} + func preprocessNameForSearch(name string) string { return strings.Split(name, "|")[0] } @@ -119,8 +139,7 @@ func getPriceById(id string) float64 { } func getSCGUrl(name string) string { - words := strings.Split(name, " ") - scgName := strings.Join(words, "+") + scgName := strings.Replace(name, " ", "+", -1) url := Scgurl + scgName return url } diff --git a/vk/message.go b/vk/message.go index 26f914e..d3c21e5 100644 --- a/vk/message.go +++ b/vk/message.go @@ -20,7 +20,7 @@ func Message(userId int64, message string) { "peer_id=" + strconv.FormatInt(userId, 10), "message=" + url.QueryEscape(message), "v=5.95", - "random_id=" + strconv.FormatInt(int64(randomId), 10), + "random_id=" + strconv.FormatInt(randomId, 10), } paramString := strings.Join(params, "&") resp, err := http.Get(SendMessageUrl + "?" + paramString)