Token导航 LogoToken导航TokenDH.com
研究检索敏感数据clawhub未标认证来源可访问clear审计通过

instagram-pageInstagram 页面

Agent Skill

instagram-page 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

16,032

周安装

668

GitHub Stars

2

下载量

5,344
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:instagram-page(Instagram 页面)
来源仓库:https://github.com/seph1709/instagram-page
安装命令:
openclaw skills install instagram-page
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install instagram-page

简介

用于查找和筛选 Instagram 页面信息,适合快速定位目标账号或内容。

  • 适用于社交媒体调研、竞品分析或内容策略制定等场景。
  • 通过关键词搜索获取候选结果,支持进一步筛选与验证。
  • 需配置访问凭证并确认网络权限,注意维护状态与合规边界。
  • 安装前请核实是否会触发文件读写或命令执行操作。instagram-page 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

name
instagram-page
description
Instagram Business manager: post photos, reels, stories & get insights. Requires: powershell/pwsh. Reads ~/.config/instagram-page/credentials.json (IG_ACCESS_TOKEN, IG_USER_ID). IG_APP_SECRET for one-time setup only — delete afterward. Token expires every 60 days — refresh before expiry. Grant minimal permissions only. No data forwarded to third parties; all calls go to graph.facebook.com only.
metadata
{"openclaw":{"emoji":"[ig]","requires":{"anyBins":["powershell","pwsh"]}}}

instagram-page - Universal Instagram Graph API Skill

Constructs and executes Instagram Graph API calls inline based on what the user wants. No scripts needed.

Requires an Instagram Business or Creator account linked to a Facebook Page. Personal Instagram accounts are not supported by the Instagram Graph API.

API version: v25.0 Base URL: https://graph.facebook.com/v25.0


STEP 1 - Load Credentials

Credentials are stored in ~/.config/instagram-page/credentials.json.

$cfg      = Get-Content "$HOME/.config/instagram-page/credentials.json" -Raw | ConvertFrom-Json
$token    = $cfg.IG_ACCESS_TOKEN
$igUserId = $cfg.IG_USER_ID

If the file does not exist, guide setup. Required fields:

FieldPurpose
IG_ACCESS_TOKENLong-lived User access token - used for all API calls
IG_USER_IDInstagram-scoped Business/Creator User ID (numeric)
IG_APP_IDMeta App ID - only needed during token exchange
IG_APP_SECRETMeta App Secret - only needed during token exchange

Prerequisites:

  1. Instagram account must be a Business or Creator account
  2. The Instagram account must be linked to a Facebook Page
  3. A Meta App with instagram_basic, instagram_content_publish, instagram_manage_comments, instagram_manage_insights permissions

One-time token exchange setup:

# Provide: $appId, $appSecret, $shortToken (from Graph API Explorer with IG permissions), $fbPageId
# 1. Exchange short-lived token for long-lived user token (valid 60 days)
$r1 = Invoke-RestMethod "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=$appId&client_secret=$appSecret&fb_exchange_token=$shortToken"
$longToken = $r1.access_token
# 2. Get Instagram Business Account ID linked to your Facebook Page
$r2 = Invoke-RestMethod "https://graph.facebook.com/v25.0/$fbPageId?fields=instagram_business_account&access_token=$longToken"
$igUserId = $r2.instagram_business_account.id
# 3. Save - only these four fields
@{
    IG_USER_ID      = $igUserId
    IG_ACCESS_TOKEN = $longToken
    IG_APP_ID       = $appId
    IG_APP_SECRET   = $appSecret
} | ConvertTo-Json | Set-Content "$HOME/.config/instagram-page/credentials.json" -Encoding UTF8

Restrict file permissions immediately after saving:

# Windows
icacls "$HOME/.config/instagram-page/credentials.json" /inheritance:r /grant:r "$($env:USERNAME):(R,W)"
# macOS / Linux
# chmod 600 ~/.config/instagram-page/credentials.json

Refresh token before it expires (every ~50 days):

