前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java公众号开发系列(四):文章草稿操作笔记

Java公众号开发系列(四):文章草稿操作笔记

原创
作者头像
小明互联网技术分享社区
发布于 2024-01-30 05:12:39
发布于 2024-01-30 05:12:39
48500
代码可运行
举报
文章被收录于专栏:公众号开发公众号开发
运行总次数:0
代码可运行

上一篇给大家介绍了新增和获取永久素材相关的实战,今天给大家介绍文章草稿操作相关的实战。

Java公众号开发系列(三):新增和获取永久素材

公众号草稿是指在公众号后台编辑的尚未发布的文章。草稿功能可以让你在编辑文章时暂时保存并预览,以便在最终决定发布之前进行修改和调整。

公众号开发非常重要的环节就是创建草稿文章,今天就来给大家介绍使用Java来对公众号草稿的新增、查询操作。

一、 新增草稿

请求url:https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN

请求参数

参数

说明

title

标题

author

文章的作者,非必填

digest

文章的摘要内容,如果为空则默认,则默认抓取正文前54个字。非必填

content

文章内容,支持HTML标签,内容必须少于2万字符,小于1M,如果涉及文章内容的图片,需要调用 "上传图文消息内的图片获取URL"接口获取。外部图片地址无效会被过滤掉。

content_source_url

原文地址支持第三方链接

thumb_media_id

文章的封面图片Id(必须是永久图片素材MediaID)

need_open_c二、omment

是否打开评论,0不打开(默认),1打开

only_fans_can_comment

是否粉丝才可评论,0所有人可评论(默认),1粉丝才可评论

接口返回说明

正确返回结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "media_id":"",
    "item":[
        {
            "index":0,
            "ad_count":0
        },
        {
            "index":1,
            "ad_count":0
        }
    ]
}

实现代码

定义文章实体ArticleVO.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package models;

/**
 * 草稿明细
 */
public class ArticleVO {
    private String title;
    private String author;
    private String digest;
    private String content;
    private String content_source_url;
    private String thumb_media_id;
    private int need_open_comment;
    private int only_fans_can_comment;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getDigest() {
        return digest;
    }

    public void setDigest(String digest) {
        this.digest = digest;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent_source_url() {
        return content_source_url;
    }

    public void setContent_source_url(String content_source_url) {
        this.content_source_url = content_source_url;
    }

    public String getThumb_media_id() {
        return thumb_media_id;
    }

    public void setThumb_media_id(String thumb_media_id) {
        this.thumb_media_id = thumb_media_id;
    }

    public int getNeed_open_comment() {
        return need_open_comment;
    }

    public void setNeed_open_comment(int need_open_comment) {
        this.need_open_comment = need_open_comment;
    }

    public int getOnly_fans_can_comment() {
        return only_fans_can_comment;
    }

    public void setOnly_fans_can_comment(int only_fans_can_comment) {
        this.only_fans_can_comment = only_fans_can_comment;
    }

    @Override
    public String toString() {
        return "ArticleVO{" +
                "title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", digest='" + digest + '\'' +
                ", content='" + content + '\'' +
                ", content_source_url='" + content_source_url + '\'' +
                ", thumb_media_id='" + thumb_media_id + '\'' +
                ", need_open_comment=" + need_open_comment +
                ", only_fans_can_comment=" + only_fans_can_comment +
                '}';
    }
}

草稿实体 DraftVO.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package models;

import java.util.List;

/**
 * 草稿实体
 */
public class DraftVO {
    private List<ArticleVO> articles;

    public List<ArticleVO> getArticles() {
        return articles;
    }

    public void setArticles(List<ArticleVO> articles) {
        this.articles = articles;
    }
}

新增草稿方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 新增草稿
     *
     * @param token
     */
    private static void AddDraft(String token) {
        String addDraftUrl = "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=" + token;
        DraftVO postVO = new DraftVO();
        List<ArticleVO> list = new ArrayList<>();
        // 第一篇图文内容
        ArticleVO model = new ArticleVO();
        model.setTitle("文章测试1");
        model.setAuthor("小明");
        model.setDigest("我是摘要内容01");
        model.setContent("<section class=\"_135editor\" data-tools=\"\" data-id=\"105278\">\n" +
                "\t<section style=\"margin: 10px auto;text-align: center;\">\n" +
                "\t\t<section style=\"font-size: 36px;letter-spacing: 1.5px;color: #0b79ff;text-align: left;margin: 0 0 -25px 40px;transform:   rotate(0deg);-webkit-transform:   rotate(0deg);-moz-transform:   rotate(0deg);-o-transform:   rotate(0deg);\">\n" +
                "\t\t\t<strong>0</strong><strong class=\"autonum\" data-original-title=\"\" title=\"\">1</strong>\n" +
                "\t\t</section>\n" +
                "\t\t<section style=\"display: flex;justify-content: flex-start;align-items: center;margin: 0 0 -4px 25px;\">\n" +
                "\t\t\t<section style=\"width: 7px;height: 7px;background-color: #0b79ff;border-radius: 50%;box-sizing:border-box;\"></section>\n" +
                "\t\t\t<section style=\"width: 20%;height: 1px;background-color: #fff;box-sizing:border-box;max-width: 20% !important;\" data-width=\"20%\"></section>\n" +
                "\t\t</section>\n" +
                "\t\t<section style=\"border: 1px solid #5ca6ff;padding: 30px 25px;border-radius: 12px;box-sizing:border-box;\">\n" +
                "\t\t\t<section data-autoskip=\"1\" class=\"135brush\" style=\"text-align: justify;line-height:1.75em;letter-spacing: 1.5px;font-size:14px;color:#333333;background: transparent;\">\n" +
                "\t\t\t\t<p style=\"vertical-align:inherit;\">\n" +
                "\t\t\t\t\t我是第一篇图文内容\n" +
                "\t\t\t\t</p>\n" +
                "\t\t\t</section>\n" +
                "\t\t</section>\n" +
                "\t</section>\n" +
                "\t<section class=\"_135editor\" data-role=\"paragraph\">\n" +
                "\t\t<p style=\"vertical-align:inherit;\">\n" +
                "\t\t\t<br/>\n" +
                "\t\t</p>\n" +
                "\t</section>\n" +
                "</section>\n" +
                "<section data-role=\"paragraph\" class=\"_135editor\">\n" +
                "\t<p >\n" +
                "\t\t<br/>\n" +
                "\t</p>\n" +
                "</section>");
        model.setThumb_media_id("");
        model.setNeed_open_comment(1);
        model.setOnly_fans_can_comment(1);
        list.add(model);

        // 第一篇图文内容
        ArticleVO model2 = new ArticleVO();
        model2.setTitle("文章测试1");
        model2.setAuthor("小明");
        model2.setDigest("我是摘要内容01");
        model2.setContent("<section class=\"_135editor\" data-tools=\"\" data-id=\"118498\">\n" +
                "\t<section style=\"margin: 10px auto;\">\n" +
                "\t\t<section>\n" +
                "\t\t\t<section style=\"border: 1px solid #4b73b5;border-right: none;padding: 15px 15px 13px 15px;box-sizing:border-box;\">\n" +
                "\t\t\t\t<section data-autoskip=\"1\" class=\"135brush\" style=\"text-align: justify;line-height:1.75em;letter-spacing: 1.5px;font-size:14px;color:#333333;background: transparent;\">\n" +
                "\t\t\t\t\t<p>\n" +
                "\t\t\t\t\t\t我是第二篇图文内容\n" +
                "\t\t\t\t\t</p>\n" +
                "\t\t\t\t</section>\n" +
                "\t\t\t</section>\n" +
                "\t\t\t<section style=\"display: flex;justify-content: flex-start;margin: -21px 0 0 0;padding: 0  0 0 1px;box-sizing:border-box;\">\n" +
                "\t\t\t\t<section style=\"width: 0;height: 1px;border-bottom: 20px solid #fabb11;border-right: 20px solid transparent;box-sizing:border-box;\"></section>\n" +
                "\t\t\t</section>\n" +
                "\t\t</section>\n" +
                "\t</section>\n" +
                "</section>\n" +
                "<section data-role=\"paragraph\" class=\"_135editor\">\n" +
                "\t<p >\n" +
                "\t\t<br/>\n" +
                "\t</p>\n" +
                "</section>");
        model2.setThumb_media_id("");
        model2.setNeed_open_comment(1);
        model2.setOnly_fans_can_comment(1);
        list.add(model2);
        postVO.setArticles(list);
        String result= HttpUtil.post(addDraftUrl, JSONUtil.toJsonStr(postVO));
        System.out.println("新增草稿返回结果:"+result);

    }

输出结果

二、获取单个草稿实体

请求url:https://api.weixin.qq.com/cgi-bin/draft/get?access_token=ACCESS_TOKEN

请求类型:Post

参数

是否必须

说明

access_token

调用接口凭证 Get参数

media_id

要获取的草稿的media_id Body参数

返回参数说明

参数

描述

title

标题

author

文章作者

digest

图文消息的摘要

content

图文消息的具体内容

content_source_url

图文消息的原文地址,即点击“阅读原文”后的URL

thumb_media_id

图文消息的封面永久素材图片素材id

show_cover_pic

是否在正文显示封面。默认为0,不支持修改

need_open_comment

是否打开评论,0不打开(默认),1打开

only_fans_can_comment

是否粉丝才可评论,0所有人可评论(默认),1粉丝才可评论

url

草稿的临时访问链接

代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 根据草稿id获取单个草稿内容
     * @param token
     * @param mediaId
     */
    private static void GetDraftByMediaId(String token, String mediaId) {
        String url = "https://api.weixin.qq.com/cgi-bin/draft/get?access_token=" + token;
        // 定义body 实体
        HashMap<String,Object> map=new HashMap<>();
        map.put("media_id",mediaId);
        String result = HttpUtil.post(url, JSONUtil.toJsonStr(map));
        System.out.println(result);
    }

输出结果

三、获取草稿列表

请求url:https://api.weixin.qq.com/cgi-bin/draft/batchget?access_token=ACCESS_TOKEN

调用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "offset":OFFSET,
    "count":COUNT,
    "no_content":NO_CONTENT
}

