Skip to content
nitant.dev
Index
toolmaintained2025

Vomy

A YouTube scraper CLI that collects channels, video metadata, comments and playlists without an API key.

Language
Python
Collects
4 types
channel · video · comments · playlists
API key
None
License
MIT

My role

Sole author

Domains

Tooling/Data collection/CLI

01

Context

Pulling a channel's back catalogue — video metadata, playlists, the comments under each one — is the starting point for any analysis of it. The official route is the YouTube Data API: a key, an OAuth flow, and a daily quota that a single large channel can exhaust before you have finished collecting it.

02

The problem

The obvious alternative is to fetch the public pages directly, and the obvious naive version of that stops working within a few hundred requests. You get rate-limited, then blocked, and the run dies halfway through with a partial dataset and no way to resume from anything meaningful.

03

What I built

Vomy is a CLI over a scraper core, with the two kept deliberately separate: `cli.py` parses and orchestrates, `scraper.py` does the fetching, `models.py` defines what a channel, video and comment actually are, and configuration lives in `config/settings.py` rather than in flags scattered through the code. The rate-limit problem is handled on two fronts — rotation across proxies, fetched from public lists automatically or supplied as your own file, and a configurable `--sleep-interval` so a run can be deliberately slowed to something polite. Requests are shaped to look like a browser rather than a script. An interactive mode lets you pick which of the four data types you actually want instead of collecting everything by default.

04

Outcome

One command against a channel URL produces a timestamped output directory of JSON — channel info, video metadata, comments and playlists — with no key, no OAuth and no quota. MIT-licensed and pure Python.

How it works

Detail
CLI and core kept apart
The command layer never does the fetching. Splitting cli / scraper / models / utils / config means the scraper is importable as a library and the interface can change without touching the part that has to be careful.
Rotation plus throttling
Proxy rotation handles the block; `--sleep-interval` handles the courtesy. Public proxy lists are fetched automatically, and a custom list can be supplied instead when you have better ones.
Collect only what you asked for
Interactive mode selects among channel info, video metadata, comments and playlists. Comments are by far the most expensive to collect, so not gathering them by default is the difference between a minute and an hour.
Runs you can tell apart
Every run writes to its own timestamped directory, so re-scraping a channel a month later gives you two datasets to diff rather than one that silently overwrote the other.

Built with

Python/CLI/HTTP proxies/JSON