$r = Invoke-RestMethod "https://graph.facebook.com/oauth/access_token?grant_type=ig_refresh_token&access_token=$token"
$cfg.IG_ACCESS_TOKEN = $r.access_token
$cfg | ConvertTo-Json | Set-Content "$HOME/.config/instagram-page/credentials.json" -Encoding UTF8
Delete IG_APP_SECRET from credentials.json after setup - it is not needed for API calls. Never commit this file to version control. It contains long-lived secrets. This skill makes no external calls other than to graph.facebook.com. No data is forwarded to third parties.

STEP 2 - Figure Out the API Call

Instagram publishing uses a two-step flow for most media types:

  1. Create a media container - uploads/registers the media, returns a creation_id
  2. Publish the container - makes it live on Instagram

Common Endpoints

What user wantsMethodEndpoint
Post single photoPOST x2Step 1: /$igUserId/media Step 2: /$igUserId/media_publish
Post reel (video)POST x2Step 1: /$igUserId/media (media_type=REELS) Step 2: /$igUserId/media_publish
Post storyPOST x2Step 1: /$igUserId/media (media_type=STORIES) Step 2: /$igUserId/media_publish
Post carouselPOST x3+Step 1: item containers Step 2: carousel container Step 3: publish
Get recent mediaGET/$igUserId/media?fields=id,caption,media_type,timestamp,like_count,comments_count
Get account infoGET/$igUserId?fields=username,name,biography,followers_count,media_count
Get commentsGET/{media-id}/comments?fields=text,username,timestamp
Reply to commentPOST/{comment-id}/replies body: message
Delete commentDELETE/{comment-id}
Hide/show commentPOST/{comment-id} body: hide=true/false
Get media insightsGET/{media-id}/insights?metric=impressions,reach,likes,comments,shares,saved
Get account insightsGET/$igUserId/insights?metric=impressions,reach,follower_count&period=day
Get hashtag IDGETig/hashtags?user_id=$igUserId&q=hashtag
Search hashtag mediaGET/{hashtag-id}/top_media?user_id=$igUserId&fields=id,caption,media_type
Get tagged mediaGET/$igUserId/tags?fields=caption,media_url,timestamp

API Call Patterns

GET:

$result = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/ENDPOINT?access_token=$token" -ErrorAction Stop

POST (form body):

$result = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/ENDPOINT" -Method POST `
    -Body @{ field1="value1"; field2="value2"; access_token=$token } -ErrorAction Stop

DELETE:

$result = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/{id}?access_token=$token" -Method DELETE -ErrorAction Stop

Publishing Patterns

Single photo post:

# image_url must be publicly accessible
$container = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media" -Method POST `
    -Body @{ image_url=$imageUrl; caption=$caption; access_token=$token } -ErrorAction Stop
$post = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media_publish" -Method POST `
    -Body @{ creation_id=$container.id; access_token=$token } -ErrorAction Stop
Write-Host "Published post ID: $($post.id)"

Reel post (video):

# video_url must be publicly accessible MP4 (H.264, AAC audio, max 1GB, max 60s for feed)
$container = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media" -Method POST `
    -Body @{ media_type="REELS"; video_url=$videoUrl; caption=$caption; share_to_feed="true"; access_token=$token } -ErrorAction Stop
# Poll for processing status - video upload is async
do {
    Start-Sleep -Seconds 5
    $status = Invoke-RestMethod "https://graph.facebook.com/v25.0/$($container.id)?fields=status_code&access_token=$token"
} while ($status.status_code -eq "IN_PROGRESS")
if ($status.status_code -ne "FINISHED") { throw "Video processing failed: $($status.status_code)" }
$post = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media_publish" -Method POST `
    -Body @{ creation_id=$container.id; access_token=$token } -ErrorAction Stop
Write-Host "Published reel ID: $($post.id)"

Carousel post (2-10 images/videos):

# Create item containers for each media URL
$itemIds = @()
foreach ($url in $mediaUrls) {
    $item = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media" -Method POST `
        -Body @{ image_url=$url; is_carousel_item="true"; access_token=$token } -ErrorAction Stop
    $itemIds += $item.id
}
# Create carousel container
$carousel = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media" -Method POST `
    -Body @{ media_type="CAROUSEL"; children=($itemIds -join ","); caption=$caption; access_token=$token } -ErrorAction Stop
