Agentic Blog
Agentic Blog is a small, read-only command-line reader for public Naver Blog content. It is designed for focused retrieval: search public blogs and posts, inspect a blog and its category tree, list posts, read a post body and comments, browse topics, and view public buddies (neighbours).
It is anonymous by design. There is no account, login, API key, browser, cookie jar, profile, session, setup, status, or doctor command. The package uses plain HTTPS requests to Naver's public surfaces and does not attempt to access private or neighbour-only content.
Read DISCLAIMER.md before use. This is an unofficial tool. Public availability does not remove your responsibility to use the service and retrieved data lawfully and respectfully.
Install
Requires Python 3.11 or newer.
python -m pip install .
agentic-blog --version
Install a reviewed wheel with python -m pip install /path/to/agentic_blog-0.1.0-py3-none-any.whl.
This release-ready worktree does not claim that version 0.1.0 has been published to PyPI.
The runtime dependency set is intentionally limited to httpx, platformdirs, and lxml. No browser dependency or optional browser extra is provided.
Quick start
Search public posts and save up to five results:
agentic-blog search "커피" --limit 5
The command writes UTF-8 JSON to the default data directory and prints a one-line save summary to stderr. To choose the destination explicitly:
agentic-blog search "커피" --limit 5 --output ./coffee.json
Use a search result's blog ID to inspect a blog, then list its posts:
agentic-blog blog example_blog --output ./blog.json
agentic-blog posts example_blog --limit 10 --output ./posts.json
Read a public post and its comments:
agentic-blog post "https://blog.naver.com/example_blog/123456789" --output ./post.json
post also accepts an m.blog.naver.com URL, a PostView.naver?blogId=...&logNo=... URL, or a two-part reference:
agentic-blog post example_blog 123456789 --no-comments --output ./post.json
See the installation guide, quick start, and CLI reference for fuller examples.
Commands
Run agentic-blog <command> --help for parser-level help. agentic-blog catalog emits a
machine-readable JSON description of the installed CLI; agentic-blog schema prints its model
fields, while agentic-blog schema --json emits JSON Schema draft 2020-12. Both meta commands are
offline and write to stdout.
Read commands
| Command | Purpose | Command-specific options |
|---|---|---|
search <query> |
Search public Naver Blog posts or blogs. | --type {post,blog,id} (default post); --sort {sim,date} (default sim); --since YYYY-MM-DD; --until YYYY-MM-DD |
blog <blog_id> |
Read one public blog profile and category tree. | — |
posts <blog_id> |
List public posts from a blog. | --category N (default 0, all); --sort {recent,popular} (default recent); --notices; --query TEXT |
post <url-or-blog_id> [log_no] |
Read one public post body and, by default, its full comment thread. | --no-comments; --comment-sort {new,favorite} (default new); --comment-limit N |
buddies <blog_id> |
List a blog's public buddies/neighbours. | — |
topics |
Read Naver's public blog topic tree. | — |
topic <directory_seq> |
List posts in a public topic. | --top |
All read commands accept --format {json,ndjson} (default json), --output PATH,
--data-dir PATH, --no-redact, and -v/--verbose. Diagnostic redaction is enabled by
default; --no-redact explicitly disables it for error messages only, never result files, and
verbose diagnostics include the typed error class. --limit N applies to search, posts,
buddies, and topic; it must be non-negative. --raw is accepted only by search, blog,
posts, buddies, and topic. Neither post nor topics accepts --raw.
Important combinations are validated as usage errors:
- Search date bounds are server-side and available only with
search --type post.--type idaccepts neither--sortnor date bounds. posts --querycannot be combined with--category,--sort popular, or--notices; its text must not be empty.posts --noticescannot be combined with--sort popular,--category, or--query.- A bare post number is not enough: provide a Naver post URL or both
<blog_id> <log_no>.
Output and storage
Read commands write an array of schema-shaped objects to a file, never the retrieved content to stdout. Their stderr summary reports the item count, date range when available, stop reason, and saved path. JSON output is indented UTF-8 with ensure_ascii=False, preserving Korean text. NDJSON writes one UTF-8 JSON object per line.
Without --output, files are written beneath the platform user-data directory:
<platform user data>/agentic-blog/output/
Names include the command, a Unicode-safe identifier, UTC timestamp, and .json or .ndjson extension. Use --data-dir PATH to choose the application data directory for one command, or set AGENTIC_BLOG_DATA_DIR for the process. --output PATH takes precedence for the output file itself.
The output schema is generated from the installed models. Use:
agentic-blog schema --json
For schema and record guidance, see Output Schema.
Budgets and pacing
Every client enforces a non-bypassable 0.5-second minimum pause between requests. Each command run has a default budget of 100 requests, preventing accidental bulk collection. Pagination stops on the requested limit, a natural end, an empty search, or the request budget. search --type post sends --since and --until as server-side filters; they do not create a local date-boundary stop reason. The stderr summary identifies the stop reason.
There is intentionally no bulk crawl, daemon, batch mode, --profile, or --wait-on-limit flag. Compose small commands instead of attempting broad collection.
Chaining focused reads
Agentic Blog's commands are single-target primitives. A typical bounded investigation is:
searchfor a topic, blog name, or ID.blogto inspect a selected public blog's profile and category tree.postsorposts --queryto narrow to relevant public posts.postto read a selected body and comments.buddiesto follow only public neighbour links, ortopicsthentopicto change discovery paths.
Save each result and pass only the identifiers needed to the next command. Do not treat chaining as authorization to collect a social graph or archive a service.
Limitations and exit codes
Only content that Naver makes readable to anonymous visitors is in scope. Private blogs, neighbour-only posts, deleted posts, suspended blogs, login-gated feeds, notifications, visitor statistics, and write actions are unavailable. The tool does not post, comment, like, add neighbours, or bypass access controls. Naver may change its public response or HTML structure; update the package rather than relying on a broken parser.
| Exit code | Meaning |
|---|---|
| 0 | Successful result, including zero matches or a normal pagination stop. |
| 1 | Usage error, invalid identifier, or unexpected failure. |
| 3 | Naver blocked or throttled the request. |
| 4 | Naver's response or expected HTML structure changed. Upgrade or report the drift. |
| 5 | The target does not exist or cannot be read anonymously. |
Exit code 2 is intentionally unassigned; it is not an authentication state.
Privacy and responsible use
Public content can still contain personal data. Keep outputs local, collect the minimum needed, avoid publishing or redistributing retrieved personal information, and delete outputs when no longer needed. Diagnostic raw output can expose more upstream fields; use it only for local troubleshooting and handle it with particular care.
Repository fixtures are synthetic and PII-free. Do not commit real captures, cookies, browser state, session data, credentials, or output files. Read SECURITY.md, DISCLAIMER.md, and the Security and Privacy guide.
Contributing and policies
Contributions are welcome under CONTRIBUTING.md. Please follow the Code of Conduct, report vulnerabilities through SECURITY.md, and review the FAQ and troubleshooting guide.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentic_blog-0.1.0.tar.gz.
File metadata
- Download URL: agentic_blog-0.1.0.tar.gz
- Upload date:
- Size: 150.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac77266b6c63e74f649ccea9d497c0fcc9f28383a08daa8d9c8e004cd9803027
|
|
| MD5 |
f342db35292d82c2cb10f6eb2104a135
|
|
| BLAKE2b-256 |
2cb04b684f8e5bd282b9feb83434e2e37786851a8bc951d18c231aa76f62e8c6
|
Provenance
The following attestation bundles were made for agentic_blog-0.1.0.tar.gz:
Publisher:
publish.yml on tjdwls101010/Agentic-Blog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_blog-0.1.0.tar.gz -
Subject digest:
ac77266b6c63e74f649ccea9d497c0fcc9f28383a08daa8d9c8e004cd9803027 - Sigstore transparency entry: 2245687357
- Sigstore integration time:
-
Permalink:
tjdwls101010/Agentic-Blog@0b0cd196212073ea9b555f573f5e0643e8e0fba0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tjdwls101010
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b0cd196212073ea9b555f573f5e0643e8e0fba0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agentic_blog-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentic_blog-0.1.0-py3-none-any.whl
- Upload date:
- Size: 44.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ceb1a255e6333f71b96e69d60b6e162fe223d8a3b517aa1eed929cfb5064563
|
|
| MD5 |
beeac1df3bb4b9e0dc0af279446de92a
|
|
| BLAKE2b-256 |
62bfc2acde5a1b8a17f403c0db838d4640c65c023d9100b296533ce6d1c427c5
|
Provenance
The following attestation bundles were made for agentic_blog-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on tjdwls101010/Agentic-Blog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_blog-0.1.0-py3-none-any.whl -
Subject digest:
0ceb1a255e6333f71b96e69d60b6e162fe223d8a3b517aa1eed929cfb5064563 - Sigstore transparency entry: 2245687581
- Sigstore integration time:
-
Permalink:
tjdwls101010/Agentic-Blog@0b0cd196212073ea9b555f573f5e0643e8e0fba0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tjdwls101010
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b0cd196212073ea9b555f573f5e0643e8e0fba0 -
Trigger Event:
release
-
Statement type: