JAVA 获取微信公众号发布的文章列表内容

这篇具有很好参考价值的文章主要介绍了JAVA 获取微信公众号发布的文章列表内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 代码业务场景

    一、前提操作

    二、开始操作

    1.获取公众号的开发者id(AppID)和开发者密码(AppSecret),以及设置IP白名单

    2.代码操作

    总结


代码业务场景

最近在给客户开发一款小程序,然后客户还有自己运营的公众号,想要把公众号里面发布的一些内容能够同步到小程序里面进行展示。如下所示,获取公众号里面的发表记录→发布→发表成功的文章内容,删除的内容是获取不到的。

JAVA 获取微信公众号发布的文章列表内容

一、介绍

开始翻了下微信公众号的开发文档,其实文档里面些的很清楚,怎么访问,怎么获取,怎么解析写的一清二处,不清楚的同学可以看下链接:微信开放平台公众号开发文档
看了下网上说的一些还要公众号绑定小程序,其实如果只是单纯的获取公众号里面的文章信息的话,是不需要绑定的,如果要在小程序里面打开公众号返回的文章url的话,才需要绑定。

二、开始操作

1.获取公众号的开发者id(AppID)和开发者密码(AppSecret),以及设置IP白名单

登录微信开放平台,然后用公众号的账号扫描进入,在基本设置里面设置开发者密码和服务器访问的白名单ip,多个ip用回车隔开。

 ​​​JAVA 获取微信公众号发布的文章列表内容

 如本地调试不知道自己本地外网IP的话,可以先不设置,后面debug报错的提示信息里面会有你的ip

如果需要绑定小程序的话,可以点击左侧的小程序管理,没有操作过的话,右边会显示开通。

我自己点击开通点了五六次,等了十分钟才显示出来,不知道是微信的问题还是本地的网络问题。

开通之后,会有添加,填入自己的小程序AppID,即可关联

JAVA 获取微信公众号发布的文章列表内容

2.代码操作

package com.ruoyi.common.core.domain.entity.miniprogram;

import java.util.List;

public class OfficialAccountVo {
    private Integer pageIndex;

    private Integer pageSize;

    private Integer totalPage;

    private List<OfficialAccount> objectList;

    public Integer getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(Integer pageIndex) {
        this.pageIndex = pageIndex;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public List<OfficialAccount> getObjectList() {
        return objectList;
    }

    public void setObjectList(List<OfficialAccount> objectList) {
        this.objectList = objectList;
    }
}
package com.ruoyi.common.core.domain.entity.miniprogram;

public class OfficialAccount {
    private String  title;

    private String url;

    private String thumbUrl;

    private String thumbMedialId;

    private String isDelete;

    private String author;

    private String digest;

    private String content;

    private String onlyFansCanComment;

    private String showOverPic;

    private String contentSourceUrl;

    private String needOpenComment;

    public String getTitle() {
        return title;
    }

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

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getThumbUrl() {
        return thumbUrl;
    }

    public void setThumbUrl(String thumbUrl) {
        this.thumbUrl = thumbUrl;
    }

    public String getThumbMedialId() {
        return thumbMedialId;
    }