请求参数说明

参数

是否必须

说明

access_token

调用接口凭证 url拼接

offset

从全部素材的该偏移位置开始返回,0表示从第一个素材返回

count

获取草稿的数量,取值在1到20之间

no_content

1 表示不返回 content 字段,0 表示正常返回,默认为 0

返回参数说明

参数

描述

total_count

草稿素材的总数

item_count

本次调用获取的素材的数量

media_id

图文消息的id

title

图文消息的标题

author

文章作者

digest

图文消息的摘要

content

图文消息的具体内容,

content_source_url

图文消息的原文地址,即点击“阅读原文”后的URL

thumb_media_id

图文消息的封面永久图片素材id

show_cover_pic

是否在正文显示封面为0,即不展示

need_open_comment

是否打开评论,0不打开(默认),1打开

only_fans_can_comment

是否粉丝才可评论,0所有人可评论(默认),1粉丝才可评论

url

草稿的临时链接

update_time

这篇图文消息素材的最后更新时间

代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 根据草稿列表
     * @param token
     */
    private static void GetDraftList(String token) {
        String url = "https://api.weixin.qq.com/cgi-bin/draft/batchget?access_token=" + token;
        // 定义body 实体
        HashMap<String,Object> map=new HashMap<>();
        map.put("offset",0);
        map.put("count",2);
        map.put("no_content",1);

        String result = HttpUtil.post(url, JSONUtil.toJsonStr(map));
        System.out.println(result);
    }

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
行为型设计模式(1)——责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility)是设计模式的一种,属于行为型设计模式。
恋喵大鲤鱼
2021/06/17
4480
行为型设计模式(1)——责任链模式(Chain of Responsibility)
设计模式----责任链模式
一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现。
大忽悠爱学习
2021/11/15
6540
设计模式-责任链模式
责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。
码哥字节
2020/03/24
5430
拯救代码洪水:深入揭秘责任链模式的设计之道
今天和大家聊一聊软件设计中关系型模式的另一种强大模式:责任链模式(Chain of Responsibility)。
程序视点
2023/09/13
1850
拯救代码洪水:深入揭秘责任链模式的设计之道
设计模式之责任链模式及典型应用
一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现。
小旋锋
2019/01/21
5.2K1
责任链设计模式讲解
很多框架如mybatis,servlet的filter,dubbo,安全框架诸如Spring security、apache shiro都会用到设计模式中的责任链模式,所以学习责任链模式成为帮助你学习以上这些框架的一个好的手段之一。今天我们就来了解一下责任链模式。
码农小胖哥
2019/12/10
5180
责任链设计模式讲解
行为型设计模式:责任链模式以及mybatis中的责任链
职责链模式定义是把一个请求传递给多个对象来处理,这些对象都放在一条链上,以实现发送和接受解耦。GoF的《设计模式》中英文定义如下:
jinjunzhu
2020/08/20
4770
设计模式学习笔记(十四)责任链模式实现及在Filter中的应用
责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
归思君
2023/10/16
5620
设计模式学习笔记(十四)责任链模式实现及在Filter中的应用
Java描述设计模式(15):责任链模式
这里分析的几个方法,都是从DispatcherServlet类的doDispatch方法中请求的。
知了一笑
2019/10/23
4180
Java描述设计模式(15):责任链模式
设计模式之责任链模式
本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。
程序员田同学
2022/08/24
3490
设计模式之责任链模式
设计模式----责任链模式详解
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
叔牙
2020/11/19
4530
设计模式----责任链模式详解
一文搞懂设计模式—责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,并且每个对象可以选择自己是否处理该请求或将其传递给下一个对象。这种模式将请求的发送者和接收者解耦,同时提供了更大的灵活性和可扩展性。
BookSea
2024/01/30
1.9K0
一文搞懂设计模式—责任链模式
Java设计模式学习记录-责任链模式
 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式)。
