华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报

本文主要是介绍华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂


先看这里

    • 写在前面
    • 效果
    • 华为云Flexus X实例服务器
    • 部署开源的热点新闻项目
      • ssh连接服务器
      • docker部署今日热点项目
      • 访问今日热点项目
    • 搭建微信交互工具
      • 获取token
      • 创建发送的公共方法
      • 封装热点新闻接口发送

写在前面

每天三分钟,朝闻天下事~,不知道从什么时候养成的习惯,每天早上醒来后,喜欢浏览浏览热点新闻;但是各大新闻站的app和网页上面内容很参差不齐,各种无营养、标题党比比兼是,搞的我浏览一个小时都没吸收多少有用的信息。

靠被人不行,那就得靠自己,所以就借着手里的这台华为云Flexus X实例的云服务器,部署一套热点新闻的项目,然后按照自己的想法,每天从微信中推送整理好的新闻简报,感觉也不错。

效果

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

在新闻简报的基础上,我还增加了社会潜规则语录,以及天气预报,其实写法都差不多,大同小异,今天,我们就以新闻简报为例。

另外,我发现好多朋友也和我一样也喜欢看简报,索性我就把大家都集中在一起,一起推送。

华为云Flexus X实例服务器

正好,手里有一台华为云Flexus X实例的云服务器,这款服务器之前我也对其做过性能和数据库方面的评测,整体表现情况还是蛮不错的,所以部署个新闻简报的项目的话,基本上一点问题都没有。

关于这款服务器,大家可以去官网查看更详细的介绍,我这里不做过多的赘述:在这里

在这里插入图片描述

部署开源的热点新闻项目

热点项目我们是基于开源的一个项目来部署的,开源地址是:https://github.com/imsyy/DailyHotApi

🚩 特性

  • 极快响应,便于开发
  • 支持 RSS 模式和 JSON 模式
  • 支持多种部署方式
  • 简明的路由目录,便于新增

并且还支持接口api直接调用,也就是基于api我们其实可以去做好多场景,比如定时调用给自己的源站中添加简报、定时调用给钉钉、企业微信中推送热点新闻信息等等。

那么,今天我们展示的功能主要也是基于api来实现给微信群中推送的消息。

在这里插入图片描述

ssh连接服务器

在部署之前,我们肯定需要先将服务器连接上,我这边找了一款ssh工具。首先,我们在控制台中找到Flexus X实例云服务器的公网ip,如下所示:

在这里插入图片描述
复制公网ip后,将其粘贴到ssh工具中,远程端口写22端口,然后点击连接的时候会让你输入用户名和密码,用户名是root,密码就是你自己设置的那个密码。

在这里插入图片描述

连接上后,如果没有docker环境的话,需要自行百度安装,本技术不在本问重点讨论。

假设,你已经安装好了docker,接着我们继续进行下一个步骤。

docker部署今日热点项目

在线部署很简单,一共分为两个步骤:

  1. 拉取
docker pull imsyy/dailyhot-api:latest

在这里插入图片描述

  1. 运行
docker run -p 6688:6688 -d imsyy/dailyhot-api:latest

在这里插入图片描述

是不是很简单,就这样就部署完成了,下面我们需要放开一下6688的端口,才能访问到此热点项目,由于我的云服务器上已经安装了宝塔面板,所以我在这里直接通过宝塔上的安全模块中,直接开放对应的6688端口就行。

访问今日热点项目

上面,经过一系列的步骤,已成功将今日热点项目部署完成,下面,我们看看如何访问。

我们开放的端口是6688,我们的ip地址是服务器的公网ip。两个组合一下,就是下面的这个访问地址:

http://124.xxx.xxx.xxx:6688

直接在浏览器中访问这个地址就行,注意将前面的地址换成你自己的公网ip地址。

在这里插入图片描述

显示这个界面就表示访问没问题了。

点击【全部接口】我们可以看到所有接口的情况。

在这里插入图片描述

搭建微信交互工具

热点项目我们已经部署完成了,现在要想将热点新闻推送到微信群中,我们还需要搭建个微信交互工具,直接用Java代码实现即可。

请看如下代码:

获取token

第一步,我们需要先获取token,调用接口获取即可,有效时间是20分钟,所以我们需要将token存放在redis中。

