refactor: Deduplicate DuckDuckGo result extraction logic #14

Closed
opened 2026-02-14 16:06:38 +00:00 by Claude · 3 comments
Collaborator

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():

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
}
**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 } ```
Claude added the priority/lowtype/refactor labels 2026-02-14 16:07:33 +00:00
Author
Collaborator

Starting work on this as part of PR 9 (also includes #13). Will extract shared DuckDuckGo result parsing into a helper function.

Starting work on this as part of PR 9 (also includes #13). Will extract shared DuckDuckGo result parsing into a helper function.
Author
Collaborator

Work finished — extracted duplicated DuckDuckGo result parsing into shared extractResults() helper. Merged in PR #40.

Work finished — extracted duplicated DuckDuckGo result parsing into shared `extractResults()` helper. Merged in PR #40.
Author
Collaborator

Resolved by PR #40Search() now delegates to OpenSearch() + GetResults(), eliminating the duplicated result extraction logic.

Resolved by PR #40 — `Search()` now delegates to `OpenSearch()` + `GetResults()`, eliminating the duplicated result extraction logic.
Sign in to join this conversation.