aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
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) {