/*** 获取服务端机器人的token*/public String getmxxWecharBotToken() {//String url = WECHAT_SERVE_API + "/getWechatToken";String url = WECHAT_SERVE_API + "/getWechatToken";JSONObject o = new JSONObject();o.put("username", LOGIN_USER_NAME);o.put("password", LOGIN_USER_PASSWORD);String params = JSON.toJSONString(o);String body = HttpUtil.createPost(url).body(params).execute().body();log.info("请求获取服务端的token:{}", body);JSONObject jsonObject = JSON.parseObject(body);String token = "";if (jsonObject.getInteger("code") == 200) {//获取tokentoken = jsonObject.getString("token");//将token放在缓存中redisService.setCacheObject("mxxWechatRotToken", token, 28, TimeUnit.MINUTES);}return token;}

创建发送的公共方法

接下来就是需要创建发送的公公方法,无论是图片还是文字,视频还是音频,我们都从这个方法中处理,代码如下:

    /*** 给微信机器人中发送信息的公共方法*/public String sendMsgToWechat(String wxid, Integer tag, String appkey, String message, boolean isAt, JSONArray atList) {String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";String token = "";//获取tokenObject redisToken = redisService.getCacheObject("mxxWechatRotToken");if (redisToken == null) {token = getmxxWecharBotToken();} else {token = redisToken.toString();}log.info("token的值是{}", token);//将消息放在body中JSONObject paramsObject = new JSONObject();paramsObject.put("tag", tag);paramsObject.put("wxid", wxid);paramsObject.put("appkey", appkey);paramsObject.put("message", message);paramsObject.put("isAt", isAt);paramsObject.put("atList", atList);String body = HttpUtil.createPost(url).header(Header.AUTHORIZATION, "Bearer " + token).header(Header.CONTENT_TYPE, "application/json").body(JSON.toJSONString(paramsObject)).execute().body();log.info("给微信群中发送的结果:" + body);return body;}

封装热点新闻接口发送

最后,我们将热点新闻的接口封装一下,然后调用发送的方法就可以了,代码如下:

 /*** 每天早上6点,改进版本,将国内和国外新闻整合在一起,都是推送10条*/@GetMapping("/sendNewsAll")@Scheduled(cron = " 0 12 6 * * ?")public void sendNewsAll() {//从缓存中获取新闻信息Object rebangnews = redisService.getCacheObject("penpaiReBang");//获取缓存中的新闻信息JSONArray array = JSONArray.parseArray(rebangnews.toString());StringBuilder sb = new StringBuilder();SimpleDateFormat formatChina = new SimpleDateFormat("yyyy年MM月dd日");// 将今天日期转换为 SimpleDateFormat 格式,并将明天的日期转换为 SimpleDateFormat 格式String todayDate = formatChina.format(new Date());//根据阳历计算农历Calendar today = Calendar.getInstance();today.setTime(new Date());Date tomorrowDate = today.getTime();String dateTomorrow = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(tomorrowDate);sb.append("早上好[太阳],今天是:" + todayDate);String week = "";try {week = DateUtils.getDaysByWeekChina(dateTomorrow);DateUtils lunar = new DateUtils(today);String nongli = lunar.toString();nongli = nongli.substring(nongli.indexOf("年") + 1);sb.append(",星期").append(week).append(",农历").append(nongli);} catch (ParseException e) {e.printStackTrace();}sb.append("。每天三分钟,读懂全世界!祝:工作愉快,生活喜乐!");sb.append("/cbr");sb.append("\uD83D\uDC69\u200D国内新闻:");sb.append("/cbr");//获取新闻列表int i = 1;for (Object o : array) {sb.append(i).append(".").append(o);sb.append("/cbr");i++;//只需要10条if (i > 10) {break;}}sb.append("/cbr");sb.append("\uD83D\uDC68\u200D\uD83D\uDD27国际新闻:");sb.append("/cbr");//接下来是国际新闻Object rebangnewsGuoJi = redisService.getCacheObject("reBangGuoJiNews");//获取缓存中的新闻信息JSONArray arrayGuoji = JSONArray.parseArray(rebangnewsGuoJi.toString());//早安寄语从数据库中获取List<LifeTip> lifeTip = lifeTipService.getLifeTipRangeOne("早安语录", 1);String zaoan = lifeTip.get(0).getContent();//遍历新闻int j = 1;for (Object o : arrayGuoji) {sb.append(j).append(".").append(o);sb.append("/cbr");j++;//只需要10条if (j > 10) {break;}}sb.append("/cbr");sb.append("【微语】").append(zaoan);sb.append("/cbr");sb.append("/cbr");sb.append("/cjj公众号:雄雄的小课堂,点击关注,可获得最新消息~");log.info("发送的新闻信息:" + sb.toString());//将新闻信息放在redis中redisService.setCacheObject("news-all-redis", sb.toString());//调用发送的接口,给三个群中都发送for (String str : groupList) {// 生成一个 1-5 秒之间的随机延迟Random random = new Random();// 生成一个 1-10 的随机整数int delay = random.nextInt(5) + 1;try {// 等待随机延迟时间,如果需要换成分钟,则乘以60Thread.sleep(delay * 1000);String result = sendMsgToWechat(str, XIAOTANGYUAN_REBOT_TEXT, XIAOTANGYUAN_REBOT_APPKEY, sb.toString(), false, new JSONArray());} catch (Exception exception) {exception.printStackTrace();}}}

实现的效果就是我们刚开始看到的效果。

至此,本文over,欢迎大家的阅读,如有疑问,可以在评论区留言,我抽空给大家答疑。

这篇关于华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131495

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、