# Publish
$post = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media_publish" -Method POST `
    -Body @{ creation_id=$carousel.id; access_token=$token } -ErrorAction Stop
Write-Host "Published carousel ID: $($post.id)"

Story:

$container = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media" -Method POST `
    -Body @{ media_type="STORIES"; image_url=$imageUrl; access_token=$token } -ErrorAction Stop
$post = Invoke-RestMethod -Uri "https://graph.facebook.com/v25.0/$igUserId/media_publish" -Method POST `
    -Body @{ creation_id=$container.id; access_token=$token } -ErrorAction Stop
Write-Host "Published story ID: $($post.id)"
Image/video URLs must be publicly accessible - local files are not accepted by the API. Upload to a public server or CDN before calling. Instagram limits ~50 API-published posts per 24h.

STEP 3 - Handle Errors

try {
    # ... API call ...
} catch {
    $err     = $_.ErrorDetails.Message | ConvertFrom-Json -ErrorAction SilentlyContinue
    $code    = $err.error.code
    $subcode = $err.error.error_subcode
    $msg     = $err.error.message
    Write-Host "Error $code/$subcode : $msg"
}
CodeSubcodeMeaningFix
100-Invalid parameterCheck parameter values; image/video URL must be public
102-Session expiredRefresh token - run the refresh snippet in STEP 1
190460Token expired (60 days)Refresh token - run the refresh snippet in STEP 1
190467Invalid tokenRe-run full setup to get a new token
200-Permission deniedAdd the missing permission to your Meta App and regenerate token
10-Permission denied (IG scope)Add permission listed in error.message; re-run setup
24-No linked IG Business accountLink Instagram account to your Facebook Page in Instagram settings
32-Page request limit reachedWait and retry; hourly rate limit hit
368-Temporarily blockedWait and retry; account may be temporarily restricted
9007-Publishing limit reachedInstagram limits ~50 API-published posts per 24h
2207026-Video format invalidMP4 required; H.264 video, AAC audio, max 1GB, 60s for feed reels

Permissions Reference

PermissionRequired for
instagram_basicRead account info, media list
instagram_content_publishCreate and publish posts, reels, stories, carousels
instagram_manage_commentsRead, reply to, hide, delete comments
instagram_manage_insightsAccess account and media insights
pages_show_listList Facebook Pages (needed during IG account lookup)
pages_read_engagementRead Facebook Page linked to Instagram account

If a permission is missing:

  1. Go to Meta for Developers
  2. Select your app -> Permissions and Features
  3. Add the required permission
  4. Regenerate token via Graph API Explorer with the permission checked
  5. Re-run setup with the new token

AGENT RULES

  • Always load credentials first. If missing or incomplete, guide setup.
  • Only use IG_ACCESS_TOKEN and IG_USER_ID for API calls. IG_APP_ID and IG_APP_SECRET are for token exchange only.
  • Delete IG_APP_SECRET from credentials.json after token exchange - it is not needed for API calls.
  • Token expiry: IG_ACCESS_TOKEN expires every 60 days. Remind the user to refresh before expiry using the refresh snippet in STEP 1. Rotate immediately if the host is ever compromised.
  • Two-step publishing: always create a container first, then publish. Never try to publish in a single API call.
  • Public URLs only: image/video URLs must be publicly accessible. If the user provides a local file path, tell them to upload it to a public server or CDN first.
  • Reel processing: poll status_code until FINISHED before publishing - video processing is async and can take minutes.
  • Least-privilege: only request the permissions the use case needs.
  • All API calls go to graph.facebook.com only. No external forwarding, no third-party services.
  • Construct API calls inline from user intent - do not look for script files.
  • On any error: parse error.code + error.error_subcode, map to the table above, tell the user exactly what to do.
  • If a permission is missing: name it, link to Meta for Developers, say to re-run setup.
  • Business/Creator only: if the user has a personal Instagram account, tell them to convert it to Business or Creator in Instagram settings first - personal accounts are not supported by the Instagram Graph API.

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

79.61%
按下载量换算4,254

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

未展示

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills