受够了重复工作,一怒之下手写一个多平台文章同步工具

背景

作为喜欢分享技术博客的程序员,我经常需要在知乎、CSDN、今日头条、掘金四个平台同步内容。步骤如下:

  1. 打开平台
  2. 找到创作中心
  3. 复制文章
  4. 调整格式(有的平台支持md格式,有的只支持html格式)
  5. 设置分类,标签,摘要等等参数
  6. 发布文章...

肉眼可见的繁琐, 然后想去找找看看有没有开源的工具,有是有,要么年久失修,没人维护,例如wechatSync工具; 要么就是没有我想要的同步的平台,例如:mdnicep平台; 该平台,经常失败,而且不能同步掘金,于是一怒之下,就自己开发了一个工具。

实现过程

实现这个工具不难, 就是繁琐, 需要去各个平台抓包,查看文章发布流程,耗时两个小时,终于弄清楚了各个平台的发布流程。大体都如下:

  1. 创建草稿
  2. 更新草稿
  3. 发布文章
  4. 抓到调用接口需要的header,和 cookie
  5. 程序发起调用

但是也有不一样的,我把每个平台的接口和具体步骤都整理出来,供大家参考。

掘金

掘金发表文章需要用到两个接口

  1. 创建草稿:api.juejin.cn/content_api...
  2. 发布文章: api.juejin.cn/content_api...

接口鉴权

  • 鉴权只需要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());
        }
    }

知乎

知乎发布文章流程

  1. 创建草稿:zhuanlan.zhihu.com/api/article...
  2. 对草稿设置主题:zhuanlan.zhihu.com/api/article...
  3. 发表文章:www.zhihu.com/api/v4/cont...

鉴权

  • 需要cookie
  • 需要header

头条

流程

  1. 创建草稿:mp.toutiao.com/mp/agw/arti...
  2. 发布文章: mp.toutiao.com/mp/agw/arti...

草稿和文章的接口相同,通过参数控制草稿还是正式发布

鉴权

  • 需要cookie
  • 需要header

CSDN

csdn 最简单,一个接口就能搞定

bizapi.csdn.net/blog-consol...

鉴权

  • 需要cookie
  • 需要header

效果

同步结果

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

小结

目前发布文章的时候分类标签 等参数,都是写死的, 后期可以完善做动态获取。待完善功能:

  1. 分类,标签动态处理
  2. 上传图片到平台 (目前可以用图床解决)

最后

如果文章对你有帮助,点个免费的赞鼓励一下吧!关注gzh:加瓦点灯, 每天推送干货知识!关注后提供工具源码哦!

相关推荐
小威要向诸佬学习呀43 分钟前
2025年软件外包避坑指南与平台推荐:开发者实用经验分享
后端
冒泡的肥皂43 分钟前
2PL+MVCC看一些场景
数据库·后端·mysql
bcbnb1 小时前
Charles 抓不到包怎么办?一线工程师的排查与真机抓包流程
后端
bcbnb1 小时前
IPA 一键加密工具实战,用多工具组合把加固做成一次性与可复用的交付能力(IPA 一键加密/Ipa Guard CLI/成品加固)
后端
麦兜*1 小时前
Spring Boot 应用 Docker 监控:Prometheus + Grafana 全方位监控
spring boot·后端·spring cloud·docker·prometheus
该用户已不存在1 小时前
Vibe Coding 入门指南:从想法到产品的完整路径
前端·人工智能·后端
申阳1 小时前
Day 3:01. 基于Nuxt开发个人呢博客项目-初始化项目
前端·后端·程序员
铁锹少年2 小时前
当多进程遇上异步:一次 Celery 与 Async SQLAlchemy 的边界冲突
分布式·后端·python·架构·fastapi
曾经的三心草2 小时前
springcloud二-Seata3- Seata各事务模式
后端·spring·spring cloud
王中阳Go2 小时前
又整理了一场真实Golang面试复盘!全是高频坑+加分话术,面试遇到直接抄
后端·面试·go