diff options
Diffstat (limited to 'client.go')
| -rw-r--r-- | client.go | 44 |
1 files changed, 24 insertions, 20 deletions
@@ -70,30 +70,30 @@ func New(cookies []*http.Cookie) (cl *Client, err error) { // // CariDefinisi dari kata. // -func (cl Client) CariDefinisi(kata string) (defKata []*DefinisiKata, err error) { - entriURL := baseURL + entriPath + kata +func (cl Client) CariDefinisi(in string) (kata *Kata, err error) { + entriURL := baseURL + entriPath + in res, err := cl.httpc.Get(entriURL) if err != nil { - return nil, fmt.Errorf("Cari %q: %w", kata, err) + return nil, fmt.Errorf("CariDefinisi %q: %w", in, err) } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { - return nil, fmt.Errorf("Cari %q: %w", kata, err) + return nil, fmt.Errorf("Cari %q: %w", in, err) } if debug.Value >= 2 { fmt.Printf(">>> HTML body for %s:\n%s", entriURL, body) } - defKata, err = parseHTMLEntri(body) + kata, err = parseHTMLEntri(body) if err != nil { - return nil, fmt.Errorf("Cari %q: %w", kata, err) + return nil, fmt.Errorf("CariDefinisi %q: %w", in, err) } - return defKata, nil + return kata, nil } // @@ -208,12 +208,13 @@ func (cl *Client) SetCookies(cookies []*http.Cookie) { // parseHTMLEntri parse HTML body from "/entri/<kata>" page to find the // definition of the word. // -func parseHTMLEntri(htmlBody []byte) (daftarDefinisi []*DefinisiKata, err error) { +func parseHTMLEntri(htmlBody []byte) (kata *Kata, err error) { node, err := html.Parse(bytes.NewReader(htmlBody)) if err != nil { return nil, err } + kata = new(Kata) var prev *html.Node for { @@ -236,24 +237,27 @@ func parseHTMLEntri(htmlBody []byte) (daftarDefinisi []*DefinisiKata, err error) } switch node.Data { + case tagNameHeader2: + kata.parseKataDasar(node) + case tagNameOrderedList, tagNameUnorderedList: + li := getFirstChild(node) + for li != nil { + defKata := parseDefinisiKata(li) + if defKata == nil { + break + } + kata.Definisi = append(kata.Definisi, defKata) + li = getNextSibling(li) + } + node = node.NextSibling + default: continue } - - li := getFirstChild(node) - for li != nil { - defKata := parseDefinisiKata(li) - if defKata == nil { - break - } - daftarDefinisi = append(daftarDefinisi, defKata) - li = getNextSibling(li) - } - node = node.NextSibling } - return daftarDefinisi, nil + return kata, nil } func (cl Client) parseHTMLKataDasar(htmlBody []byte) (kataDasar daftarKata, err error) { |
