vk について
curl と jq で VK API を呼び出し、ウォール投稿を管理するスキルです。ユーザーまたはコミュニティとしての投稿、予約投稿、一覧表示、削除に対応します。
主な機能
- 01ユーザーまたはコミュニティのウォールに投稿
- 02メディアまたはリンクの添付
- 03予約投稿
- 04最近の投稿と反応の一覧表示
- 05ウォール投稿の削除
活用シーン
- 01コミュニティのウォールに投稿
- 02ウォール投稿を予約
- 03最近の投稿と反応を確認
- 04ウォール投稿を削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill vkインストール後、Claude Code で/vkを入力して読み込まれたか確認します。
詳細
curl + jq を使ってVK APIを呼び出します。トークンは $VK_ACCESS_TOKEN として注入され、
Authorization: Bearer ヘッダーで渡されます。すべての VK API 呼び出しでは
v(API バージョン)クエリパラメーターも必要です。v=5.199 を使用してください。ベース URL:
https://api.vk.com/method/<method>。
VK は常に HTTP 200 を返します。成功時は {"response": ...}、失敗時は
{"error":{"error_code":<n>,"error_msg":"<detail>"}} が返されます。必ず .error
を確認し、error_msg をそのまま表示してください。よくあるコード:5 = 認証失敗(トークンが間違っているか
無効化されています → ユーザーは VK コネクターに再接続する必要があります)、214 = 投稿の追加が拒否されました
(トークンに wall 権限がありません — wall 権限を持つコミュニティアクセストークンが
必要です)、15/203 = そのオーナーへのアクセスが拒否されました。
ステップ 1 — 投稿できるアカウントを特定する
コミュニティアクセストークンではコミュニティのウォールに投稿します。owner_id は
コミュニティ ID の負の値にし、from_group=1 を渡す必要があります。トークンからコミュニティ ID を解決します:
curl -sS "https://api.vk.com/method/groups.getById?v=5.199" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
| jq '.response, .error'
グループの id(例:123456)を取得し、owner_id を -123456 にします。(個人ユーザートークンの場合、
owner_id は users.get で取得した正のユーザー ID にし、from_group は省略します。)
ウォールに投稿する
投稿前に、メッセージの内容をユーザーに確認してください。 投稿にはテキストおよび/または添付ファイルが必要です。
OWNER_ID="-123456" # negative = community; from_group=1 posts as the community
MSG="Пример поста через VK API. #ai"
curl -sS -G "https://api.vk.com/method/wall.post" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "from_group=1" \
--data-urlencode "message=$MSG" \
| jq '.response, .error'
成功時は {"response":{"post_id":<id>}} が返されます。公開 URL は
https://vk.com/wall<OWNER_ID>_<post_id> です(例:https://vk.com/wall-123456_17)。
message内のハッシュタグ(#tag)と通常の URL は、標準でリンクとして表示されます — Bluesky とは異なり、ファセットやオフセットの処理は必要ありません。attachments(カンマ区切り)でメディア/リンクを添付します。形式は{type}{owner_id}_{media_id}(例:photo-123456_789)または単一の外部 URL です。添付できるリンクは 1 つだけです。複数のリンクを指定するとエラー 222 になります。publish_date(Unix タイムスタンプ)を指定すると、予約投稿になります。- キリル文字を含む
messageが文字化けしないよう、必ず--data-urlencodeで送信してください。
最近のウォール投稿とエンゲージメントを一覧表示する
OWNER_ID="-123456"
curl -sS -G "https://api.vk.com/method/wall.get" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "count=20" \
| jq '.error, (.response.items[]? | {id,
text,
likes: .likes.count,
reposts: .reposts.count,
comments: .comments.count,
views: .views.count,
date})'
count の最大値は 100 です。owner_id と投稿の id を組み合わせて、
https://vk.com/wall<owner_id>_<id> 形式の URL を作成します。
投稿を削除する
OWNER_ID="-123456"; POST_ID="17"
curl -sS -G "https://api.vk.com/method/wall.delete" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "post_id=$POST_ID" \
| jq '.response, .error'
注意点
- すべての呼び出しで
vは必須です。省略するとエラーになります。 - ユーザートークンは OAuth 経由で新規発行できません(ユーザートークンの Implicit/Authorization
Code フローは 2024-06 に無効化されました)。
wall権限を持つコミュニティアクセストークン (有効期限なし。コミュニティの API 設定で作成)を使用してください。 - コミュニティとして投稿するには、
owner_idを負の値にし、さらにfrom_group=1を指定する必要があります。 - レート制限/スパム対策:同じ投稿の繰り返しや投稿頻度が高すぎる場合、
214/219などのコードが 発生することがあります。投稿の間隔を空けてください。