diff --git a/Makefile b/Makefile index 62586b9..354b4f4 100644 --- a/Makefile +++ b/Makefile @@ -33,4 +33,4 @@ install: dep-ensure @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOCMD) build -a -installsuffix cgo -ldflags="-w -s" -o ./bin/$(PROJECT) ./src/$(PROJECT) run: - @GOPATH=$(GOPATH) $(GOCMD) run $(PROJECT_PATH)/main.go \ No newline at end of file + @GOPATH=$(GOPATH) $(GOCMD) run $(PROJECT_PATH)/main.go $(WORD) \ No newline at end of file diff --git a/src/sinonimos/Gopkg.lock b/src/sinonimos/Gopkg.lock index 7caadfb..ade587d 100644 --- a/src/sinonimos/Gopkg.lock +++ b/src/sinonimos/Gopkg.lock @@ -18,9 +18,49 @@ revision = "2f22195f169da29d54624afd9eb83ada5c9e4ee9" version = "v1.0.4" +[[projects]] + branch = "master" + digest = "1:b2870406be2bcadb03d4d9e90e99ec171aac87d9fa7fe15efffec3224cae9c5c" + name = "github.com/yhat/scrape" + packages = ["."] + pruneopts = "UT" + revision = "24b7890b0945459dbf91743e4d2ac5d75a51fee2" + +[[projects]] + branch = "master" + digest = "1:1a1ecfa7b54ca3f7a0115ab5c578d7d6a5d8b605839c549e80260468c42f8be7" + name = "golang.org/x/net" + packages = [ + "html", + "html/atom", + ] + pruneopts = "UT" + revision = "9b4f9f5ad5197c79fd623a3638e70d8b26cef344" + +[[projects]] + digest = "1:e2e7f5211c3327ff52e02773e4fd477842b2fed07ead33ec342970de162610ac" + name = "golang.org/x/text" + packages = [ + "encoding", + "encoding/charmap", + "encoding/internal", + "encoding/internal/identifier", + "internal/gen", + "transform", + "unicode/cldr", + ] + pruneopts = "UT" + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" + [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = ["github.com/jawher/mow.cli"] + input-imports = [ + "github.com/jawher/mow.cli", + "github.com/yhat/scrape", + "golang.org/x/net/html", + "golang.org/x/text/encoding/charmap", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/src/sinonimos/main.go b/src/sinonimos/main.go index 163c69a..19f0939 100644 --- a/src/sinonimos/main.go +++ b/src/sinonimos/main.go @@ -2,8 +2,13 @@ package main import ( "fmt" + "net/http" "os" + "github.com/yhat/scrape" + "golang.org/x/net/html" + "golang.org/x/text/encoding/charmap" + cli "github.com/jawher/mow.cli" ) @@ -13,12 +18,49 @@ func main() { app.Spec = "PALAVRA" var ( - word = app.StringsArg("PALAVRA", nil, "Palavra para encontrar sinônimos") + word = app.StringArg("PALAVRA", "", "Palavra para encontrar sinônimos") ) app.Action = func() { - fmt.Printf("Buscando sinônimos para %s\n", *word) + fmt.Printf("Buscando sinônimos para \"%s\":\n", *word) + err := find(*word) + if err != nil { + fmt.Printf("... falhou (%s)\n", err.Error()) + } } app.Run(os.Args) } + +func find(word string) error { + resp, err := http.Get(fmt.Sprintf("https://www.sinonimos.com.br/%s/", word)) + if err != nil { + return err + } + + body := charmap.ISO8859_1.NewDecoder().Reader(resp.Body) + root, err := html.Parse(body) + if err != nil { + return err + } + + meaningSections := scrape.FindAll(root, scrape.ByClass("s-wrapper")) + for _, meaningSection := range meaningSections { + if meaning, ok := scrape.Find(meaningSection, scrape.ByClass("sentido")); ok { + fmt.Printf("\n> %s\n", scrape.Text(meaning)) + + synonyms := scrape.FindAll(meaningSection, scrape.ByClass("sinonimo")) + fmt.Print(" ") + for i, synonym := range synonyms { + fmt.Printf("%s", scrape.Text(synonym)) + if i == (len(synonyms) - 1) { + fmt.Print("\n") + } else { + fmt.Print(", ") + } + } + } + } + + return nil +}