Skip to main content

Command-line reader for NodeSeek forum threads that outputs Markdown or JSON

Project description

nodeseek-cli

A command-line reader for NodeSeek forum threads.

NodeSeek serves each thread as fully server-rendered HTML, so nodeseek-cli fetches a post URL (no API key, no login) and converts it to Markdown, or to structured JSON with --json. It handles pagination, quoted replies, images, code blocks, tables, and NodeSeek's "magic tab" benchmark widgets.

Install / run

Run without installing (recommended):

uvx nodeseek-cli 355740

Or install:

uv tool install nodeseek-cli      # global CLI: `nodeseek` and `nodeseek-cli`
pip install nodeseek-cli          # into current environment

Usage

nodeseek <post> [options]

  <post>            bare id (355740), slug (post-355740-1), or full URL

  -p, --page N      fetch only page N (overrides page in the URL)
  -a, --all         fetch every page of the thread and merge
  -j, --json        emit structured JSON instead of markdown
      --ansi        keep ANSI colour codes inside code blocks (default: strip)
  -V, --version     print version
  -h, --help        show help

By default only one page is fetched (the page in the URL/slug, or page 1). The markdown header shows page X/N and a footer tells you how to reach the next page or the whole thread.

Examples

nodeseek 355740                                   # first page as markdown
nodeseek post-250906-2                             # a specific page
nodeseek 250906 --all                             # whole thread, merged
nodeseek 250906 --all --json | jq '.comments[].author'
nodeseek https://www.nodeseek.com/post-355740-1 --ansi

Formatting notes

  • Stickers are meaningless out of context and render as [Sticker].
  • Images render as markdown ![alt](url) with absolute URLs.
  • Replies are detected from the leading @user #N marker and shown as a Reply to @user #N line (and a reply_to object in JSON); the marker is stripped from the body.
  • Magic tab widgets (hardware/network benchmark reports, etc.) expand into one titled code block per tab. ANSI colour is reconstructed from NodeSeek's data-ansicode encoding and stripped by default (keep it with --ansi).

Library API

from nodeseek_cli import fetch_post, to_markdown, to_json

post = fetch_post("250906", all_pages=True)   # -> nodeseek_cli.models.Post
print(post.title, post.pages, len(post.comments))

for c in post.comments:
    print(c.floor, c.author, c.reply_to)

print(to_markdown(post))
print(to_json(post))

Parse already-downloaded HTML offline:

from nodeseek_cli import parse_page

title, max_page, comments = parse_page(html, ansi=False)

Errors

fetch_post / fetch_page raise PostNotFound (404), RateLimited (429), or the base NodeSeekError. parse_target raises ValueError on an unparseable reference.

Development

uv sync --extra dev
uv run pytest            # offline tests against saved fixtures
uv run nodeseek 355740   # run the CLI from source

Linting and formatting use ruff, wired up through prek (a drop-in pre-commit runner):

uv run ruff format .     # format
uv run ruff check .      # lint
uv run prek install      # install the git pre-commit hook
uv run prek run --all-files

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nodeseek_cli-0.1.0.tar.gz (40.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nodeseek_cli-0.1.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file nodeseek_cli-0.1.0.tar.gz.

File metadata

  • Download URL: nodeseek_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 40.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for nodeseek_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a89e403234bad8b55de6922cebde8db8cc37808c37ed4079c983e3ddf2aa7ff6
MD5 f4e7a6d1c8ee81c046d9a3c4a910cdcf
BLAKE2b-256 2716cd06d5b6c9a44eef9aac49021ff8008db1e0a84d80feeedfdef0b9008220

See more details on using hashes here.

File details

Details for the file nodeseek_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nodeseek_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for nodeseek_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e41feb84a04b1802fe050bc63a46968da5573eafc6076c29426930d71e7af51a
MD5 e3e4474fb8f51c83a6cf3d6d10277777
BLAKE2b-256 c4c23054e25d4c7ff0db87aa8a30785581c6b5fc22707835100fcb27fb46416f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page