mirror of
https://github.com/karust/openserp.git
synced 2026-08-17 21:58:18 +08:00
feat(api): v2 response shape - absolute rank, ad/organic split, slimmer fields
This commit is contained in:
@@ -22,6 +22,7 @@ func ParseHTML(r io.Reader) ([]core.SearchResult, error) {
|
||||
func parseBingDocument(doc *goquery.Document) []core.SearchResult {
|
||||
var results []core.SearchResult
|
||||
rank := 1
|
||||
adRank := 1
|
||||
|
||||
doc.Find(Selectors.Results).Each(func(_ int, item *goquery.Selection) {
|
||||
titleTag := item.Find(Selectors.Title).First()
|
||||
@@ -69,17 +70,37 @@ func parseBingDocument(doc *goquery.Document) []core.SearchResult {
|
||||
}
|
||||
|
||||
results = append(results, core.SearchResult{
|
||||
Rank: -1,
|
||||
Rank: adRank,
|
||||
URL: link,
|
||||
Title: title,
|
||||
Description: desc,
|
||||
Ad: true,
|
||||
})
|
||||
adRank++
|
||||
})
|
||||
|
||||
setSeparatedAdAbsoluteRanks(results, 0)
|
||||
return core.DeduplicateResults(results)
|
||||
}
|
||||
|
||||
func setSeparatedAdAbsoluteRanks(results []core.SearchResult, start int) {
|
||||
adCount := 0
|
||||
for i := range results {
|
||||
if results[i].Ad {
|
||||
adCount++
|
||||
results[i].AbsoluteRank = start + results[i].Rank
|
||||
}
|
||||
}
|
||||
organicAbsoluteRank := start + adCount + 1
|
||||
for i := range results {
|
||||
if results[i].Ad {
|
||||
continue
|
||||
}
|
||||
results[i].AbsoluteRank = organicAbsoluteRank
|
||||
organicAbsoluteRank++
|
||||
}
|
||||
}
|
||||
|
||||
// descriptionFromItem extracts a description using the same 4-step fallback
|
||||
// chain as the rod-based browser parser.
|
||||
func descriptionFromItem(item *goquery.Selection, title string) string {
|
||||
|
||||
Reference in New Issue
Block a user