作为一个卑微的学生干部,经常会遇到学校安排任务但是同学不积极完成的情况,我们以往的交流,都是基于QQ微信的,但是从我个人来看,QQ设置班级群消息仅接受不提醒是常态,我知道的另一类人是所有群都提醒,消息永远是99+,所以在群里发消息提醒某个别同学去完成任务,被提醒的同学不见得看不看得见,对其他同学也会有打扰。

想起来腾讯云赠送给我的200条免费短信,不禁陷入思考——可以爬一下学校那个网站的数据,然后筛选未完成同学名单,保存到json中,然后调用腾讯云短信的api去发信。

理论成立,实践开始。

短信资格申请

首先,你要有腾讯云账号,并且有个自己的服务器,因为现在腾讯云审核还是比较严格的,发送短信的内容不是头脑一热就可以的发的,必须有签名,有模板,并且都是需要平台审核才能使用的,想我最开始不知道这些,光是申请,一会用腾讯云,一会用阿里云的,申请都从第一天晚上十点搞到了第二天下午。

这里为啥说他审核严格呢,因为申请的时候你必须是要挂靠到某个网站的,就比如我的网站是test.com,那我必须要有test.com这个网站的域名备案后台截图上传作为佐证。签名还得是“test个人站”、“test体温上报提醒”这种名字。审核的人还会去访问你的网站,看和你描述的相不相符,我就是没办法了,直接在服务器上搞了个wordpress论坛,发了几条疫情最新消息的新闻,希望审核放我过。

这两个红框框是需要点进去申请的。

这是申请签名

 这是申请正文模板

然后我们就可以去找一下调用的api,我用的是python的

https://console.cloud.tencent.com/api/explorer?Product=sms&Version=2021-01-11&Action=SmsPackagesStatistics&SignVersion=

就这玩意,api的文档和调用api的方法清清楚楚。

红框框里这一堆直接复制到python中用就行了,有几个参数直接改就行了。

爬虫部分

由于是登录的,所以用session,这里的接口和参数都是经过修改的,抹除了原有的特征,每个学校大同小异,自己找一下相关接口就可以了。

这一部分代码的思路就是,先session带着登录时的data 以post请求了登录的url,然后获取一个cookie,这个cookie是不需要我们去考虑的,session会自动保存并且在后续的请求中加上这个cookie。

完成登录操作后,用get方式访问接口,获取目标数据,这里的返回值是json的,我直接把他保存在了stu.json中

today = datetime.date.today()
def get_json():# login_url = 'https://xxxxx.edu.cn/AbnormalList?dateStr={}'.format(today)login_url = 'https://login.xxx.edu.cn/index.php?rid=verifyUser'headers = {# 没有会被直接拦截"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"}data = {"_eventId": "submit","locationurl": "https://xxx.edu.cn/AbnormalList?dateStr=2021-08-03","lt": "${loginTicket}",#这里是你的用户名和密码"password": "","username": ""}se = requests.Session()se.post(login_url, headers=headers, data=data)print(requests.status_codes)# 这是一个接口detail_url = 'https://xxxx.edu.cn/findAbnormalList?dateStr={}'.format(today)print("      [+]目标url:"+detail_url)sleep(1)print("      [+]正在从url获取json数据")sleep(1)detail_page_text = se.get(url=detail_url, headers=headers).textresult = detail_page_textprint("      [+]已成功获取json数据,并保存至stu.json")sleep(0.5)#print(result)with open('stu.json', 'w', encoding='utf-8')as fp:fp.write(result)

读取stu.json并处理数据

首先单独执行这个函数,去查看获取的json数据格式。

其实我们关注的只有姓名和电话,因为我们最终要达到的效果是这样的。

针对这个去处理数据,并且转换成两个列表,list这个数据格式有个好处,就是他的元素是具有唯一性的,也就是说我省了数据去重的操作。

def list_format():data = ''with open('stu.json', 'rb') as f:data = f.read()stuInfo = json.loads(data)a = stuInfo.items()total = int(int(str(stuInfo["total"])) / 2)print('      [+]共获取学生' + str(total) + '人')sleep(0.8)#初始化一个字典stuNamePhone = {}#这里就是处理json,提取姓名和电话的方法for item in stuInfo['rows']:name = item['xm']# print(name)phoneNum = item['sj']stuNamePhone[name] = phoneNum#print(stuNamePhone.items())name_ = list(stuNamePhone.keys())phone_ = list(stuNamePhone.values())print("      [+]即将发送提醒短信")sleep(2)
#为了方便,我直接在这里调用了发送短信的接口(send_sms()这个函数就是)
#至于那个_fake(),就是测试用的,只打印提示信息,不发送for i in range(0, total):#send_sms_fake(phone_[i], name_[i])sleep(0.2)send_sms(phone_[i],name_[i])

好的,结束了这部分代码,就完成调用了send_sms()函数,发信息成功了。

发短信函数

如上文,这里是用的腾讯云的现成的东西

# send_sms为调用腾讯云api,进行发送信息,使用前,请先去除apikey前的注释号
def send_sms(phoneNum, name):try:# 下面这一列注释符去掉才能正常使用,避免误操作导致大量发信cred = credential.Credential("这里是", "api key的位置")httpProfile = HttpProfile()httpProfile.endpoint = "sms.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = sms_client.SmsClient(cred, "ap-beijing", clientProfile)req = models.SendSmsRequest()params = {"PhoneNumberSet": [phoneNum],"SmsSdkAppId": "","SignName": "这里是签名,直接复制你过审的签名过来","TemplateId": "1","TemplateParamSet": [name]  # 这是变量位置,我的就是同学的名字}req.from_json_string(json.dumps(params))resp = client.SendSms(req)print(resp.to_json_string())except TencentCloudSDKException as err:print(err)# send_sms_fake为打印姓名+电话,仅用于测试
def send_sms_fake(phoneNum, name):print("      [+]"+phoneNum+"   "+ name + "   模拟短信发送成功")

最后把所有的import统一出来

import datetime
import json
from time import sleepimport requests
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.sms.v20210111 import sms_client, models

sleep()函数没有实际性用途,是因为这个如果不加sleep,整个脚本可能一秒钟就结束了,我个人的观感不大好,就加了sleep美化一下

ok,看一下效果。

问了几个同学,确实收到了短信

测试成功,顺带被夸夸

开开心心,收工!

班长团支书福音——爬虫+腾讯云短信平台实现自动提醒同学体温上报 【附源码】相关推荐

  1. springboot+sms 集成腾讯云短信平台

    springboot+sms 集成腾讯云短信平台实现发送短信功能 一.申请短信功能 到腾讯云管理平台申请短信功能(https://console.cloud.tencent.com/) 1.1 创建短 ...

  2. Prometheus和Grafana告警服务创建与对接腾讯云短信告警平台(prometheus_alert)

    前言 在一个监控系统中,如果说数据链路是她的骨架,那么告警通知服务就是他的灵魂!所有的监控服务都是为了能够及时通知出来,减少人工查询状态,及时发现问题,避免不必要的大规模故障,为企业政府省钱,和保证安 ...

  3. SpringBoot工程接入腾讯云短信服务平台

    由于业务需要,需要使用第三方短信平台,进行验证码的发送.网上的短信服务平台主要由:百度.腾讯.阿里云:采用官方提供的SDK,调用接口即可. 腾讯云短信服务平台和阿里云短信服务平台,一般步骤为:注册-- ...

  4. 短信接口在本地调试正常_Pivotal实践:腾讯云短信小应用

    最近登录了一下腾讯云控制台,发现账户下居然每月有100条免费短信可以使用.结合一下最近成都阴晴不定的天气,女友上班老是忘记带伞的现状,于是决定开发一款天气短信提醒小应用,每天早上定时给女友发送天气状况 ...

  5. 接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)

    2021/8/17/23:01{2021/8/17/23:01}2021/8/17/23:01 文章目录 前言 一.如何成功申请到腾讯云短信服务 1.签名申请 2.正文模板申请 二.发送短信API开发 ...

  6. java实现短信验证码发送(架子是springboot 服务平台选择腾讯云短信服务)

    业务需求:公司扩展新业务,新增短信验证码提醒服务,负责功能模块完善 暂时只研究了腾讯短信服务的发送(看api谁都能copy出来),短信状态回执(也挺简单,只是自己想复杂了),短信回复回执(暂时没弄明白 ...

  7. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 参考文章: (1)使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 (2)https://www.cnblog ...

  8. 腾讯云短信发送api(SendSms)--java

    一.申请腾讯云帐号并开通短信服务(开通短信服务需要手机实名认证) 1.注册或登录地址:登录 - 腾讯云 2.登录后搜索:短信  3.创建签名,注意,这里的签名内容在代码里面要用到.(提交审核两个小时之 ...

  9. 快速集成腾讯云短信实现短信发送(Spring Boot)

    前言 腾讯云活动白嫖 1.地址 地址:https://cloud.tencent.com/act/free?from=14600 2.创建签名(根据实际情况选择) 我的是网站 3.创建模板 选择模板内 ...

  10. django实现腾讯云短信sdk和redis缓存服务,手机号验证码登录,未注册直接注册登录

    先注册并完成腾讯云短信服务的审核,包括签名和模板:安装redis服务: 1.安装必要库 pip install --upgrade tencentcloud-sdk-python 如果同时有pytho ...

最新文章

  1. 风控业务中的信用与欺诈的定义区别
  2. c#扩展方法奇思妙用性能篇一:扩展方法性能初测
  3. matlab 纯数据表格,MATLAB uitable表格数据更新处理
  4. First Kernel-pwn
  5. 什么是网络安全网格?
  6. 分享的15条为人处事原则、70条忠告(值得收藏)
  7. 物理学/数学中常用的“等号”
  8. Puppeteer之Pyppeteer——浏览某短视频,获取点赞和评论,收藏,转发数(5)
  9. ionic 以及cordova apk打包成功,安装不成功,显示Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]
  10. 必备模块知识——继电器
  11. mysql驱动下载mac
  12. Spring Boot学习笔记(超详细)
  13. 微信论坛交流小程序系统毕业设计毕设(4)开题报告
  14. 学生信息录入系统java代码
  15. 相位噪声 dBc/Hz
  16. 怎么用计算机上网,[图示教程]如何让电脑通过iPhone手机上网
  17. php之——php输出内容的三种方式
  18. SSE——将任一整数转换为二进制形式
  19. InnovMetric PolyWorks Metrology Suite 2021 IR2
  20. 爬取24w+弹幕信息后,我果断去追剧了

热门文章

  1. YOLO v2详细解读
  2. PR剪辑视频工作流程 大剪辑师分享的高级视频编辑技巧
  3. 小米笔记本Pro15寸单系统黑果体验
  4. Paper reading:高分辨率图像分割:From Contexts to Locality: Ultra-high Resolution Image Segmentation ICCV2021
  5. 第三方支付业务流程介绍
  6. Scratch作品(一)
  7. i2c时序图(AT24C08)
  8. 软件测试项目实战学习路线
  9. 最全的权限系统设计方案(图解)
  10. Hadoop 3.X, 纠删码