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

背景

作为喜欢分享技术博客的程序员,我经常需要在知乎、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:加瓦点灯, 每天推送干货知识!关注后提供工具源码哦!

相关推荐
uhakadotcom25 分钟前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
小萌新上大分25 分钟前
SpringCloudGateWay
java·开发语言·后端·springcloud·springgateway·cloudalibaba·gateway网关
uhakadotcom1 小时前
使用Python获取Google Trends数据:2025年详细指南
后端·面试·github
uhakadotcom1 小时前
使用 Python 与 Google Cloud Bigtable 进行交互
后端·面试·github
直视太阳2 小时前
springboot+easyexcel实现下载excels模板下拉选择
java·spring boot·后端
追逐时光者2 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
后端·.net
灼华十一2 小时前
Golang系列 - 内存对齐
开发语言·后端·golang
兰亭序咖啡2 小时前
学透Spring Boot — 009. Spring Boot的四种 Http 客户端
java·spring boot·后端
Asthenia04122 小时前
深入解析Pandas索引机制:离散选择与聚合选择的差异及常见误区
后端