Skip to content

feat(smzdm): expose interaction metrics and update time in search results (#1961) - #1968

Merged
jackwener merged 3 commits into
jackwener:mainfrom
LeoLin990405:fix/smzdm-search-interaction-metrics
Jun 17, 2026
Merged

jackwener merged 3 commits into
jackwener:mainfrom
LeoLin990405:fix/smzdm-search-interaction-metrics

Conversation

@LeoLin990405

Copy link
Copy Markdown
Contributor

What

Enriches opencli smzdm search output so deal triage can filter on freshness and engagement without opening each detail page. Closes #1961.

New columns:

rank, title, price, mall, updated_at, zhi_count, buzhi_count, favorite_count, comments, url

(updated_at, zhi_count, buzhi_count, favorite_count are new; comments already existed.)

How

All fields come from the same li.feed-row-wide list item already scraped — no extra detail-page requests — using the selectors from the issue's DOM evidence:

  • zhi_count.price-btn-up .unvoted-wrap span
  • buzhi_count.price-btn-down .unvoted-wrap span
  • favorite_count.feed-btn-fav span
  • updated_at ← direct text node(s) of .feed-block-extras (excluding the nested mall <span>)

Missing metrics default to 0 / '', so every row always carries the full declared column set (no silent column drop).

Refactor for testability

Extracted the inline page.evaluate body into buildSmzdmSearchJs() exposed via __test__ (matching e.g. clis/aibase/news.js), giving smzdm its first test file.

Test

New clis/smzdm/search.test.js (jsdom): parses the issue's documented result-item markup end to end and asserts the exact expected row, plus a defaults-to-zero case and a limit case.

Verification

  • npx vitest run clis/smzdm/search.test.js — 4 passed
  • npm run build — ok (manifest columns updated)
  • npm run check:typed-error-lint / npm run check:silent-column-drop — no new violations

LeoLin990405 and others added 3 commits June 17, 2026 19:42
…ults (jackwener#1961)

smzdm search rows now carry updated_at, zhi_count, buzhi_count and
favorite_count alongside the existing comments, so deal triage can filter
on freshness and engagement without opening each detail page. The metrics
are scraped from the same li.feed-row-wide DOM already in use and default
to 0 / '' when absent, so no declared column is ever dropped.

Refactor the inline page.evaluate body into buildSmzdmSearchJs() exposed
via __test__, and add jsdom tests that parse the documented result-item
markup end to end.
@jackwener
jackwener merged commit ac1684a into jackwener:main Jun 17, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add interaction counts and update time to smzdm search results

2 participants