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

背景

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

相关推荐
duapple5 小时前
Golang基于反射的ioctl实现
开发语言·后端·golang
my_styles8 小时前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
免檒9 小时前
go语言协程调度器 GPM 模型
开发语言·后端·golang
不知道写什么的作者10 小时前
Flask快速入门和问答项目源码
后端·python·flask
caihuayuan510 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
一只码代码的章鱼10 小时前
Spring Boot- 2 (数万字入门教程 ):数据交互篇
spring boot·后端·交互
不再幻想,脚踏实地14 小时前
Spring AOP从0到1
java·后端·spring
编程乐学(Arfan开发工程师)14 小时前
07、基础入门-SpringBoot-自动配置特性
java·spring boot·后端
会敲键盘的猕猴桃很大胆14 小时前
Day11-苍穹外卖(数据统计篇)
java·spring boot·后端·spring·信息可视化
极客智谷14 小时前
Spring Cloud动态配置刷新:@RefreshScope与@Component的协同机制解析
后端·spring·spring cloud