纪莫
2018/08/27
4430
Java设计模式学习记录-责任链模式
设计模式之责任链模式
总体而言,Spring框架中广泛使用适配器模式来处理不同接口之间的适配问题,使得不同的组件、框架或者接口能够协同工作,提供更灵活、可扩展的组件集成。适配器模式有助于降低组件之间的耦合度,同时提高了系统的可维护性和可扩展性。
九转成圣
2024/04/10
1680
设计模式之责任链模式
设计模式之责任链模式
责任链模式(Chain of Responsibility Pattern)属于设计模式的行为型模式。责任链模式与多米诺骨牌有点类似,请求在链中从前向后传递,一直到最后一个。当然责任链的处理可以复杂的多。
Dylan Liu
2019/11/27
6020
Java设计模式(十七)----责任链模式
责任链模式 一、 概念 二、 引子 三、 结构 四、 具体案例 一、概念 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到 链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织 和分配责任。 二、引子 从击鼓传花谈起   击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐
汤高
2018/01/11
1.6K0
Java设计模式(十七)----责任链模式
【设计模式】之责任链模式
责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。
青山师
2023/05/05
2560
【设计模式】之责任链模式
Java设计模式:使用责任链模式和状态模式优化‘审批流程‘
在现代软件开发过程中,动态审核流程是确保数据质量和流程合规性的关键环节。本文将深入探讨一种链式处理模式,通过详实的代码示例和理论分析,展示如何高效构建一个灵活的审核流程。关键词:动态审核流程,链式处理模式,Java实现。
默 语
2024/11/20
5400
Java设计模式:使用责任链模式和状态模式优化‘审批流程‘
【设计模式系列】行为型之责任链模式
责任链模式,小编在自己项目迭代过程也参与了维护和设计实现;本篇博文主要针对该设计模型进行总结和实践; 简单举例日常生活或者工作中能够接触的责任链模式场景:采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程; 本文中主要借助比较常见的场景OA请假流程: 作为底层员工的溪源同学发起一个请假申请; 1.当溪源请假天数小于3天时,只需要得到上级主管批准即可; 2.当溪源请假天数大于3天时,主管批准后还需要提交给经理审批即可; 3.当溪源确实有事需要请假超过7天时(比如,度个蜜月啦,哈哈~)那经理审批通过,肯定要进一步提交给总经理审批。 相信这个场景大家应该可以非常轻松的能够理解; 简单的一个流程图如下图:
沁溪源
2021/06/09
3730
【设计模式系列】行为型之责任链模式
三、责任链模式
在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。
Yuyy
2022/09/21
3030
三、责任链模式
推荐阅读
相关推荐
行为型设计模式(1)——责任链模式(Chain of Responsibility)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验