微信公众号开发_调用新闻查询接口_回复图文消息

article/2025/3/20 8:16:00

文章目录

  • 一、新闻API接口
    • 返回的Json示例
    • 实体类
    • 测试类测试
  • 二、发送图文消息
    • xml数据格式
    • 实体类
    • 创建自定义菜单
    • 处理点击事件
    • 查询新闻工具类
  • 仓库代码地址
  • 关注微信公众号

发送效果:
在这里插入图片描述

一、新闻API接口

使用的是阿里云市场的服务

在这里插入图片描述

全国热门带正文新闻查询API接口
使用方式很简单:
我已经写好的代码:
实体类:
用来接收返回的json数据

返回的Json示例

{"showapi_res_code": 0,"showapi_res_error": "","showapi_res_body": {"ret_code": 0,"pagebean": {"allPages": 5,   //所有页数"contentlist": [  //数据条目列表{"allList": [   //数据条目列表{"height": 433,   //图片高"width": 650,    //宽"url": "http://p3.ifengimg.com/cmpp/2016/07/11/10/07fd6e97-684f-4c1d-858c-900acb1fc7d3_size87_w650_h433.jpg"   //图片地址},"凤凰娱乐讯 《挑战者联盟》第二季自播出以来,热议不断。在上周六晚20:30播出的功夫主题节目中,“功夫潮男”向佐大展身手,与挑战者联盟成员一起,为观众奉献了一场精彩绝伦的综艺热血秀。",{"height": 856,"width": 600,"url": "http://p2.ifengimg.com/cmpp/2016/07/11/10/51a88903-475f-49f9-9ffa-47910209e309_size86_w600_h856.jpg"},"本期《挑战者联盟》嘉宾们上演“全武行”,还原经典电影武打场面!在《少林足球》经典场景中,向佐带领的“梅门”与挑战者们将一决高下!挑盟成员使出浑身解数,场上局势陷入胶着。陈学冬、薛之谦拼命想要阻拦向佐,却被肌肉贲张的向佐一把扛在肩上,轻松带走!薛之谦只好耍赖胡搅蛮缠,和向佐变成“大鹰捉小鸡”,紧抓向佐衣服不放,躺地被拖数米,不想向佐直接“爆衣”,一秒挣开薛之谦的控制,令薛之谦瞬间傻眼呆立场上!众人在球门前扭成一团,战况激烈得连球门都掀起,令人啼笑皆非热闹非凡。","节目中,向佐的精彩表现,更被网友赞为:新一代“综艺小魔王”"],"pubDate": "2016-07-11 12:05:29","title": "《挑战者联盟》还原少林足球 薛之谦耍赖被”爆衣“","channelName": "娱乐最新","imageurls": [{"height": 433,"width": 650,"url": "http://p3.ifengimg.com/cmpp/2016/07/11/10/07fd6e97-684f-4c1d-858c-900acb1fc7d3_size87_w650_h433.jpg"},{"height": 856,"width": 600,"url": "http://p2.ifengimg.com/cmpp/2016/07/11/10/51a88903-475f-49f9-9ffa-47910209e309_size86_w600_h856.jpg"}],"desc": "《挑战者联盟》第二季自播出以来,热议不断。在上周六晚20:30播出的功夫主题节目中,“功夫潮男”向佐大展身手,与挑战者联盟成员一起,为观众奉献了一场精彩绝伦的综艺热。薛之谦只好耍赖胡搅蛮缠,和向佐变成“大鹰捉小鸡”,紧抓向佐衣服不放,躺地被拖数米,不想向佐直接“爆衣”,一秒挣开薛之谦的控制,令薛之谦瞬间傻眼呆立场上!","source": "凤凰娱乐","channelId": "5572a10ab3cdc86cf39001eb","nid": "14300662248981139731","link": "http://ent.ifeng.com/a/20160711/42649589_0.shtml"  //新闻详情链接} ],"currentPage": 1,"allNum": 96,"maxResult": 20}}
}

实体类

@Data
public class ContentList {/*** 日期*/private  String pubDate;/*** 新闻频道   国内焦点*/private  String channelName;private  String channelId;/*** 新闻链接*/private  String link;private  String img;private  String allList;/*** 新闻标题*/private  String title;/*** 网易新闻*/private  String source;}
@Data
public class News {private String showapi_res_error;private String showapi_res_id;private String showapi_res_code;private String showapi_res_body;
}
@Data
public class PageBean {private String allPages;/*** 数组*/private String contentlist;private String currentPage;private String allNum;private String maxResult;
}
@Data
public class ShowapiResBody {private String ret_code;private String pagebean;
}

测试类测试

@SpringBootTest
public class NewsTest {@Testpublic void test(){String host = "http://ali-news.showapi.com";String path = "/newsList";String method = "GET";String appcode = "3b659fb1d3a0478d9e55621e6f87632b";Map<String, String> headers = new HashMap<String, String>();//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105headers.put("Authorization", "APPCODE " + appcode);Map<String, String> querys = new HashMap<String, String>();//新闻频道id,必须精确匹配  国内焦点// querys.put("channelId", "5572a108b3cdc86cf39001cd");//娱乐最新querys.put("channelId", "5572a10ab3cdc86cf39001eb");//新闻频道名称,可模糊匹配querys.put("channelName", "");//新闻id,可用此信息取得一条新闻记录querys.put("id", "");//每页最大请求数,默认是20querys.put("maxResult", "10");//是否需要返回所有的图片及段落属行allList。querys.put("needAllList", "0");//是否需要返回正文,1为需要,其他为不需要querys.put("needContent", "0");//是否需要返回正文的html格式,1为需要,其他为不需要querys.put("needHtml", "0");//页数,默认1。每页最多20条记录。querys.put("page", "1");//标题名称,可模糊匹配querys.put("title", "");try {/*** 重要提示如下:* HttpUtils请从* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java* 下载** 相应的依赖请参照* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml*/HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);System.out.println(response.toString());//获取response的bodyHttpEntity entity = response.getEntity();String respJsonStr = EntityUtils.toString(response.getEntity());System.out.println(respJsonStr);//将josn字符串解析成JSONObjectJSONObject jsonObject = JSONObject.parseObject(respJsonStr);System.out.println("jsonObject:"+jsonObject);//从JSONObject中提取contentlistJSONObject body = (JSONObject) jsonObject.get("showapi_res_body");JSONObject pagebean = (JSONObject) body.get("pagebean");String contentlist = pagebean.get("contentlist").toString();System.out.println(pagebean.get("contentlist").toString());//解析contentlist为ContentList集合List<ContentList> contentLists = JSONObject.parseArray(contentlist, ContentList.class);System.out.println("ContentList集合:"+contentLists.size());for (ContentList contentList : contentLists) {System.out.println("日期"+contentList.getPubDate());System.out.println("新闻频道"+contentList.getChannelName());System.out.println("图片地址"+contentList.getImg());System.out.println("新闻链接"+contentList.getLink());System.out.println("新闻标题"+contentList.getTitle());System.out.println("新闻媒体"+contentList.getSource());System.out.println("-------------------------------------");}} catch (Exception e) {e.printStackTrace();}}
}

二、发送图文消息

xml数据格式

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[title1]]></Title><Description><![CDATA[description1]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item></Articles>
</xml>

实体类

@Data
@XStreamAlias("xml")
public class BaseMessage {@XStreamAlias("ToUserName")private String toUserName;@XStreamAlias("FromUserName")private String fromUserName;@XStreamAlias("CreateTime")private String createTime;@XStreamAlias("MsgType")private String msgType;@XStreamAlias("MsgId")private String msgId;public BaseMessage(Map<String ,String> map){this.fromUserName=map.get("ToUserName");this.toUserName=map.get("FromUserName");this.createTime = System.currentTimeMillis()/1000+"";}public BaseMessage(){}
}
@Data
@XStreamAlias("xml")
public class NewsMessage extends BaseMessage {/*** 图文消息信息,注意,如果图文数超过限制,则将只发限制内的条数*/@XStreamAlias("Articles")private Item[] articles;/*** 图文消息个数;* 当用户发送文本、图片、语音、视频、图文、地理位置这六种消息时,开发者只能回复1条图文消息;* 其余场景最多可回复8条图文消息*/@XStreamAlias("ArticleCount")private int ArticleCount;public NewsMessage(Map<String ,String> map, Item[] item){super(map);this.setMsgType("news");this.articles = item;}public NewsMessage(){}
}
@Data
@XStreamAlias("item")
public class Item {private String Title;private String Description;private String PicUrl;private String Url;
}

创建自定义菜单

创建自定义菜单的方法就不多解释:

        SubButton subButton = new SubButton("新闻资讯");
//        subButton.getSub_button().add(new PhotoAlbumButton("拍照或相册发图","pic_photo_or_album","rselfmenu_1_0"));subButton.getSub_button().add(new ClickButten("国内焦点","V1003_TODAY_NEWS"));subButton.getSub_button().add(new ClickButten("国际焦点","V1004_TODAY_NEWS"));subButton.getSub_button().add(new ClickButten("财经焦点","V1005_TODAY_NEWS"));subButton.getSub_button().add(new ClickButten("娱乐焦点","V1006_TODAY_NEWS"));

处理点击事件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询新闻工具类

@Component
public class NewUtil {private static final String host = "http://ali-news.showapi.com";private static final String path = "/newsList";private static final String method = "GET";private static final String appcode = "3b659fb1d3a0478d9e55621e6f87632b";//娱乐焦点private static final String ylchannelId = "5572a10ab3cdc86cf39001eb";//国内焦点private static final String gnchannelId = "5572a108b3cdc86cf39001cd";
//    private static final String method = "GET";public Item[] getNews(String channelId){Item[] items = new Item[8];Map<String, String> headers = new HashMap<String, String>();//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105headers.put("Authorization", "APPCODE " + appcode);Map<String, String> querys = new HashMap<String, String>();//新闻频道id,必须精确匹配querys.put("channelId", channelId);//新闻频道名称,可模糊匹配querys.put("channelName", "");//新闻id,可用此信息取得一条新闻记录querys.put("id", "");//每页最大请求数,默认是20querys.put("maxResult", "8");//是否需要返回所有的图片及段落属行allList。querys.put("needAllList", "0");//是否需要返回正文,1为需要,其他为不需要querys.put("needContent", "0");//是否需要返回正文的html格式,1为需要,其他为不需要querys.put("needHtml", "0");//页数,默认1。每页最多20条记录。querys.put("page", "1");//标题名称,可模糊匹配querys.put("title", "");try {/*** 重要提示如下:* HttpUtils请从* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java* 下载** 相应的依赖请参照* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml*/HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);System.out.println(response.toString());//获取response的bodyHttpEntity entity = response.getEntity();String respJsonStr = EntityUtils.toString(response.getEntity());System.out.println(respJsonStr);//将josn字符串解析成JSONObjectJSONObject jsonObject = JSONObject.parseObject(respJsonStr);System.out.println("jsonObject:"+jsonObject);//从JSONObject中提取contentlistJSONObject body = (JSONObject) jsonObject.get("showapi_res_body");JSONObject pagebean = (JSONObject) body.get("pagebean");String contentlist = pagebean.get("contentlist").toString();System.out.println(pagebean.get("contentlist").toString());//解析contentlist为ContentList集合List<ContentList> contentLists = JSONObject.parseArray(contentlist, ContentList.class);System.out.println("ContentList集合:"+contentLists.size());for (int i = 0; i < contentLists.size() ; i++) {ContentList contentList = contentLists.get(i);Item item = new Item();item.setUrl(contentList.getLink());String defaultImgUrl = "";defaultImgUrl = contentList.getImg();if ("null".equals(defaultImgUrl)||null == defaultImgUrl){defaultImgUrl = "http://mmbiz.qpic.cn/mmbiz_jpg/G6FDfpc5D6nMJnbfic9pTng5kVeKRkQBVfMCbcKcYB6xsfMSekD4EoR2o7gW7nVkCpLhicCGFCu3icG4DDmr2KDGg/0";}item.setPicUrl(defaultImgUrl);item.setTitle(contentList.getTitle());item.setDescription(contentList.getTitle());items[i] = item;System.out.println("日期"+contentList.getPubDate());System.out.println("新闻频道"+contentList.getChannelName());System.out.println("图片地址"+defaultImgUrl);System.out.println("新闻链接"+contentList.getLink());System.out.println("新闻标题"+contentList.getTitle());System.out.println("新闻媒体"+contentList.getSource());System.out.println("-------------------------------------"); }} catch (Exception e) {e.printStackTrace();}return items;}
}

仓库代码地址

代码已上传Gitee仓库:仓库代码地址

关注微信公众号

在这里插入图片描述


http://chatgpt.dhexx.cn/article/r7YGIOSn.shtml

相关文章

全国(全球)快递查询物流查询API,物流信息追踪接口

一、接口介绍 支持国内外1500快递物流公司的物流跟踪服务&#xff0c;包括顺丰、圆通、申通、中通、韵达等主流快递公司。同时&#xff0c;支持单号识别快递物流公司、按次与按单计费、物流轨迹返回等功能&#xff0c;以满足企业对快递物流查询多维度的需求。 二、使用案例截…

历史上的今天

一、接口介绍 看看历史上的今天&#xff0c;都发生了什么重大事件。查历史上的指定日期发生的事情&#xff0c;包括国家大事、国际大事、政府重要决策部署等图文详情内容&#xff0c;不断增加中。 二、使用示例截图 { "showapi_res_error": "", "sh…

3-性能测试知识面

脚本开发相关 根据不同协议&#xff0c;选择不同工具 协议 httpjdbcsoapwebsocketdubboMQ 工具 Jmeter「线程」loadrunner「进程、线程&#xff08;默认&#xff09;」wrkabngrinder「jpython、groovy」locust「协程」 扩展 Jmeter支持的语言&#xff1a; javapythonjythongroo…

天气预报查询数据接口、实时天气、24小时天气、未来24小时、7天/15天预报

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;服务超好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级、紫…

百度html的json解析,百度调用API返回json数据解析

在这里支队返回数据解析&#xff0c;不做请求数据​ &#xfeff;第一种格式json解析​ ​String jsonresult ”{"showapi_res_code":0,"showapi_res_error":"","showapi_res_body":{"list":[{"ct":"2016-02…

tp5 对接万维易源ISBN接口

首先购买万维易源的一元套餐 下面都有详细的说明 接口返回的数据格式是 {"showapi_res_error": "","showapi_res_code": 0,"showapi_res_id": "","showapi_res_body": {"datas": [{"series"…

全国天气预报查询接口

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;还有服务很好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级…

对接阿里云天气,获取天气预报数据

我最近在开发个人网站&#xff0c;为了丰富页面&#xff0c;就新增了一个天气预报的数据展示&#xff0c;写此博客记录一下。 获取天气数据调用的易源数据天气&#xff0c;需要经纬度的参数&#xff0c;因此这里调用了百度地图的api来获取经纬度。具体实现过程如下&#xff1a…

欧美明星,明星照片,韩国明星,街拍照片

一、接口介绍 海量照片&#xff0c;每日更新。根据用户搜索关键词&#xff0c;同时整合几十个网站同一种类照片&#xff0c;返回推送列表。 图片种类包括 性感、车模、男色图片、模特美女、美女魅惑、日韩美女、秀场、中国明星、欧美明星、中国女明星、中国男明星、韩国明星…

ShowAPI识别验证码

ShowAPI识别验证码 首先官网上有些代码需要我们修改 需要将img改为image否则会出现如下报错&#xff1a; 其次我们需要将URL 后面的184-5改为184-4 最后就是我们执行成功的代码&#xff1a; #codingutf-8 import requests from coderecognize.ShowapiRequest import Showap…

微信小程序查询接口

小程序&#xff0c;微信 一、接口介绍 查询已经上架在微信的小程序&#xff0c;放回基本信息、关注人数、二维码、截屏等。使用该接口请将相关图片下载本地使用&#xff0c;不支持直接引用。 如何调用查看效果&#xff1f; 1、点击【在线调试】&#xff0c;如下图所示 2、点…

使用开放的showapi接口小技巧

2016-6-19 使用showapi的一些基本步骤 开放的showapi可以提供我们一些有用的网络资源&#xff0c;丰富我们开发app的效果。 1.首先注册到showapi网站&#xff0c;任意选择开放的接口&#xff0c;其中有免费和需要付费的&#xff0c;根据需求选择啦。 2.首先进行订阅&#xff…

易源接口showapi的使用

1.背景介绍&#xff1a;showAPI(易源数据)&#xff0c;易源数据通过打破资源壁垒&#xff0c;搭建起数据资源的基础设施&#xff0c;将接口纳入统一的接口池&#xff0c;把多个异构数据源合并到同一根管线上&#xff0c;以统一的访问和控制方式&#xff0c;对外提供统一格式的数…

sql server使用正则表达式

目标 为数据库创建一个正则表达式函数&#xff0c;供查询使用 不建议使用函数&#xff0c;能查询到内存里面用代码解决的就用代码解决&#xff01;&#xff01;&#xff01; 这里的方法仅供参考 操作 1.新建sql server项目 [外链图片转存失败,源站可能有防盗链机制,建议将图…

hive sql正则表达式总结

正则通配符的介绍 ^ 表示开头 $ 表示结尾 . 表示任意字符 * 表示任意多个 1、元字符匹配 (.) 表示匹配除换行符以外的任意字符。 (\w) 表示匹配字母、下划线、数字 &#xff08;\W匹配汉字&#xff09; (\d) 表示匹配数字 (\s) 表示匹配任意的空白符&#xff08;tab 换行…

SQL语法——使用正则查询

MySQL REGEXP运算符 MySQL适应Henry Spencer实现的正则表达式。MySQL允许您使用REGEXP运算符在SQL语句中匹配模式。 以下说明REGEXP了WHERE 子句中运算符 的语法&#xff1a; SELECT column_list FROMtable_name WHEREstring_column REGEXP pattern; 此语句执行 string_colu…

SQL正则表达式进行搜索

基本字符匹配 select prod_name from products where prod_name regexp .000 order by prod_name;分析 这里使用了正则表达式 .000&#xff0c;是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符&#xff0c;因此&#xff0c;1000和2000都匹配且返回。 注意&#xf…

sql利用正则表达式提取数字及固定字符串

需求&#xff1a;最近boss要求做一个专项数据&#xff0c;提取所有数据中涉及酒驾/醉驾但没有正常处理的数据&#xff0c;实现的原理是在描述中查找是否有酒精含量&#xff0c;有就提取出来判断是否酒驾/醉驾&#xff0c;这就涉及到需要用到正则表达式提取数字和字符串。特此做…

在 sql 中使用正则表达式

新建测试表&#xff1a; -- Table: public.table01-- DROP TABLE public.table01;CREATE TABLE IF NOT EXISTS public.table01 (id bigint NOT NULL,name character varying COLLATE pg_catalog."default" NOT NULL,age integer,CONSTRAINT table01_pkey PRIMARY KE…