Contains two standalone Python scripts that talk to the free Algolia Hacker News API:
hnparse.py— fetch one HN post (article + full comment tree) and write structured markdown.hnsearch.py— search/list HN posts by query and time range; emits JSON to stdout.
hnparse.py usage
uv run <path-to>/hnparse.py <hn-url-or-id> [-o <output-directory>]
- Uses
uv runinline script metadata for dependencies (playwright, httpx, trafilatura) - Fetches post metadata and comment tree from Algolia HN API
- Extracts linked article via Playwright headless browser (falls back to plain HTTP)
- Writes
content.mdto the output directory - Default output:
~/.tweakidea/hn/hn-{item_id}/content.md - Prints the absolute path of the output file to stdout (last line)
- All progress messages go to stderr
For better article extraction from JS-heavy sites, run uv run playwright install chromium once. Without it, the script falls back to plain HTTP which works fine for most sites.
hnsearch.py usage
uv run <path-to>/hnsearch.py --query "<freeform>" --days <N> \
[--tags story|show_hn|ask_hn|front_page|poll] \
[--min-points N] [--limit N]
- Single dependency:
httpx(no Playwright / trafilatura needed) - Queries
https://hn.algolia.com/api/v1/search(popularity-sorted) --queryrequired;--daysrequired (0= no time filter / all-time)--tagsdefaults tostory(excludes comments); allowed:story,show_hn,ask_hn,front_page,poll; multiple tags comma-separated--min-pointsdefaults to10;--limitdefaults to20(max50)- Prints a JSON array of hits to stdout. Each hit has:
id,title,url,points,num_comments,author,created_at_i,relative_age,hn_url. - Progress and errors go to stderr. Exits non-zero on HTTP failure.