    public void setThumbMedialId(String thumbMedialId) {
        this.thumbMedialId = thumbMedialId;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    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 getOnlyFansCanComment() {
        return onlyFansCanComment;
    }

    public void setOnlyFansCanComment(String onlyFansCanComment) {
        this.onlyFansCanComment = onlyFansCanComment;
    }

    public String getShowOverPic() {
        return showOverPic;
    }

    public void setShowOverPic(String showOverPic) {
        this.showOverPic = showOverPic;
    }

    public String getContentSourceUrl() {
        return contentSourceUrl;
    }

    public void setContentSourceUrl(String contentSourceUrl) {
        this.contentSourceUrl = contentSourceUrl;
    }

    public String getNeedOpenComment() {
        return needOpenComment;
    }

    public void setNeedOpenComment(String needOpenComment) {
        this.needOpenComment = needOpenComment;
    }
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.miniprogram.OfficialAccount;
import com.ruoyi.common.core.domain.entity.miniprogram.OfficialAccountVo;
import org.springframework.web.bind.annotation.*;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.*;

@RestController
@RequestMapping("/miniApp/officialAccount")
public class OfficialAccountController {
    /**
     * 获取公众号发布文章列表
     * @param officialAccountVo
     * @return
     * @throws IOException
     */
    @ResponseBody
    @PostMapping(value = "/getContentList")
    private AjaxResult getContentList(@RequestBody OfficialAccountVo officialAccountVo) throws IOException {
        String result1 = getWxAppToken();
        Map<String, Object> token1 = (Map<String, Object>) JSON.parseObject(result1);
//        String path = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" + token1.get("access_token").toString(); --获取素材
        String path = "https://api.weixin.qq.com/cgi-bin/freepublish/batchget?access_token=" + token1.get("access_token").toString();
        //模拟http请求
        URL url = new URL(path);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setRequestProperty("content-type", "application/json");
        connection.connect();
        // post发送的参数
        Map<String, Object> map = new HashMap<>();
        map.put("offset", (officialAccountVo.getPageIndex()-1)* officialAccountVo.getPageSize()); //分页内容起始index
        map.put("count", officialAccountVo.getPageSize());  //显示内容数量
        map.put("no_content", 0);  //1 表示不返回 content 字段,0 表示正常返回,默认为 0
        // 将map转换成json字符串
        String paramBody = JSON.toJSONString(map);
        OutputStream out = connection.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
        bw.write(paramBody); // 向流中写入参数字符串
        bw.flush();
        InputStream in = connection.getInputStream();
        byte[] b = new byte[100];
        int len = -1;
        StringBuffer sb = new StringBuffer();
        while ((len = in.read(b)) != -1) {
            sb.append(new String(b, 0, len));
        }
        in.close();
        JSONObject json = JSONObject.parseObject(sb.toString());
        //以上是已经获取到文章列表,下面是视业务场景进行json操作,如不需要则直接返回sb.toString()。
        //取出json中的item
        String item = json.getString("item");
        //查看返回的总数
        String total = json.getString("total_count");
        officialAccountVo.setTotalPage(Integer.valueOf(total));
        List<OfficialAccount> arrayList = new ArrayList<>();
        //如果返回的列表总数为0就没必要解析了
        if(Integer.valueOf(total)>0) {
            //item为数组json类型,这时需要转换成JSONArray
            JSONArray jsonArray = JSONObject.parseArray(item);
            int size = jsonArray.size();
            List<String> contentList = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String content = jsonObject.getString("content");
                contentList.add(content);
            }
           //解析文章内容
            contentList.forEach(data -> {
                //content为文章模块
                JSONObject jsonObject = JSON.parseObject(data);
                //取出文章列表信息并转成json
                String news = jsonObject.getString("news_item");
                JSONArray jsonArray1 = JSONObject.parseArray(news);
                //循环数组json
                for (int i = 0; i < jsonArray1.size(); i++) {
                    JSONObject jsonObject1 = jsonArray1.getJSONObject(i);
                    OfficialAccount jsonEntity = new OfficialAccount();
                    jsonEntity.setThumbUrl(jsonObject1.getString("thumb_url"));
                    jsonEntity.setThumbMedialId(jsonObject1.getString("thumb_media_id"));
                    jsonEntity.setIsDelete(jsonObject1.getString("is_deleted"));
                    jsonEntity.setAuthor(jsonObject1.getString("author"));
                    jsonEntity.setOnlyFansCanComment(jsonObject1.getString("only_fans_can_comment"));
                    jsonEntity.setDigest(jsonObject1.getString("digest"));
                    jsonEntity.setShowOverPic(jsonObject1.getString("show_cover_pic"));
                    jsonEntity.setContentSourceUrl(jsonObject1.getString("content_source_url"));
                    jsonEntity.setNeedOpenComment(jsonObject1.getString("need_open_comment"));
                    jsonEntity.setTitle(jsonObject1.getString("title"));
                    jsonEntity.setContent(jsonObject1.getString("content"));
                    jsonEntity.setUrl(jsonObject1.getString("url"));
                    arrayList.add(jsonEntity);
                }
            });
        }
        officialAccountVo.setObjectList(arrayList);
        return AjaxResult.success(officialAccountVo);
    }


    /**
     * 获取公众号token
     * @return
     * @throws MalformedURLException
     * @throws IOException
     * @throws ProtocolException
     */
    private String getWxAppToken() throws MalformedURLException, IOException, ProtocolException {
        String path = " https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
        String appid = "*******"; //公众号的开发者ID(AppID)
        String secret = "*******"; //公众号的开发者密码(AppSecret)
        URL url = new URL(path + "&appid=" + appid + "&secret=" + secret);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        InputStream in = connection.getInputStream();
        byte[] b = new byte[100];
        int len = -1;
        StringBuffer sb = new StringBuffer();
        while ((len = in.read(b)) != -1) {
            sb.append(new String(b, 0, len));
        }
        in.close();
        return sb.toString();
    }
}

上面最后一段代码里面需要讲自己公众号的AppIDAppSecret替换进去;

不知道自己本地外网ip的话,可以在这里打个断点,会提示你的ip信息不在白名单访问名单里面,然后去公众号平台里面添加一下就可以本地测试了

JAVA 获取微信公众号发布的文章列表内容

