niconico のユーザーページから動画IDを取得するコマンドラインツールです。
nicovideo.jp/user/<id> のページを1つ以上指定し、コメント数と日付範囲で絞り込み、結果をソートして stdout に出力します。
go install github.com/sh4869221b/go-nico-list@latest事前ビルド済みバイナリは GitHub Releases ページで提供しています。
go-nico-list [nicovideo.jp/user/<id>...] [flags]Examples:
go-nico-list nicovideo.jp/user/12345
go-nico-list https://www.nicovideo.jp/user/12345/video --url
go-nico-list nicovideo.jp/user/1 nicovideo.jp/user/2 --concurrency 10
go-nico-list --input-file users.txt
cat users.txt | go-nico-list --stdin- 1行に1つの動画IDを出力します(例:
sm123)。 --url指定時は各行にhttps://www.nicovideo.jp/watch/を付与します。--tab指定時は各行にタブを付与します。--json指定時は stdout に単一の JSON オブジェクトを出力します(行出力は無効化)。
0: 取得エラーなし(無効入力はスキップされ、出力が空になる場合があります)。- 非0: 取得が1件でも失敗した場合(取得できたIDは出力されます)。
- 検証エラー(例:
--concurrency < 1)は非0で終了します。 - 取得中の
context.Canceled/context.DeadlineExceededは成功として空結果扱いになります。
| Flag | Description | Default |
|---|---|---|
-c, --comment |
lower comment limit number | 0 |
-a, --dateafter |
date YYYYMMDD after |
10000101 |
-b, --datebefore |
date YYYYMMDD before |
99991231 |
-t, --tab |
id tab separated flag | false |
-u, --url |
output id add url | false |
-n, --concurrency |
number of concurrent requests | 3 |
--rate-limit |
maximum requests per second (0 disables) | 0 |
--min-interval |
minimum interval between requests | 0s |
--max-pages |
maximum number of pages to fetch | 0 |
--max-videos |
maximum number of filtered IDs to collect | 0 |
--timeout |
HTTP client timeout | 10s |
--retries |
number of retries for requests | 10 |
--input-file |
read inputs from file (newline-separated) | "" |
--stdin |
read inputs from stdin (newline-separated) | false |
--logfile |
log output file path | "" |
--progress |
force enable progress output | false |
--no-progress |
disable progress output | false |
--strict |
return non-zero if any input is invalid | false |
--best-effort |
always exit 0 while logging fetch errors | false |
--dedupe |
remove duplicate output IDs before sorting | false |
--json |
emit JSON output to stdout | false |
Notes:
- 入力は引数、
--input-file、--stdinで指定できます(改行区切り)。 - 各入力は
nicovideo.jp/user/<id>を含む必要があります(スキームは任意)。数字のみやuser/<id>だけの入力は無効としてスキップされます。 - 結果は stdout、進捗とログは stderr に出力されます。
--logfileでログ出力先を変更できます。 concurrencyまたはretriesを 1 未満にすると実行時エラーになります。--max-pagesと--max-videosは安全制限で、0で無効化されます。- 上限に達した場合は取得を早期終了し、エラー扱いにせず best-effort の結果を返します。
- 200/404 以外の HTTP ステータスがリトライ後も続く場合は取得エラー扱いになります。
- HTTP 200 でも
meta.status != 200の場合は警告ログを出しつつ処理を続行します。 - すべてのリクエスト(リトライ含む)に対してレート制限が適用され、HTTP 429 の
Retry-Afterは可能な限り尊重されます。 - stderr が TTY でない場合は進捗表示を自動で無効化します。
--progressで強制表示、--no-progressで無効化します(優先)。 - 処理後に実行サマリを stderr に出力します(非0終了時も含む)。
--strictを指定すると、無効な入力がある場合に非0で終了します(有効な結果は出力されます)。--best-effortを指定すると取得エラーがあっても終了コードは 0 になります(エラーはログに残ります)。--dedupeを指定すると動画IDの重複を除外してからソート/出力します。--jsonは stdout に単一の JSON オブジェクトを出力します。--tab/--urlは JSON のitemsに影響せず、サマリは引き続き stderr に出力します。
CLI 層とドメインロジックを分離し、テストと保守性を高めています。
main.go: バージョン解決とキャンセル可能なコンテキスト生成。cmd/: Cobra コマンド定義、フラグ、入出力処理(stdout/stderr分離)。internal/niconico/: 取得・リトライ・ソートなどのドメインロジックとAPIレスポンス定義。
- CLI がフラグとユーザーIDを解析。
internal/niconicoを呼び出して動画IDを取得・フィルタ。- 結果をソートし、stderrに進捗を出しつつstdoutへ出力。
GitHub Actions は全ブランチの push / pull request で実行され、以下をチェックします。
gofmt(format + diff チェック)go vet ./...go test -count=1 ./...go test -race -count=1 ./...
CONTRIBUTING.md を参照してください。
リリースはタグを作成して GitHub に push することで行います。
vX.Y.Zの形式でタグを作成します。- タグを GitHub に push します。
- GitHub Actions がリリースワークフローを実行します(
go mod tidy/go generate ./...の検証、gofmt/go vet/go test/go test -race、third-party notices の同期チェック)。 - GoReleaser が GitHub Release を作成し、成果物をアップロードします。
- リリースワークフロー成功後、マイルストーンを閉じます。
注記:
- バージョン付きマイルストーンが完了したら同じバージョン番号でリリースします。