Skip to content
Back to skills

Blogger

ASecurity

Publish posts to your Blogger blog and read your blogs / posts via the Blogger API v3. Use when the user mentions Blogger, blogspot, publishing a post to their blog, listing their blogs, or updating an existing Blogger post.

  • 17 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 17, 2026
ai-agentsgobashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 17, 2026

npx -y skills add AceDataCloud/Skills --skill blogger --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Blogger?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Blogger
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/acedatacloud-blogger/badge)](https://www.skillsdirectory.com/skills/acedatacloud-blogger)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: blogger
description: Publish posts to your Blogger blog and read your blogs / posts via the Blogger API v3. Use when the user mentions Blogger, blogspot, publishing a post to their blog, listing their blogs, or updating an existing Blogger post.
when_to_use: |
  Trigger when the user wants to publish a post to their Blogger blog,
  list their blogs, list / read posts on a blog, or update an existing
  post. The connector grants the Blogger scope (read + write). When the
  user asks to "publish" / "post" / "发布" / "发出去", publish it LIVE
  (isDraft=false) directly — only stage a draft when the user explicitly
  asks for a draft or says they want to review it first.
connections: [google/blogger]
allowed_tools: [Bash]
license: Apache-2.0
metadata:
  author: acedatacloud
  version: "1.0"
---

Call the **Blogger API v3** with `curl + jq`. The user's OAuth bearer token is
in `$GOOGLE_BLOGGER_TOKEN`; every call needs
`Authorization: Bearer $GOOGLE_BLOGGER_TOKEN`. Base URL:
`https://www.googleapis.com/blogger/v3`.

Errors are `{"error": {"code": ..., "message": ...}}` — show them verbatim.
`401` → token expired, re-connect the Blogger connector.

**Always start by listing the user's blogs** to get a `blogId`:

```bash
curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
  "https://www.googleapis.com/blogger/v3/users/self/blogs" \
  | jq '.items[] | {id, name, url}'
```

## Publish a post

When the user asks to publish / post / 发布 / 发出去, publish it **live**
with `?isDraft=false` (the default below) — do NOT silently save a draft
and stop. Only pass `?isDraft=true` when the user explicitly asks for a
draft or to review before going public. After publishing, always report
the returned live `url` back to the user.

```bash
BLOG_ID="1234567890"
jq -n --arg t "My title" --arg c "<p>HTML content of the post…</p>" \
  '{kind:"blogger#post", title:$t, content:$c, labels:["ai","video"]}' \
| curl -sS -X POST \
    "https://www.googleapis.com/blogger/v3/blogs/$BLOG_ID/posts/?isDraft=false" \
    -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
    -H "Content-Type: application/json" \
    -d @- \
| jq '{id, url, status}'
```

`content` is **HTML** (not Markdown) — convert Markdown to HTML first
(e.g. with `pandoc -f markdown -t html` or a simple converter).

- Publish a staged draft: `POST /blogs/{blogId}/posts/{postId}/publish`.
- Update a post: `PUT /blogs/{blogId}/posts/{postId}` with the same shape.

## List / read posts

```bash
curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
  "https://www.googleapis.com/blogger/v3/blogs/$BLOG_ID/posts?maxResults=20&status=live" \
  | jq '.items[] | {id, title, url, published}'
```

## Gotchas

- **Enable the Blogger API** on the Google Cloud project backing the OAuth
  client, or calls 403 with `accessNotConfigured`.
- A `403 "Method doesn't allow unregistered callers"` means the request
  carried no token (empty `$GOOGLE_BLOGGER_TOKEN`) — ask the user to
  (re)connect the Blogger connector, don't blame their Google Cloud setup.
- An empty `{"kind":"blogger#blogList"}` (no `items`) means the connected
  Google account owns no blog — tell the user to create one at blogger.com
  or reconnect with the account that has the blog.
- `content` must be HTML; passing raw Markdown will render literally.
- Paginate with `&pageToken=$PAGE_TOKEN` from the previous `.nextPageToken`.


## Record the output

After you successfully publish and obtain the live result URL, call the built-in
`publish_artifact` tool ONCE so the user can track this deliverable in **My Outputs**:

```
publish_artifact(kind="article", channel="blogger", title="<title>", url="<the REAL returned URL>", status="delivered")
```

Use the real returned URL — never fabricate one. Call it once per published item,
only after delivery is confirmed; skip it (or use `status="failed"`) if publishing failed.
See `_shared/artifacts.md`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.