华为云征文|基于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,欢迎大家的阅读,如有疑问,可以在评论区留言,我抽空给大家答疑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】获取cookie,session,header(3)

本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 目录 本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。…

Linux主机网络参数的设置—IP地址的作用和类型

网络参数管理 一.网络参数 主机名&#xff0c;IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS服务器地址 1.配置主机名 hostname命令来查看当前系统的主机名&#xff0c; hosnamectl set-hostname 修改centos7的主机名&#xff0c; 建议以FQDN的&#xff…

惠中科技光伏清洗剂:点亮绿色能源未来

在当今全球追求可持续发展的时代&#xff0c;光伏产业作为清洁能源的重要代表&#xff0c;正发挥着日益关键的作用。而在光伏产业的高效运行中&#xff0c;惠中科技的光伏清洗剂犹如一颗璀璨的明珠&#xff0c;为光伏板的清洁与维护贡献着卓越力量。 一、光伏产业的挑战与需求…

STM32嵌入式面试知识点总结

一、STM32F1和F4的区别&#xff1f; 解答&#xff1a; 参看&#xff1a;STM32开发 – STM32初识内核不同&#xff1a;F1是Cortex-M3内核&#xff0c;F4是Cortex-M4内核&#xff1b;主频不同&#xff1a;F1主频72MHz&#xff0c;F4主频168MHz&#xff1b;浮点运算&#xff1a;…

【C++ Primer Plus习题】8.3

问题: 解答: #include <iostream> #include <string> #include <cctype> using namespace std;void function(string& str) {for (int i 0; i < str.size(); i){str[i]toupper(str[i]);} }int main() {string str;while (true){cout << "…

od机试题目

od试题 日志采集TLV 日志采集 思路&#xff1a; 处理输入&#xff1a; Scanner 拿到整个输入 放入string[] 按照" "分隔 调用Integer.parseInt 将string转int类型 解题&#xff1a; 用一个变量count记录当前日志数量&#xff0c;初始为输入的第一个参数 用一个max变…

Java中类的成员介绍

我的后端学习大纲 我的Java学习大纲 4.类的成员&#xff1a; 3.1.类的成员 -> 属性介绍&#xff08;成员变量&#xff09;&#xff1a; a.语法格式&#xff1a; 1.修饰符 数据类型 属性名 初始化值 ;2.说明1: 修饰符 常用的权限修饰符有&#xff1a;private、缺省、prot…

网络原理 - 初识

文章目录 局域网(LAN)广域网(WAN)网络设备IP地址格式 端口号格式 认识网络协议协议分层 OSI七层模型(只是理论,没有实际运用)TCP/IP五层&#xff08;或四层&#xff09;模型网络设备所在分层 封装和分用 计算机之间通过网络来传输数据&#xff0c;也称为网络通信。 根据网络互连…

linux系统编程:数据库

1. 数组、链表、变量-----》内存&#xff1a;程序运行结束、掉电数据丢失 文件----------------------》硬盘&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; 专业存储数据、大量数据-----》硬盘 sqlite相关的命令 .tables 查看…

库克库伯防爆电容器会起火吗

库克库伯&#xff08;Cooke Colb&#xff09;防爆电容器设计用于在具有爆炸性气体或粉尘的危险环境中安全运行。尽管这些防爆电容器经过严格的设计和测试&#xff0c;能够保障不会出现爆炸现象&#xff0c;以确保在恶劣环境中运行时的安全性&#xff0c;但在某些极端情况下&…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;303 标注数量(xml文件个数)&#xff1a;303 标注数量(txt文件个数)&#xff1a;303 标注类别…

【网络安全】Instagram 和 Meta 2FA 绕过漏洞

未经许可,不得转载。 文章目录 漏洞概述技术细节Meta 2FA 绕过步骤Instagram 2FA 绕过步骤总结漏洞概述 该漏洞允许攻击者在具有受害者Facabook账户权限的情况下,绕过 Meta 的双重身份验证 (2FA) 机制,实现账户接管;并且也能够绕过 Instagram 的双重身份验证 (2FA) 机制,…

【GeoScenePro】Generic Server Error

错误 解决方案 在portal中进行知识图谱许可授权

国密起步5:GmSSL3交叉编译arm64

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 之前已经建立好了交叉编译环境…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…

sqli-labs靶场(56-60)

56关 ?id-1)union select 1,2,database()-- 看数据库 ?id-1) union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- 看表 ?id-1) union select 1,group_concat(column_name),3 from information_schema.columns wh…

深入探索MySQL数据库结构设计:实战案例解析,打造高效、可扩展的数据存储方案

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 前言&#xff1a;…

noge-gyp构建项目踩坑记录

开发环境 系统: win11 node: 19.7.0 npm: 8.3.2 node-gyp: 10.0.2可以不使用windows-build-tools来安装构建工具,手动进行安装 我这边用windows-build-tools安装时候会提示 process.env only accepts a configurable, writable, and enumerable data descriptor. 查了资料后…

转换视频格式轻松搞定!3个小窍门助你轻松将mxf格式转mp4

你是否因为格式转换而烦恼&#xff1f;你是否经历过这样的情况&#xff1a;你想要在别的设备或平台上播放心仪的视频&#xff0c;但是你的视频文件是xmf格式的&#xff0c;很多设备都不支持这个格式&#xff0c;导致视频无法播放。现在&#xff0c;你需要把mxf格式转mp4格式。你…

【时间盒子】-【2.准备】HarmonyOS 开发前需要准备什么?

零基础新手或转行进入鸿蒙生态应用的开发者&#xff0c;请提前准备以下内容&#xff1a; 一、注册华为帐号 此帐号在华为官方各平台通用&#xff0c;比如&#xff1a;华为手机、华为商城、华为云、华为开发者联盟等等。 https://id1.cloud.huawei.com/CAS/portal/userRegist…