aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-03-29 00:42:35 +0700
committerShulhan <m.shulhan@gmail.com>2020-03-29 00:42:35 +0700
commitcea97a6f997afccfb4eca3a7f1672ea5a8da8a8c (patch)
tree8fc96c40d09d9bc2fed9ab86afaee39b6ccf7d0c /client.go
parent60042be915d8aae0ace76aefa054fde9969a98d1 (diff)
downloadkamusku-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.go44
1 files changed, 24 insertions, 20 deletions
diff --git a/client.go b/client.go
index 9a89e03..3301ff1 100644
--- a/client.go
+++ b/client.go
@@ -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) {