diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-03-29 00:42:35 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-03-29 00:42:35 +0700 |
| commit | cea97a6f997afccfb4eca3a7f1672ea5a8da8a8c (patch) | |
| tree | 8fc96c40d09d9bc2fed9ab86afaee39b6ccf7d0c /client.go | |
| parent | 60042be915d8aae0ace76aefa054fde9969a98d1 (diff) | |
| download | kamusku-cea97a6f997afccfb4eca3a7f1672ea5a8da8a8c.tar.xz | |
kbbi: urai kata dasar dari hasil pencarian definisi kata
Kata dasar dari sebuah kata dalam HTML berada dalam elemen
"h2 > span[class="rootword"]"
Jika field Dasar kosong berarti kata tersebut adalah kata dasar.
Perubahan ini mengubah struktur balikan untuk dapat menyimpan kata dasar.
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) { |
