2.4 KiB
2.4 KiB
| name | description | category |
|---|---|---|
| publisher-module | Multi-platform content publishing module for Sage — articles, videos, audio to 10 social platforms | devops |
Publisher Module
Multi-platform content publishing for Sage. Covers 10 platforms: weibo, douyin, bilibili, kuaishou, wechat (公众号), channels (视频号), xiaohongshu, toutiao, youtube, twitter.
Architecture
- Repo:
git@git.opencomputing.cn:yumoqing/publisher.git - Tables (4):
publisher_platform,publisher_content,publisher_task,publisher_log - Content types: article, video, audio, image
- DSPY pattern:
import json+get_sor_context(env, 'sage')+env.run_scheduled(sor)
Adding a Platform
Edit publisher/platforms.py:
from publisher.platforms import register
def publish_newplat(platform, content):
headers = {'Authorization': 'Bearer ' + platform['access_token']}
body = {'text': content.get('title', '')}
return ('POST', 'https://api.newplat.com/publish', headers, body, content['content_type'])
register('newplat', '新平台', publish_newplat, ['article', 'image', 'video'])
Each platform needs in publisher_platform:
app_key+app_secret(all)access_token(all)refresh_token(YouTube)extra_configJSON with platform-specific fields (uid/open_id/channel_id/etc.)
Platform Credentials Quick Reference
| platform_code | extra_config fields | Notes |
|---|---|---|
| uid | Weibo user UID required | |
| douyin | open_id | OAuth authorized user |
| bilibili | cookie | Some endpoints need Cookie |
| kuaishou | open_id | User identifier |
| — | Token expires every 2h | |
| channels | open_id | Separate auth from 公众号 |
| xiaohongshu | user_id | Creator ID |
| toutiao | user_id | Author ID |
| youtube | channel_id | Needs refresh_token |
| oauth_token_secret | OAuth 1.0a |
Deployment Checklist
cp -r publisher $SAGE_ROOT/cp models/publisher_*.json $SAGE_ROOT/models/cp -r wwwroot/publisher $SAGE_ROOT/wwwroot/- Execute
ddl/mysql.sql - Run
scripts/load_path.py from publisher.init import load_publisher+load_publisher()in sage.py- Restart Sage
Pitfalls
- Platform APIs require real credentials — access_token expires, need refresh flow
- Content format differs per platform (Weibo 2000, WeChat title 64, Twitter 280)
- Network errors auto-retry 3 times before marking failed
sorparameter allows DSPY context reuse