 本地测试结果:

JAVA 获取微信公众号发布的文章列表内容


总结

  代码也比较简单,参考开发文档直接写就好了,有不对的地方还希望各位多多指教。文章来源地址https://www.toymoban.com/news/detail-490442.html

到了这里,关于JAVA 获取微信公众号发布的文章列表内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序如何跳转到微信公众号文章,小程序如何关联公众号或订阅号

    公众号最高管理权限(或能与最高权限管理者配合操作) 小程序开发权限或最高管理权限 根据官方资料描述,小程序中展示微信公众号中的文章需要使用到 web-view web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面 src:webview 指向网页的链接 特别

    2024年02月14日
    浏览(83)
  • SAP ABAP技术文章合集_微信公众号:ABAP猿

    序号 文章标题 01 ABAP OOALV-基本显示 02 ABAP OOALV-排序、过滤 03 ABAP OOALV-合计、小计 04 ABAP OOALV-选择模式、触发事件 05 ABAP OOALV-隐藏列、修改列标题、添加图标列、调整列位置 06 ABAP OOALV-固定列、鼠标悬停文本 07 ABAP OOALV-颜色(列、行、单元格) 08 ABAP OOALV-样式(列、行、单元格

    2024年02月03日
    浏览(49)
  • 详解织梦首页、列表页调用文章body内容的两种方法

    关于首页、列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: 解析: 1、addrields=”字段1,字段2…” 2、idlist=”文章ID”(可不写) 3、channelid=”模型ID”,普通文章默认为1(查看方法:核心–频道模型–内容模型管理–id号) 4、function=’cn_substr(html2text(@me)

    2024年02月02日
    浏览(56)
  • 微信小程序跳转公众号文章 web-view方式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 小程序和公众号都必须时企业认证的 1.在小程序里面关联相关的公众号 2.在公众号里面关联相关的小程序 提示:以下是本篇文章正文内容,下面案例可供参

    2024年02月09日
    浏览(85)
  • php+mysql实现微信公众号回复关键词新闻列表

    非常抱歉,我之前理解有误。如果您想要实现在公众号发送,返回新闻列表的功能,可以按照以下步骤进行操作: 1. 创建一个数据库表,用于存储新闻的标题、链接和内容等信息。例如,可以创建一个名为news的表,包含id、title、link和content等字段。 2. 在公众号后台设

    2023年04月16日
    浏览(61)
  • 个人微信公众号文章留言功能开通方法,无需迁移账号,三个步骤轻松完成

    总所周知。微信公众号关闭了2018年以后开通的微信公众号的评论管理功能。这样其实对于个人账号而言不太方便。现在常见的方法是迁移到别人在18年之前的账号上去,但是这个操作很麻烦,而且账号也不一定能弄到,还需要花费大加强。 实际上,公众号原创图文是可以插入

    2024年02月06日
    浏览(50)
  • 微信公众平台(3):微信小程序发布为什么需要https证书

    微信小程序一定要用https的理由,小程序使用HTTPS链接分析 一、HTTPS HTTPS是HTTP的安全版,在 HTTP的基础上加入SSL证书 (服务器证书)后形成的安全协议 ,不但可以建立信息加密通过保障数据传输的安全,还能 认证服务器的真实性 , 防止“钓鱼”网站 。每个微信小程序都需要先

    2024年02月12日
    浏览(58)
  • 微信小程序引导关注公众号(超详细),获取公众号openID,是否关注公众号信息

    需求背景:微信小程序里,需要判断使用该小程序的用户是否有关注该小程序关联的公众号,如未关注要引导用户去关注公众号(用于公众号推送信息) 官网: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 接口(获取Code): 参数: APPID:公众号的唯

    2024年02月15日
    浏览(79)
  • python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息

    爬虫的步骤: (1)申请自己的公众号 (2)使用fiddler抓包工具 (3)pycharm (一)申请公众号 官网:微信公众平台 填入相关信息创建微信公众号 进入公众号界面如下: 找到新的创作-图文信息 在弹出的界面中查找公众号文章-输入公众号名称-确定 点击确认之后,进入公众号

    2024年02月05日
    浏览(57)
  • 帝国cms内容页模板把当前文章发布时间改成年月号星期几显示方式

    把下面代码加到帝国cms内容页模板最头部 在帝国cms内容页模板需要显示的地方加入以下代码 到此这篇文章就结束了,帝国cms页面支持php非常方便拓展。

    2024年02月03日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包