coai/addition/web/duckduckgo.go
2023-12-03 17:43:21 +08:00

41 lines
880 B
Go

package web
import (
"chat/utils"
"fmt"
"github.com/spf13/viper"
"net/url"
"strings"
)
type DDGResponse struct {
Results []struct {
Body string `json:"body"`
Href string `json:"href"`
Title string `json:"title"`
} `json:"results"`
}
func formatResponse(data *DDGResponse) string {
res := make([]string, 0)
for _, item := range data.Results {
if item.Body == "" || item.Href == "" || item.Title == "" {
continue
}
res = append(res, fmt.Sprintf("%s (%s): %s", item.Title, item.Href, item.Body))
}
return strings.Join(res, "\n")
}
func CallDuckDuckGoAPI(query string) *DDGResponse {
query = url.QueryEscape(query)
data, err := utils.Get(fmt.Sprintf("%s/search?q=%s&max_results=%d", viper.GetString("system.ddg"), query, viper.GetInt("system.ddg_max_results")), nil)
if err != nil {
return nil
}
return utils.MapToStruct[DDGResponse](data)
}