/
suggestion.go
92 lines (78 loc) · 2 KB
/
suggestion.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package finder
import (
"encoding/json"
"errors"
"fmt"
"strings"
"github.com/ymzuiku/hit"
)
const (
// Suggestion kind
SuggestionBaidu = "baidu"
// Url
BaiduSuggestionUrl = "https://m.baidu.com/su?type=3&ie=utf-8&json=1&wd=${keyword}"
// Suggest Url
DefaultBaiduSuggestionUrlFmt = "http://m.baidu.com/from=${from}/s?word=${keyword}&bd_page_type=1"
// Config
SuggestionHttpTimeout = 60
)
/////////////////////////////
// Suggestion Result
/////////////////////////////
type SuggestionResult struct {
Keyword string
Weight int
SuggestUrl string
Query string
}
func (wr *SuggestionResult) Json() string {
body, _ := json.Marshal(wr)
return string(body)
}
/////////////////////////////
// Suggestion Finder
/////////////////////////////
type SuggestionFinder struct {
Provider string
From string
TTL int
SuggestUrl string
}
func (suf *SuggestionFinder) Find(keyword string, from string, suggestUrl string) ([]*SuggestionResult, error) {
switch suf.Provider {
case SuggestionBaidu:
return BaiduSuggestionFind(suf, keyword, from, suggestUrl)
default:
break
}
return nil, errors.New(fmt.Sprintf("not found %s provider", suf.Provider))
}
func (suf *SuggestionFinder) GetSuggestUrl(keyword string, from string, suggestUrl string) string {
from = hit.If(from, from, suf.From).(string)
suggestUrl = hit.If(suggestUrl, suggestUrl, suf.SuggestUrl).(string)
switch suf.Provider {
case SuggestionBaidu:
suggestUrl = DefaultBaiduSuggestionUrlFmt
break
default:
break
}
// replace
suggestUrl = strings.ReplaceAll(suggestUrl, "${from}", from)
suggestUrl = strings.ReplaceAll(suggestUrl, "${keyword}", keyword)
return suggestUrl
}
func (suf *SuggestionFinder) Close() {
// nothing
}
func (suf *SuggestionFinder) Version() string {
return VERSION
}
func NewSuggestionFinder(provider string, from string, suggestUrl string, ttl int) *SuggestionFinder {
return &SuggestionFinder{
Provider: provider,
From: from,
TTL: ttl,
SuggestUrl: suggestUrl,
}
}