背景
作为喜欢分享技术博客的程序员,我经常需要在知乎、CSDN、今日头条、掘金四个平台同步内容。步骤如下:
- 打开平台
- 找到创作中心
- 复制文章
- 调整格式(有的平台支持md格式,有的只支持html格式)
- 设置分类,标签,摘要等等参数
- 发布文章...
肉眼可见的繁琐, 然后想去找找看看有没有开源的工具,有是有,要么年久失修,没人维护,例如wechatSync工具; 要么就是没有我想要的同步的平台,例如:mdnicep平台; 该平台,经常失败,而且不能同步掘金,于是一怒之下,就自己开发了一个工具。
实现过程
实现这个工具不难, 就是繁琐, 需要去各个平台抓包,查看文章发布流程,耗时两个小时,终于弄清楚了各个平台的发布流程。大体都如下:
- 创建草稿
- 更新草稿
- 发布文章
- 抓到调用接口需要的header,和 cookie
- 程序发起调用
但是也有不一样的,我把每个平台的接口和具体步骤都整理出来,供大家参考。
掘金
掘金发表文章需要用到两个接口
接口鉴权
- 鉴权只需要cookie即可
代码
java
@Override
public RestResult doSyncArticle(Article article, ThirdPartyPlatformWithAuthInfo thirdPartyPlatform) {
try {
// 1. 创建草稿
JuejinArticleDTO.CreateDraftRequest createRequest = new JuejinArticleDTO.CreateDraftRequest();
createRequest.setTitle(article.getTitle());
createRequest.setMark_content(article.getContent());
createRequest.setBrief_content(article.getSummary());
log.info("创建草稿请求参数: {}", JSON.toJSONString(createRequest));
String createDraftJson = JSON.toJSONString(createRequest);
RestResult<String> createDraftResponseString = httpClient.doPostJson(thirdPartyPlatform.getCreateDraftUrl(), createDraftJson, buildRequestHeader(thirdPartyPlatform.getHeader()), transferCookieToArray(thirdPartyPlatform.getCookie()));
log.info("创建草稿相应: {}", createDraftResponseString);
JuejinArticleDTO.CreateDraftResponse createDraftResponse = JSON.parseObject(createDraftResponseString.getData(), JuejinArticleDTO.CreateDraftResponse.class);
if (createDraftResponse.getErr_no() != 0){
log.error("创建草稿失败: {}", createDraftResponseString);
return RestResult.error("创建草稿失败");
}
String draftId = createDraftResponse.getData().getId();
JuejinArticleDTO.PublishRequest request = new JuejinArticleDTO.PublishRequest();
request.setDraft_id(draftId);
RestResult publishResponseString = httpClient.doPostJson(thirdPartyPlatform.getPublishArticleUrl(), JSON.toJSONString(request), buildRequestHeader(thirdPartyPlatform.getHeader()), transferCookieToArray(thirdPartyPlatform.getCookie()));
log.info("发布文章结果:{}", publishResponseString);
JuejinArticleDTO.CreateDraftResponse publishResutl =JSON.parseObject(publishResponseString.getData().toString(), JuejinArticleDTO.CreateDraftResponse.class);
if (publishResutl.getErr_no() != 0){
return RestResult.fail(publishResutl.getErr_msg());
}
return publishResponseString;
} catch (Exception e) {
log.error("Error syncing article to Juejin: {}", e.getMessage(), e);
return RestResult.error("同步到掘金失败"+e.getMessage());
}
}
知乎
知乎发布文章流程
- 创建草稿:zhuanlan.zhihu.com/api/article...
- 对草稿设置主题:zhuanlan.zhihu.com/api/article...
- 发表文章:www.zhihu.com/api/v4/cont...
鉴权
- 需要cookie
- 需要header
头条
流程
草稿和文章的接口相同,通过参数控制草稿还是正式发布
鉴权
- 需要cookie
- 需要header
CSDN
csdn 最简单,一个接口就能搞定
bizapi.csdn.net/blog-consol...
鉴权
- 需要cookie
- 需要header
效果

同步结果

工具设置 如果cookie信息过期了, 通过同步记录可以看到原因, 此时可以重新上传cookie,然后再同步

小结
目前发布文章的时候分类 , 标签 等参数,都是写死的, 后期可以完善做动态获取。待完善功能:
- 分类,标签动态处理
- 上传图片到平台 (目前可以用图床解决)
最后
如果文章对你有帮助,点个免费的赞鼓励一下吧!关注gzh:加瓦点灯, 每天推送干货知识!关注后提供工具源码哦!