wip, revert changes
This commit is contained in:
parent
7d1d2cba67
commit
6885983576
7 changed files with 103 additions and 144 deletions
|
@ -1,3 +1,4 @@
|
|||
// text-duckduckgo.go
|
||||
package main
|
||||
|
||||
import (
|
||||
|
@ -6,66 +7,15 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
|
||||
const (
|
||||
resultsPerPage = 10
|
||||
)
|
||||
|
||||
func getVQD(query string) (string, error) {
|
||||
queryURL := fmt.Sprintf("https://duckduckgo.com/?q=%s", url.QueryEscape(query))
|
||||
resp, err := http.Get(queryURL)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to fetch vqd: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("loading HTML document: %v", err)
|
||||
}
|
||||
|
||||
var vqd string
|
||||
doc.Find("script").Each(func(i int, s *goquery.Selection) {
|
||||
text := s.Text()
|
||||
if strings.Contains(text, "vqd=\"") {
|
||||
start := strings.Index(text, "vqd=\"") + 5
|
||||
end := strings.Index(text[start:], "\"")
|
||||
vqd = text[start : start+end]
|
||||
}
|
||||
})
|
||||
|
||||
if vqd == "" {
|
||||
return "", fmt.Errorf("vqd not found")
|
||||
}
|
||||
|
||||
return vqd, nil
|
||||
}
|
||||
|
||||
func PerformDuckDuckGoTextSearch(query, safe, lang string, page int) ([]TextSearchResult, error) {
|
||||
func PerformDuckDuckGoTextSearch(query, safe, lang string) ([]TextSearchResult, error) {
|
||||
var results []TextSearchResult
|
||||
searchURL := fmt.Sprintf("https://duckduckgo.com/html/?q=%s", url.QueryEscape(query))
|
||||
|
||||
client := &http.Client{Timeout: 10 * time.Second}
|
||||
|
||||
vqd, err := getVQD(query)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get vqd: %v", err)
|
||||
}
|
||||
|
||||
searchURL := fmt.Sprintf("https://duckduckgo.com/html/?q=%s&kl=%s&safe=%s&s=%d&vqd=%s",
|
||||
url.QueryEscape(query), lang, safe, (page-1)*resultsPerPage, vqd)
|
||||
|
||||
req, err := http.NewRequest("GET", searchURL, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create request: %v", err)
|
||||
}
|
||||
|
||||
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36")
|
||||
|
||||
resp, err := client.Do(req)
|
||||
resp, err := http.Get(searchURL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("making request: %v", err)
|
||||
}
|
||||
|
@ -94,34 +44,15 @@ func PerformDuckDuckGoTextSearch(query, safe, lang string, page int) ([]TextSear
|
|||
URL: uddg,
|
||||
Header: strings.TrimSpace(header),
|
||||
Description: strings.TrimSpace(description),
|
||||
Source: "DuckDuckGo",
|
||||
}
|
||||
results = append(results, result)
|
||||
if debugMode {
|
||||
log.Printf("Processed DuckDuckGo result: %+v\n", result)
|
||||
}
|
||||
} else {
|
||||
if debugMode {
|
||||
log.Printf("Missing 'uddg' parameter in URL: %s\n", rawURL)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if debugMode {
|
||||
log.Printf("Error parsing URL: %s, error: %v\n", rawURL, err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if debugMode {
|
||||
log.Printf("Missing 'href' attribute in result anchor tag\n")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if len(results) == 0 {
|
||||
if debugMode {
|
||||
log.Println("No results found from DuckDuckGo")
|
||||
}
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue