diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-04-05 21:37:06 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-04-05 21:37:06 +0700 |
| commit | 5ea27bffa9020ddcdc62774a29e399e76ae5997c (patch) | |
| tree | 9d1619460c2cb3d32cb014dd0e9b477344f8e843 | |
| parent | 79649636835eba0ea309c1208c1056b3e98d244a (diff) | |
| download | kamusku-5ea27bffa9020ddcdc62774a29e399e76ae5997c.tar.xz | |
all: simplify iterating HTML tree with NodeIterator
| -rw-r--r-- | direct_client.go | 39 | ||||
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | go.sum | 4 | ||||
| -rw-r--r-- | kata.go | 26 |
4 files changed, 11 insertions, 60 deletions
diff --git a/direct_client.go b/direct_client.go index 8fa19b9..485961d 100644 --- a/direct_client.go +++ b/direct_client.go @@ -224,29 +224,14 @@ func (cl *directClient) setCookies(cookies []*http.Cookie) { func (cl *directClient) parseHTMLKataDasar(htmlBody []byte) ( kataDasar DaftarKata, err error, ) { - node, err := html.Parse(bytes.NewReader(htmlBody)) + iter, err := html.Parse(bytes.NewReader(htmlBody)) if err != nil { return nil, err } kataDasar = make(DaftarKata) - prev := html.NewNode(nil) - - for { - switch { - case node.FirstChild != nil && node.FirstChild != prev.Node && - node.LastChild != prev.Node: - node.Node = node.FirstChild - case node.NextSibling != nil: - node.Node = node.NextSibling - default: - prev.Node = node.Node - node.Node = node.Parent - } - if node.Node == nil { - break - } + for node := iter.Next(); node != nil; node = iter.Next() { if !node.IsElement() { continue } @@ -270,28 +255,12 @@ func (cl *directClient) parseHTMLKataDasar(htmlBody []byte) ( func (cl *directClient) parseHTMLLogin(htmlBody []byte) ( token string, err error, ) { - node, err := html.Parse(bytes.NewReader(htmlBody)) + iter, err := html.Parse(bytes.NewReader(htmlBody)) if err != nil { return "", err } - prev := html.NewNode(nil) - - for { - switch { - case node.FirstChild != nil && node.FirstChild != prev.Node && - node.LastChild != prev.Node: - node.Node = node.FirstChild - case node.NextSibling != nil: - node.Node = node.NextSibling - default: - prev.Node = node.Node - node.Node = node.Parent - } - if node.Node == nil { - break - } - + for node := iter.Next(); node != nil; node = iter.Next() { if !node.IsElement() { continue } @@ -3,7 +3,7 @@ module github.com/shuLhan/kbbi go 1.13 require ( - github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa + github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e ) @@ -1,5 +1,5 @@ -github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa h1:PUSymJV6kPNjsziMhdHGjw2trQHknJPq29Is6MDYGcs= -github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa/go.mod h1:mpa0ub5qmuko/muUlOROOqLCSHKU76GzuAR/sUaSwRo= +github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64 h1:1UTOAeD7Jlon7/hJBLXDDxKjVNFOVrCAY1gKx7NyILg= +github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64/go.mod h1:mpa0ub5qmuko/muUlOROOqLCSHKU76GzuAR/sUaSwRo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -31,28 +31,12 @@ type Kata struct { // definition of the word. // func (kata *Kata) parseHTMLEntri(htmlBody []byte) (err error) { - node, err := html.Parse(bytes.NewReader(htmlBody)) + iter, err := html.Parse(bytes.NewReader(htmlBody)) if err != nil { return err } - prev := html.NewNode(nil) - - for { - switch { - case node.FirstChild != nil && node.FirstChild != prev.Node && - node.LastChild != prev.Node: - node.Node = node.FirstChild - case node.NextSibling != nil: - node.Node = node.NextSibling - default: - prev.Node = node.Node - node.Node = node.Parent - } - if node.Node == nil { - break - } - + for node := iter.Next(); node != nil; node = iter.Next() { if !node.IsElement() { continue } @@ -71,10 +55,8 @@ func (kata *Kata) parseHTMLEntri(htmlBody []byte) (err error) { kata.Definisi = append(kata.Definisi, defKata) li = li.GetNextSibling() } - node.Node = node.NextSibling - - default: - continue + next := node.GetNextSibling() + iter.SetNext(next) } } |
