跳转至

LingTongAsk 发布指南

版本: v1.0 更新日期: 2026-04-03


📋 目录

  1. 环境配置
  2. B站发布
  3. 微信公众号发布
  4. 常见问题
  5. API参考

环境配置

方式一:环境变量(推荐)

.env 文件中配置:

# B站配置(二选一)
BILIBILI_ACCESS_TOKEN=your_access_token
# 或使用OAuth
BILIBILI_CLIENT_ID=your_client_id
BILIBILI_CLIENT_SECRET=your_client_secret

# 微信公众号配置
WECHAT_MP_APP_ID=your_app_id
WECHAT_MP_APP_SECRET=your_app_secret

方式二:代码配置

from src.publisher import BilibiliAuthConfig, WechatMPConfig

# B站
bilibili_config = BilibiliAuthConfig(
    client_id="your_client_id",
    client_secret="your_client_secret",
)

# 微信公众号
wechat_config = WechatMPConfig(
    app_id="your_app_id",
    app_secret="your_app_secret",
)

B站发布

获取Access Token

方法一:OAuth认证(推荐)

import asyncio
from src.publisher import BilibiliAuthConfig, BilibiliPublisher

async def setup():
    config = BilibiliAuthConfig(
        client_id="your_client_id",
        client_secret="your_client_secret",
    )
    publisher = BilibiliPublisher(config)

    # 获取授权URL
    auth_url = publisher.get_auth_url()
    print(f"请访问: {auth_url}")

    # 输入回调后的code
    code = input("输入授权码: ")
    await publisher.authenticate(code)

    # 认证成功后,token会自动保存到本地

asyncio.run(setup())

方法二:直接使用已有Token

# 设置环境变量
export BILIBILI_ACCESS_TOKEN=your_token

发布视频

import asyncio
from pathlib import Path
from src.publisher import (
    create_bilibili_publisher,
    BilibiliVideoMetadata,
    BILIBILI_CATEGORIES,
)

async def publish_video():
    # 创建发布器
    publisher = await create_bilibili_publisher()

    # 准备视频元数据
    metadata = BilibiliVideoMetadata(
        title="气功入门:什么是混元窍",
        desc="混元窍是气功修炼中的重要概念,今天我们来聊聊它...",
        tag=["气功", "健康", "养生"],
        tid=BILIBILI_CATEGORIES["知识"],  # 95 = 知识区
        dynamic="每天10分钟,聊聊气功那些事儿",
        copyright=1,  # 1=原创
    )

    # 发布视频
    result = await publisher.publish(
        video_path=Path("episodes/ep001/video.mp4"),
        metadata=metadata,
        progress_callback=lambda uid, uploaded, total:
            print(f"进度: {uploaded}/{total}"),
    )

    print(f"✅ 发布成功!")
    print(f"BVID: {result['bvid']}")
    print(f"AID: {result['aid']}")

asyncio.run(publish_video())

B站分区ID对照

名称 TID 名称 TID
知识 95 游戏 4
日常 21 娱乐 5
生活 21 影视 181
科技 95 运动 160

微信公众号发布

配置公众号

# 在微信公众平台获取AppID和AppSecret
# 设置环境变量
export WECHAT_MP_APP_ID=your_app_id
export WECHAT_MP_APP_SECRET=your_app_secret

发布图文消息

import asyncio
from pathlib import Path
from src.publisher import (
    create_wechat_publisher,
    WechatArticle,
    create_article_from_episode,
)

async def publish_article():
    # 创建发布器
    publisher = await create_wechat_publisher()

    # 方式一:直接创建文章
    article = WechatArticle(
        title="气功入门:什么是混元窍",
        author="灵通问道",
        digest="混元窍是气功修炼中的重要概念...",
        content="<p>文章HTML内容...</p>",
        thumb_media_id="封面图片素材ID",
        show_cover_pic=1,
    )

    # 方式二:从节目内容创建
    article = create_article_from_episode(
        title="气功入门:什么是混元窍",
        content="混元窍是气功修炼中的重要概念...",
        cover_image_id="封面图片素材ID",
    )

    # 先预览(可选)
    # await publisher.preview(
    #     media_id="素材ID",
    #     openid="你的openid",
    # )

    # 发布
    result = await publisher.publish_article(article)
    print(f"✅ 发布成功! msg_id: {result['msg_id']}")

asyncio.run(publish_article())

上传图片素材

async def upload_image():
    publisher = await create_wechat_publisher()

    # 上传封面图片
    result = await publisher.uploader.upload_article_thumb(
        image_path=Path("cover.jpg"),
    )

    print(f"✅ 上传成功! media_id: {result.media_id}")
    return result.media_id

asyncio.run(upload_image())

常见问题

B站相关

Q: 如何获取B站 Client ID? A: 访问 https://openhome.bilibili.com/ 创建应用

Q: Access Token多久过期? A: 有效期约30天,过期后需重新授权

Q: 上传视频失败? A: 检查: 1. 视频格式(推荐MP4) 2. 文件大小(<4GB) 3. 网络连接

微信公众号相关

Q: 群发消息有次数限制吗? A: 订阅号每天1次,服务号每月4次

Q: 预览功能怎么用? A: 提供你的openid,可以预览发送给自己

Q: 如何获取openid? A: 用户关注公众号后,可通过用户管理接口获取


API参考

BilibiliPublisher

class BilibiliPublisher:
    async def authenticate(code: str) -> bool
        # 完成OAuth认证

    def get_auth_url(state: str = "") -> str
        # 获取授权URL

    async def publish(
        video_path: Path,
        metadata: BilibiliVideoMetadata,
        progress_callback: callable = None,
    ) -> Dict[str, Any]
        # 上传并发布视频

    async def get_user_info() -> Dict[str, Any]
        # 获取用户信息

WechatMPPublisher

class WechatMPPublisher:
    async def upload_articles(
        articles: List[WechatArticle],
    ) -> str
        # 上传图文素材

    async def send_all(
        media_id: str,
        send_ignore_reprint: int = 0,
    ) -> Dict[str, Any]
        # 群发给所有粉丝

    async def preview(
        media_id: str,
        openid: str,
    ) -> Dict[str, Any]
        # 预览发送

    async def publish_article(
        article: WechatArticle,
        preview_openid: str = None,
    ) -> Dict[str, Any]
        # 发布文章

开发路线

Phase 1 (已完成)

  • ✅ B站API基础框架
  • ✅ 微信公众号API基础框架

Phase 2 (规划中)

  • [ ] 喜马拉雅API集成
  • [ ] 抖音API集成
  • [ ] 小红书API集成

Phase 3 (规划中)

  • [ ] 统一发布CLI
  • [ ] 定时发布功能
  • [ ] 发布状态监控

更新: 2026-04-03 维护: 灵通 + 灵极优