The result extraction logic in sites/duckduckgo/duckduckgo.go:99-131 (Search()) is nearly identical to sites/duckduckgo/page.go:24-54 (GetResults()). Both iterate over article[id^="r1-"] elements and extract URL, title, and description with the same selectors.
Search() should use searchPage.GetResults() internally instead of duplicating the extraction logic.
Fix
Refactor Search() to use OpenSearch() + GetResults():
func(cConfig)Search(ctxcontext.Context,bextractor.Browser,querystring)([]Result,error){page,err:=c.OpenSearch(ctx,b,query)iferr!=nil{returnnil,err}deferpage.Close()returnpage.GetResults()// after #6 adds error return}
**Parent:** #3
## Description
The result extraction logic in `sites/duckduckgo/duckduckgo.go:99-131` (`Search()`) is nearly identical to `sites/duckduckgo/page.go:24-54` (`GetResults()`). Both iterate over `article[id^="r1-"]` elements and extract URL, title, and description with the same selectors.
`Search()` should use `searchPage.GetResults()` internally instead of duplicating the extraction logic.
## Fix
Refactor `Search()` to use `OpenSearch()` + `GetResults()`:
```go
func (c Config) Search(ctx context.Context, b extractor.Browser, query string) ([]Result, error) {
page, err := c.OpenSearch(ctx, b, query)
if err != nil {
return nil, err
}
defer page.Close()
return page.GetResults() // after #6 adds error return
}
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent: #3
Description
The result extraction logic in
sites/duckduckgo/duckduckgo.go:99-131(Search()) is nearly identical tosites/duckduckgo/page.go:24-54(GetResults()). Both iterate overarticle[id^="r1-"]elements and extract URL, title, and description with the same selectors.Search()should usesearchPage.GetResults()internally instead of duplicating the extraction logic.Fix
Refactor
Search()to useOpenSearch()+GetResults():Starting work on this as part of PR 9 (also includes #13). Will extract shared DuckDuckGo result parsing into a helper function.
Work finished — extracted duplicated DuckDuckGo result parsing into shared
extractResults()helper. Merged in PR #40.Resolved by PR #40 —
Search()now delegates toOpenSearch()+GetResults(), eliminating the duplicated result extraction logic.