📦 DeviantArt Post — DeviantArt 帖子
v0.1.0通过官方 DeviantArt API,使用 OAuth 2.1 Authorization Code with PKCE 将作品、日志和状态更新发布到用户的 DeviantArt 账户。
运行时依赖
安装命令
点击复制技能文档
DeviantArt Post 使用官方 API,禁止浏览器自动化。
工作流
- 确保本地已创建 DeviantArt 应用,用户拥有 client_id 与 redirect URI。
- 在 ~/.openclaw/deviantart-app-credentials.json 创建应用凭据文件,或通过 DEVIANTART_APP_CREDENTIALS 覆盖路径。
- 若无 token 或刷新失败,运行 scripts/deviantart_auth.py。
- 任何外部发布前,先摘要待发布内容并征得用户明确确认。
- 根据类型运行对应脚本:artwork、journal 或 status。
- 返回最终 URL 或 deviation ID。
本地文件 默认路径:
- 应用凭据:~/.openclaw/deviantart-app-credentials.json
- token 文件:~/.openclaw/deviantart-token.json
可选覆盖: DEVIANTART_APP_CREDENTIALS DEVIANTART_TOKEN_PATH
凭据文件格式: { "client_id": "12345", "redirect_uri": "http://127.0.0.1:8765/callback", "scopes": ["stash", "publish"] } 若需发布 journal 或 status,追加 "user.manage"。
命令 认证: python .\skills\deviantart-post\scripts\deviantart_auth.py
发布作品: python .\skills\deviantart-post\scripts\deviantart_post_art.py --file "C:\path\to\image.png" --title "My title" --tags tag_one tag_two --artist-comments "Optional description" --is-mature false 或 PowerShell: powershell -ExecutionPolicy Bypass -File .\skills\deviantart-post\scripts\deviantart_post.ps1 -File "C:\path\to\image.png" -Title "My title" -Tags tag_one,tag_two -IsMature false
创建日志: python .\skills\deviantart-post\scripts\deviantart_post_journal.py --title "My journal" --body "Body text" --is-mature false 或 PowerShell: powershell -ExecutionPolicy Bypass -File .\skills\deviantart-post\scripts\deviantart_post_journal.ps1 -Title "My journal" -Body "Body text" -IsMature false
发布状态: python .\skills\deviantart-post\scripts\deviantart_post_status.py --body "Hello from OpenClaw" 或 PowerShell: powershell -ExecutionPolicy Bypass -File .\skills\deviantart-post\scripts\deviantart_post_status.ps1 -Body "Hello from OpenClaw"
注意事项
- stash/submit 即使 HTTP 200 也可能返回错误体,务必检查 JSON。
- 新 DeviantArt 应用使用 PKCE,保持本地桌面友好流程。
- access token 过期快,发布前自动刷新。
- 空的可选发布字段请省略,DeviantArt 会严格校验。
- 用户想预览时加 --dry-run。
- 画廊文件夹名通过 --gallery-name 解析;若重名需提供 UUID。
- 发布前需征得同意,因是外部写操作。
认证失败时 阅读 references/api-notes.md 并检查:
- redirect URI 完全匹配
- client_id 正确
- 本地回调端口可用
- 用户是否需要重新授权
- 请求 scopes 与操作匹配