内容 API 开放,欢迎各位独立博客主进行连接

本贴最后更新于 1609 天前,其中的信息可能已经事过境迁

概述

该文档面向的是 B3log 分布式社区博客端节点开发者,如果你只是想开发链滴的客户端,请参考社区客户端 API 文档

B3log 构思

B3log 构思目前已经基本实现, SoloPipe链滴已经可以进行帖子、回帖内容交互:

  • 使用博客发布文章、评论会自动推送到链滴社区
  • 在链滴社区上发布帖子、回帖也可以推送到博客

内容 API

核心内容 API 一共有 2 个。前 2 个 API 由社区实现,提供给博客进行调用;后 2 个由博客实现,提供给社区进行调用:

  1. 博客发布/更新文章 -> 社区发布/更新帖子
  2. 博客发布评论 -> 社区发布回帖
  3. 社区发布/更新帖子 -> 博客发布/更新文章
  4. 社区发布回帖 -> 博客发布评论

其中 2、4 这两个 API 由 vcomment 组件实现。

账号关联

  • 博客通过社区账号登录初始化

如果一切顺利,你的博客账号和社区账号就自动设置了相同的用户名和 B3 Key 了,然后再完成 B3 同步设置就完成关联账号了。

关联账号的核心要义是博客端和社区端的 B3 Key 必须相同,因为后续的数据交互是通过 B3 Key 进行校验的。

API 规范

上面我们介绍了基本原理,下面介绍 API 细节。

博客发布/更新文章推送社区

发布文章和更新文章使用相同的 API,如果 article.id 已经存在则视为更新操作。

调用地址

参数

在 POST body 中指定 JSON 格式的实参:

{
    "article": {
        "id": "1165070220000", 
        "title": "这是一篇测试文章", 
        "permalink": "/test-post", 
        "tags": "Sandbox", 
        "content": "上面请使用 Sandbox 作为标签。"
    }, 
    "client": {
        "title": "我的个人博客", 
        "host": "http://xxx.com", 
        "name": "Solo", 
        "ver": "3.0.0", 
        "userName": "88250", 
        "userB3Key": "xxxx"
    }
}
  • article.id:博客的文章 id,如果该 id 文章在社区已经存在,则视为更新
  • article.title:文章标题
  • article.permalink:博客文章固定链接
  • article.tags:文章标签,英文输入状态的逗号分隔
  • article.content:文章内容,HTML 或 Markdown 格式
  • client.title:博客站点标题
  • client.host:博客站点 URL
  • client.name:博客程序名
  • client.ver:博客程序版本号
  • client.userName:文章作者用户名
  • client.userB3Key:文章作者 B3 Key

博客发布评论推送社区

请参考 vcomment 文档。

社区发布/更新帖子推送博客

接收文章的接口由博客实现,这里给出的是社区去调用时候的规范。

调用地址

  • 调用用户在 B3 设置的 "博客收文接口" 地址
  • 使用 POST 方法

参数

在 POST body 中指定 JSON 格式的实参:

{
    "article": {
        "id": "", 
        "title": "", 
        "content": "", 
        "contentHTML": "", 
        "tags": "tag1,tag2,tag3"
    }, 
    "client": {
        "userName": "", 
        "userB3Key": ""
    }
}
  • article.id:社区帖子 id,如果该 id 帖子在博客已经存在,则视为更新
  • article.title:帖子标题
  • article.content:帖子内容,Markdown 格式
  • article.contentHTML:帖子内容,HTML 格式
  • article.tags:帖子标签,英文逗号分隔
  • client.userName:帖子作者用户名
  • client.userB3Key:帖子作者 B3 Key

注意:从社区同步帖子到博客时,收文接口实现文章保存后不能再走同步回社区的逻辑。

社区发布回帖推送博客

请参考 vcomment 文档。

使用须知

从博客同步文章到社区请注意如下规则:

  • 同步垃圾内容账号会被封禁
  • 同步间隔不能小于 10 分钟

