文章目录

  • 一、新闻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仓库:仓库代码地址

关注微信公众号

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

  1. 微信公众号开发(二)基础接口

    微信公众号开发(二)基础接口 未经认证的订阅号只有基础接口的权限,基础接口主要包括三个部分:接收用户消息.发送被动响应消息和接收事件推送消息,开发者需要对用户消息在5秒内立即做出回应,微信服务器在五秒 ...

  2. 微信公众号 服务器配置 token 测试,微信公众号开发:基本配置Token验证简单事件回复...

    公众号配置的URL就是你自己服务器上验证TOKEN的方法的地址 比如我验证TOKEN的方法访问地址是http://www.aaa.cn/wx_api.php 那我公众号配置的URL就要填http:// ...

  3. 微信公众号开发淘宝优惠券查询的思路和原理

    做微信公众号查券首先需要一个1个产品库,我们可以使用淘宝的开放平台提供的产品库通用物料搜索API. 通过用户手淘分享的商品信息,信息中包含商品标题和链接还有淘口令,我们可以用正则表达式提取出商品标题 ...

  4. 微信公众号开发(5)-调用jssdk获取地理位置经纬度及百度api获得城市

    调用微信的jssdk需要先绑定js安全域名,这个在微信公众号后台自己设置就可以了. 还需要引入js文件,但由于我使用了vux,它里面的WeChatPlugin这个插件可以直接用commonJS方式引用 ...

  5. 微信公众号开发(公交线路查询-JAVA

    一.Dom4j的使用    在介绍公交线路开发之前,先简单介绍下Dom4j的使用,因为公交线路查询引用的是爱帮公交api,调用结果为xml格式文件,故用到了Dom4j这个包,当然还有其他的包来读取xm ...

  6. 微信公众号开发--双色球开奖查询

    访问我的个人博客 秋码个人博客 扫描下方二维码 可关注 你我杂志刊 公众号 或者微信搜索公众号 你我杂志刊 在 你我杂志刊 公众号 输入 彩票双色球 扫描下方二维码 可关注 你我杂志刊 公众号 或者微 ...

  7. 微信公众号开发(四)——点击菜单回复图片和语音

    先讲回复图片,语音类似. 这个发送图片,并不是点击输入框右侧的"➕",去选择本地照片,而是要把图片上传的公众号的服务器. 按照开发文档https://developers.weix ...

  8. 微信公众号编辑文章发布时,弹出,图文消息中含有敏感词

    在写文章的时候,会遇到以下3种情况: 1.你所编辑的图文消息可能含有敏感内容,你可以继续保存或发布该图文消息(发布等待时长约3-4小时),若保存或发布后,经核实含有敏感内容的,将可能被作删除.屏蔽等处 ...

  9. 微信公众平台开发(150)——从新浪云SAE上传图片到图文消息

    从新浪云SAE上传图片到图文消息,只能用于图文消息中, 没有个数限制 if (!empty($_FILES['qrcode']['name'])){$filename = time().". ...

  10. php公众号客服消息图文,微信公众号开发系列-发送客服消息(示例代码)

    下面是做微信公众号开发用到最多的两个客服消息发送类型,文本信息和图文信息. 1.发送文本消息{ "touser":"OPENID", "msgtype ...

最新文章

  1. 我用Python分析了翟天临的论文,学术还是要认真做啊!
  2. 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
  3. C# 制作开机自动启动程序
  4. python3菜鸟教程-Python3 运算符
  5. Tensorflow 处理libsvm格式数据生成TFRecord (parse libsvm data to TFRecord)
  6. CAS 之 集成RESTful API
  7. 阿里云服务器tomcat配置https
  8. 什么叫python代码的优化_优化Python代码
  9. 美国伯克利大学计算机研究生学几年,美国加州大学伯克利分校计算机CS研究生申请条件一览...
  10. HDU2009 求数列的和【入门】
  11. 左边工具栏 隐藏_203 【Ps基础】 工具栏
  12. Vite Vue项目加载Cesium模块
  13. 备案号链接工信部_网站主页底部网站备案号的悬挂和链接的工作通知
  14. Julia :PyPlot库安装中需注意的问题
  15. js事件冒泡和事件捕获的区别
  16. 未转变者3.16进不去服务器,未转变者3.16.0.1
  17. js截取中英文字符串
  18. [老文档]2015-08-11一种WiFi阶梯式省电控制的策略及装置
  19. NetSuite BOM材料产出率舍入
  20. 2019属猪的男孩起名

热门文章

  1. 安装FeHelper插件
  2. 如何利用insightface同时计算多个人脸相似度
  3. iterm2上传文件到linux,在iTerm2中使用Zmodem实现快速传输文件
  4. 兴东机器人_福州市松下机器人维保中心
  5. 初次编译cximage遇到的一些错误
  6. 使用zlog实现日志记录
  7. 苹果录制屏幕在哪设置_屏幕录像专家如何录全屏 屏幕录像专家全屏录制设置方法...
  8. 如何使用AxureShare+Axure RP 8.0创建团队项目,实现团队协同
  9. Java进阶之路,Java程序员职业发展规划
  10. 浏览器可下载的网页链接(百度云链接等),而迅雷(等外置软件)下载失败