parseSearchResults 解析搜索结果HTML
(htmlData, keyword string)
| 294 | |
| 295 | // parseSearchResults 解析搜索结果HTML |
| 296 | func (p *XysPlugin) parseSearchResults(htmlData, keyword string) ([]model.SearchResult, error) { |
| 297 | doc, err := goquery.NewDocumentFromReader(strings.NewReader(htmlData)) |
| 298 | if err != nil { |
| 299 | return nil, fmt.Errorf("[%s] 解析搜索结果HTML失败: %w", p.Name(), err) |
| 300 | } |
| 301 | |
| 302 | var results []model.SearchResult |
| 303 | |
| 304 | // 查找搜索结果项 |
| 305 | doc.Find(".layui-card[data-qid]").Each(func(i int, s *goquery.Selection) { |
| 306 | if len(results) >= MaxResults { |
| 307 | return |
| 308 | } |
| 309 | |
| 310 | result := p.parseResultItem(s, i+1) |
| 311 | if result != nil { |
| 312 | results = append(results, *result) |
| 313 | } |
| 314 | }) |
| 315 | |
| 316 | if p.debugMode { |
| 317 | log.Printf("[XYS] 解析到 %d 个原始结果", len(results)) |
| 318 | } |
| 319 | |
| 320 | // 关键词过滤(标准网盘插件需要过滤) |
| 321 | filteredResults := plugin.FilterResultsByKeyword(results, keyword) |
| 322 | |
| 323 | if p.debugMode { |
| 324 | log.Printf("[XYS] 关键词过滤后剩余 %d 个结果", len(filteredResults)) |
| 325 | } |
| 326 | |
| 327 | return filteredResults, nil |
| 328 | } |
| 329 | |
| 330 | // parseResultItem 解析单个搜索结果项 |
| 331 | func (p *XysPlugin) parseResultItem(s *goquery.Selection, index int) *model.SearchResult { |
no test coverage detected