如果遇到不能同步的问题,请检查博客端日志。

  • 系统公告

    B3log 社区相关的重要公告,比如新特性上线,运营策略调整等。

    39 引用 • 3578 回帖 • 681 关注
  • Rhy
    1 引用 • 156 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 203 关注
3 操作
88250 在 2020-06-26 13:14:36 更新了该帖
88250 在 2020-03-31 11:57:02 更新了该帖
88250 在 2020-03-08 10:48:03 更新了该帖

相关帖子

优质回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone1101

    string(99) "{"succ":true,"sc":"[article.title] length should be [1, 32]","msg":"Post an article successfully"} "

    你这个标题限制太短了,英文的随随便便都超了

  • someone1101

    []1457776732583

    其实到现在还有一部分主机不支持 PUT 的,只能 GET / POST……

  • 88250

    @zsx

    1. IP 和 UA 不给应该问题不大,毕竟不是关键信息,我们先把基础建立好,后期完善时再添加~
    2. 文章标题的长度限制确实短了点,会调整为 [1, 128]
    3. 社区的 API 都是 POST 的
  • someone1101

    @88250 那台主机的 IIS 日志:
    2016-03-12 09:46:45 W3SVC173 xxxxxxxx PUT xxxxxxxxxxxx action=comment 80 - 121.40.*.阿里云的某 IP Java/1.7.0_80 403 1 0 1592 560

    我不是写 Java 的不可能有 Java 日志,那只能是同步过来的嘛……

  • 88250

    @zsx 确实是我的错,不好意思啦,马上修正~

  • someone1101

    @88250 话说一定要 Tags 标签真的大丈夫吗

  • someone1101

    @zsx 去掉“标签”

  • 88250

    @zsx 传“分类”过来也行,不过这个的确应该是个可选参数,不传也行。我马上调整一下~

  • someone1101

    @88250 api 出错时的返回值不太对劲,比如当 comment.articleId 为 null 时正常应该是类型不匹配返回错误,为一个不存在的 id 时返回文章不存在;article.tags 为""时返回未提交 Tags 的错误;这些都是返回 success 的有点坑。

    另外服务器的 User-Agent 是不是标明一下是 hacpai 会合适一点,用默认的 Java/1.7.0_80 总感觉很怪异。

    另外,正文里完整插件一节 Markdown 似乎没写好。

  • someone1101

    @88250 服务器回传时要不要把【是否该网站站长】这个值也一并传入,这样也方便做身份验证。以及,我认为把服务器接到评论时的时间也写入 api 更好,保证双方时间一致性。

  • 88250

    @zsx

    1. API 校验出错后的返回 succ 字段的值会调整为 false
    2. 调用博客同步评论时的 UA 已加入 B3log Symphony/{ver}
    3. 正文的 MD 处理的确有一些问题,后续会尽力完善
    4. 传入邮箱了,因为社区这边不能确切知道是不是博客站长,这个判断逻辑上走不通
    5. 评论时间这个估计是一致不了的,社区这边是异步处理,会存在一定延时

    多谢达达指出这么多问题,我马上部署一版看看~

  • someone1101

    @88250 这个还是可以判断的,根据实现来看的话我觉得是不是可以让 isAdmin = 楼主.id == 回帖人.id
    时间上我主要是考虑到如果评论多了,hacpai 服务器堵塞住了的话,取到的当前时间可能和评论发出的时间有较大距离

  • 88250

    @zsx 哦,我明白了,这样的确可以判断。好的同步至博客的 API 里面我加一个字段 isArticleAuthor 来说明,时间字段也加上了,你看下该帖正文。

    社区服务已经重新部署好了,麻烦帮忙验证一下 🍇

  • 88250

    @zonghua @DT27

    两位,评论的 API 有细节调整,请参考一下正文中的格式,主要是社区同步评论调用博客接口时 comment 结构加了两个字段,分别用来标识是否该评论人是贴主,以及评论时间毫秒。

  • someone1101

    1457785483188

    time == 0??

  • 88250

    @zsx 其他的都 OK 了吗?这个字段我再检查一下

  • zonghua

    1457788265865

    有没有人再写一个更好一点的 Wordpress 插件呢

  • zonghua

    @zonghua 我得写个操作面板

  • 88250

    @zonghua 暂时没有了,你一定要加油!

  • imlonghao

    挺好的,打算把自己博客的 Disqus 去掉然后自己写一个然后对接社区

  • 88250

    @imlonghao 你的博客是什么系统?

  • imlonghao

    @88250 Pyth9n 自己写的,没有什么系统

  • 88250

    @imlonghao 哦,欢迎对接~

    有空的话帮忙抽象一下 [Python] 的 SDK,就是上面提到的 基础实现 部分~

  • itfanr

    希望能写一个 hexo 插件。静态博客的市场还是不小的。再者,能不能提供让博主自己提交自己的博客或者博文地址。这样方便本社区抓取。

  • 88250

    @itfanr [Ghost] 、 [Hexo] 的插件都会有的~

  • itfanr

    @88250 嗯嗯。 hexo 的用户量比较大。

  • 88250

    @DT27 @zonghua @zsx

    从社区同步评论到博客的时候,content 字段目前是 [Markdown] 格式的,是否需要处理成 [HTML] 格式?还是说再加一个 contentHTML 字段?

  • 88250

    @DT27 @zonghua @zsx

    从社区同步评论到博客的时候加了一些字段:

    • comment.contentHTML:评论内容, HTML 格式
    • comment.ua:User-Agent,可能为空字符串 ""
    • comment.ip:IP,可能为空字符串 ""
  • zonghua

    @88250 好好好好,等我更信

  • zonghua

    我上一个 wordpres 的演示站点

  • DT27

    @88250 有点纠结啊,你这意思是 comment.content 跟 comment.contentHTML 都会有内容,只是格式不一样?

  • 88250

    @DT27 嗯,如果博客评论不支持 MD,就用 HTML 格式吧

  • armstrong

    @88250 话说这些 API 调用后返回状态是什么?有没重新投递的机制?

  • 88250

    @armstrong 调用后都会返回“成功”,没有重新投递机制,重投的话比如文章 API,如果带了一样的 id 过来,不存在就是 insert、存在就是 update

  • armstrong

    @88250 所以如果网站临时 down 了,这段时间的评论就同步不过来了?有没主动拉评论的途径?另外楼层号怎么保持一致性?

  • 88250

    @armstrong 嗯,如果社区挂了,就没法保持同步了,只有下次博主更新文章时才有可能再次同步过来。评论的话就没办法了,楼层也不能保证一致。

  • zml2015

    b3log 站内搜索有问题啊

    1 回复
  • 88250

    你是说 solo 博客吧?solo 没有搜索功能,只有集成百度站内搜索,要放到网上才能用,本地环境用不了的。

    1 回复
  • zml2015

    问一下有没有功能更强大一点的开源博客啊

    1 回复
  • 88250

    [WordPress]

  • @88250 怎么关闭同步功能?我不想我的博文被同步过来!

    1 回复
  • 88250

    社区配置里面修改一下 B3 key

    2 回复
  • 好的

  • rossoneri

    社区配置里面的 B3 key 是不让修改的,在草稿箱的文章都被同步过来了,这功能太蛋疼了

    1 回复
  • 88250

    key 在社区可以修改的

    1 回复
  • rossoneri

    我是在内网搭建的,给很多人建了账号,他们根本都没注册 hacpai 的账号,任何在 solo 发的文章都给自动同步到了这里:https://hacpai.com/member/haixue

    1 回复
  • 88250

    你修改一下在社区的 key,都是用的管理员帐号同步的

    2 回复
  • haixue 1

    嗯嗯,找到了,多谢了,已经停掉同步了,我觉得在发文章的时候可以给一个选项是否同步到 hecpai 会更好些

    1 回复
  • 88250 2

    收到,下个版本改进

  • bozong 1

    hello。大半年没来了。前几天还回忆这个社区的名字,没想起来

    1 回复
请输入回帖内容 ...