MCPcopy Index your code
hub / github.com/FloatTech/ZeroBot-Plugin / geiAPIdata

Function geiAPIdata

plugin/handou/baiAPI.go:104–169  ·  view source on GitHub ↗
(s string)

Source from the content-addressed store, hash-verified

102}
103
104func geiAPIdata(s string) (*idiomJSON, error) {
105 url := "https://hanyuapp.baidu.com/dictapp/swan/termdetail?wd=" + url.QueryEscape(s) + "&client=pc&source_tag=2&lesson_from=xiaodu"
106 logrus.Debugln(url)
107 data, err := web.GetData(url)
108 if err != nil {
109 return nil, err
110 }
111
112 var apiData baiduAPIData
113 err = json.Unmarshal(data, &apiData)
114 if err != nil {
115 return nil, err
116 }
117 if apiData.Data.Name == "" {
118 return nil, errors.New("未找到该成语")
119 }
120 derivation := ""
121 for _, v := range apiData.Data.ChuChu {
122 if derivation != "" {
123 derivation += "\n"
124 }
125 derivation += v.Dynasty + "·" + v.Author + " " + v.Source + ":" + v.CiteOriginalText
126 }
127
128 explanation := apiData.Data.DefinitionInfo.Definition + apiData.Data.DefinitionInfo.ModernDefinition
129 if derivation == "" && explanation == "" {
130 return nil, errors.New("无法获取成语词源和解释")
131 }
132 synonyms := make([]string, len(apiData.Data.Synonyms))
133 for i, synonym := range apiData.Data.Synonyms {
134 synonyms[i] = synonym.Name
135 }
136 for i, synonym := range apiData.Data.Synonym {
137 if !slices.Contains(synonyms, synonym) {
138 synonyms[i] = synonym
139 }
140 }
141 liju := ""
142 if len(apiData.Data.Liju) > 0 {
143 liju = apiData.Data.Liju[0].Name
144 }
145
146 // 生成字符切片
147 chars := make([]string, 0, len(s))
148 for _, r := range s {
149 chars = append(chars, string(r))
150 }
151 // 分割拼音
152 pinyinSlice := strings.Split(apiData.Data.Pinyin, " ")
153 if len(pinyinSlice) != len(chars) {
154 pinyinSlice = strings.Split(apiData.Data.Definition[0].Pinyin, " ")
155 }
156
157 newIdiom := idiomJSON{
158 Word: apiData.Data.Name,
159 Chars: chars,
160 Pinyin: pinyinSlice,
161 Baobian: apiData.Data.Baobian,

Callers 1

newHandouGameFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected