安徽省的小伙伴们有福了!!专属于你们的青年大学习自动提醒脚本来了!!
Posted 小生凡一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安徽省的小伙伴们有福了!!专属于你们的青年大学习自动提醒脚本来了!!相关的知识,希望对你有一定的参考价值。
应安徽的粉丝要求,帮他写一个安徽省的青年大学习提醒脚本,我之前写的那个只是适合福建省的。
冲!
B 站视频讲解:视频讲解
GitHub 链接:GitHub
由于系统可能有时候会有变动,所以建议大家还是在GitHub
上star
一下,如果系统更新,我也会更新相应的脚本文件。
1. 明确需求
安徽省的青年大学习是在公众号里面的,所以里面是完成了的成员名单,那么我只需要将这一期完成的名单爬取下来,再和本班的花名册做个比较,找出没完成的名单就好了。
2. 拿到完成名单
2.1 拿到完成的名单
本文的例子已经取得了本班团支书的同意
首先进入最新一期的青年大学习中,。
这部分是已经完成了的名单,所以我们要爬取这些东西。
使用的是charles
抓包工具,以前写福建省的时候已经提到了。
如果还没配置的同学,可以点击这里 - - >charles
页面太多的话,我们可以先清除掉这些请求
然后在微信上点击刷新
然后我们很容易就能看到哪一个请求是该页面的请求了
建议使用火狐浏览器看,火狐浏览器可以加unicode编码解码
我们就拿到了这个已经做完了的名单了。
那么我们分析一下这个请求的网址
很直观了,应该不用我多讲了把,需要什么信息。但是这里是浏览器帮我们解码的,我们发送请求给服务器的时候要自己进行编码
那么后面level 1
到level 4
你们肯定都知道了的。那么前面这个reason_stage131
是啥呢?我猜应该是代表你所查询的这一期的青年大学习的标识。那么如何获取呢?请往下看!
2.2 拿到最新的table_name
分析可知就是这个网址!
http://dxx.ahyouth.org.cn/api/peopleRankList
完成了!
3. 获取未完成名单
首先要拿到自己班的名单和邮箱,可以填个在线表格啥的。
不过一定要这种格式
然后再执行这一行代码
def InitEmailInfo():
wb = xlrd.open_workbook('') # 填写你的文件目录
sh = wb.sheet_by_name('Sheet1') # 按工作簿定位工作表
AllList = []
numList = []
for i in range(1, sh.nrows):
listTemp = [sh.row_values(i)[0], sh.row_values(i)[1]]
AllList.append(listTemp)
numList.append(sh.row_values(i)[0])
print(AllList) # 在命令行拿到这个之后要记得复制!!!!
return AllList
在命令行AllList
拿到这个之后要记得复制!!!!
复制给这个!这个就是制作你们班表单的过程。
4. 发送邮件提醒
获取QQ邮箱的通信码
点击账号
获取授权码就可以了。
5. 完整代码
# -*- coding:utf-8 -*-
import requests, xlrd, smtplib
from urllib.parse import urlencode
from email.mime.text import MIMEText
# UrlEncode编码 和 UrlDecode解码
def InitEmailInfo():
wb = xlrd.open_workbook('') # 打开excel
sh = wb.sheet_by_name('Sheet1') # 按工作簿定位工作表
AllList = []
numList = []
for i in range(1, sh.nrows):
listTemp = [sh.row_values(i)[0], sh.row_values(i)[1]]
AllList.append(listTemp)
numList.append(sh.row_values(i)[0])
print(AllList)
return AllList
def GetNewTableName(): # 获取最新一期的青年大学习
RankRsp = requests.get("http://dxx.ahyouth.org.cn/api/peopleRankList")
RankJson = RankRsp.json()
return RankJson['list'][0]['table_name']
def GetNotFinishList(): # 获取名单
ClassAllListEmail = [ ['张三', '11111@qq.com'], ['李四', '22222@qq.com'],
['老王', '333333@qq.com'], ['小王', '444444@qq.com']] # 这里记得赋值上面的AllList!!!
ClassHaveDone = []
ClassNotDoneName = []
ClassNotDoneEmail = []
headers = {
"Host": "dxx.ahyouth.org.cn",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (Khtml, "
"like Gecko) Mobile/15E148 MicroMessenger/8.0.7(0x18000731) NetType/WIFI Language/zh_CN",
"Accept-Language": "zh-cn",
"Referer": "http://dxx.ahyouth.org.cn/",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
}
params = {
"level1": "直属高校",
"level2": "", # 学校
"level3": "", # 学院
"level4": "", # 班级
}
info = urlencode(params)
tableName = GetNewTableName()
URL = "http://dxx.ahyouth.org.cn/api/peopleRankStage?table_name=" + tableName + "&" + info
info_rsp = requests.get(url=URL, headers=headers)
info_json = info_rsp.json()
AllInfoList = info_json['list']['list']
for people in AllInfoList:
ClassHaveDone.append(people['username'])
for k in ClassAllListEmail:
if k[0] not in ClassHaveDone: # 如果这个同学没做的话
ClassNotDoneEmail.append(k[1]) # 就添加Email在这其中
ClassNotDoneName.append(k[0]) # 就添加Name在这其中
for p in ClassNotDoneName:
print("未完成同学:", p)
return ClassNotDoneEmail
def Send_Email():
msg = MIMEText('青年大学习!不用回复!赶紧做!!') # 构造邮件,内容为青年大学习
msg["Subject"] = "青年大学习!!又是你!!!" # 设置邮件主题
msg["From"] = '辛苦勤奋艰苦奋斗的团支书' # 寄件者
msg["To"] = '未做人员' # 收件者
from_addr = '' # TODO 这里记得写你的邮箱地址
password = '' # TODO 这里记得更改上面为from_addr的邮箱的申请码
smtp_server = 'smtp.qq.com' # smtp服务器地址
to_addr = GetNotFinishList() # 收件人地址
print(to_addr)
try:
# smtp协议的默认端口是25,QQ邮箱smtp服务器端口是465,第一个参数是smtp服务器地址,第二个参数是端口,第三个参数是超时设置,这里必须使用ssl证书,要不链接不上服务器
server = smtplib.SMTP_SSL(smtp_server, 465, timeout=2)
server.login(from_addr, password) # 登录邮箱
# 发送邮件,第一个参数是发送方地址,第二个参数是接收方列表,列表中可以有多个接收方地址,表示发送给多个邮箱,msg.as_string()将MIMEText对象转化成文本
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
print('发送邮件成功')
except Exception as e:
print('发送邮件失败: ', e)
if __name__ == '__main__':
# InitEmailInfo() # 初始化的操作,第一次运行这个拿到AllList,复制给ClassAllListEmail之后就可以注释掉了
GetNotFinishList() # 获取名单,但是不发送邮件
# Send_Email() # 获取名单,并发送邮件
6. 最后
小生凡一,期待你的关注。
以上是关于安徽省的小伙伴们有福了!!专属于你们的青年大学习自动提醒脚本来了!!的主要内容,如果未能解决你的问题,请参考以下文章