(办公自动化)让我看看谁还没完成Youth learning------基于requests和yagmail库实现的查询Youth learning学习情况和邮件自动提醒功能

本文主要是介绍(办公自动化)让我看看谁还没完成Youth learning------基于requests和yagmail库实现的查询Youth learning学习情况和邮件自动提醒功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、写代码的初衷

作为一名团支书,Youth learning每更新一期就需要提醒班级同学去学习。辅导员总是要求定时查看谁没有完成Youth learning,并提醒该同学。每一次查找谁没有完成Youth learning都令我非常痛苦,我需要对着名单手动比对,找出没有完成Youth learning的同学。于是,下定决心,整一个程序,让我能解放双手!说干就干!

二、前期准备

1.使用的第三方库准备

本代码主要使用了四个库, requests、pandas 、yagmail、time。前三个没有的需要自行安装,最后一个是自带的库。下面附上安装库的代码,在pycharm的terminal窗口输入下面指令就可以下载库啦!!

pip install requests
pip install pandas
pip install yagmail

2.比对数据准备

因为需要找出谁没有完成Youth learning,那么自然少不了比对的那个文件啦。当然,我们还需要实现自动发送邮件的功能,所以文件里面还需要包含邮箱号。因为我使用的是发送到他们的qq邮箱,所以我那个文件里面一共有两列,第一列是【姓名】字段存放班级同学的姓名,第二列是【QQ】字段,存放他们的QQ。至于他们的qq邮箱嘛,后期通过处理,在【QQ】的字段的基础上,自动给他们加上“@qq.com”字段,反正代码搞,咱也省事。

3.网页准备

我也是摸索了挺久的,最后是通过vx复制连接,在Edge浏览器中打开,然后用检查工具,分析里面的页面,最终确定了改代码的url。不过,这个url我们是打不开的,但是交给代码,代码却可以噢。(因为我是安徽滴,所以这个下面的是Youth learning of AH的来源,其他省份的需要自行更换对应的来源。但是不能保证代码通用吼,因为不同的省份可能网页获取的json数据不一样)下面附上的连接:

url = "http://dxx.ahyouth.org.cn/api/peopleRankStage?"

三、说干就干-----这就开整

1、首先导入需要使用的包

import requests
import pandas as pd
import yagmail
import time

2、校对数据准备

# 校对数据准备
#这是一个只有两列的表,第一列是姓名,第二列是姓名对应的QQ号码
data = pd.read_excel(r"这里替换你前期数据准备的excel表")
names = data["姓名"]
#将姓名列转换为列表格式
names_list = list(names)
#将QQ列的每一个数据加上邮箱的后缀,并存放在邮箱的列表里
email = [str(qq)+'@qq.com' for qq in data["QQ"]]
# 姓名和邮箱打包,生成检索名字得到邮箱的字典
key_value = list(zip(names_list,email))
dic = {}
for name,email in key_value:dic[name] = email

3.Youth learning的获取

# 网络爬取
url = "http://dxx.ahyouth.org.cn/api/peopleRankStage?"headers = {
#这里设置你自己的UA
}# 安徽的应该都知道,查看青年大学习的时候需要做的一些选项找到对应的班级
params = {
#table_name自己设置,我这个设置的是2022年第21期对应的表名。根据我的研究,每更新一期,最新的一期最后的尾数加2.比如2022年第20期是reason_stage213,如果第22期更新了的话,那么22期应该是reason_stage217,以此类推
'table_name': 'reason_stage215',
'level1': '直属高校',#这个你也可以换成其他的,根据需求来
'level2': 'xx大学',
'level3': 'xx学院',
'level4': 'xx团支部'#换成你自己的班级
}#开始爬了
res = requests.get(url=url,headers=headers,params=params)
time.sleep(5) #这里停顿5s是因为爬虫会攻击服务器,防止自己的ip被封#因为这个网页是动态网页,会更新数据,所以提取json包
result = res.json()
msg_tag = result['list']['list']
# 完成人员名单
finished_name = [name_tag['username'] for name_tag in msg_tag]# 未完成人员名单
unfinish_list = [name for name in names if name not in finished_name]
unfinish_email_list = [dic[name] for name in unfinish_list if name in dic.keys()]
for name in unfinish_list:print("青年大学习未完成名单:",name)

保姆级教程:(1)如何获得自己的UA?

打开你的浏览器--网页上随便一个位置点击右键--点击检查---然后会打开下面这个窗口,按照这个步骤得到自己的UA

 保姆级教程:(2)关于代码里面的params

 level1:

选择你要查询的团支部类别,然后你打到代码里面,比如我选择“直属高校”,你也可以选其他的,你想要查什么,你就在代码的level1里面输入,前提是安徽省青年大学习查询的那个页面得有才可以噢!

 table_name:

我以直属高校的为例,下面选择你要查询的期数,所谓期数就是代码里面的table_name,代码段里面也举了例子说明查哪期输入啥,这里就不再赘述。

level2:

我以直属高校的为例,level2对应的是你要查询的高校,代码里面输入你要查的安徽高校的名称

level3:

我以直属高校的为例,level3对应的是你要查询的高校的学院,代码里面输入你要查的安徽高校的学院名称---必须xx学院的全称吼,不带学校名字的,比如计算机科学与工程学院

level4:

我以直属高校的为例,level4输入团支部的全称【不需要带学校学院】。

4.邮件发送部分

#自动发送邮件部分
print("正在发送邮件...")
# 邮件发送
yag = yagmail.SMTP(user='你自己的qq邮箱', password='你的smtp服务的密码', host='smtp.qq.com')
yag.send(to=unfinish_email_list,subject='尽快完成青年大学习提醒',contents=['同学,你的青年大学习还没有完成噢,看到邮件就快去完成吧!','----------本邮件为自动发送']
)
print("邮件发送成功!")

保姆级教程:(3)smtp服务的密码怎么获得?

打开qq邮箱---找到设置---账号---POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务---框起来的俩都开启

 开启后,会有一个界面,按照步骤操作,会的到一个授权码,授权码涉及隐私,我就打码了。把授权码复制了粘贴到代码中password里面就可以啦

你也可以使用其他的邮箱,如果你使用其他得邮箱得话就需要改代码里面得的host,把中间的qq换成其他邮箱,比如163邮箱,你就换成host='smtp.163.com'.

四、总结

实现了查找未完成Youth learning的同学和自动发送邮件提醒的功能,但是不足之处是没有封装成都能通用的程序,仍然还需要进行手动调参。

使用效果如下:

最后的最后,码字不易,希望能够有所帮助!!!祝大家生活愉快啦!!! 

这篇关于(办公自动化)让我看看谁还没完成Youth learning------基于requests和yagmail库实现的查询Youth learning学习情况和邮件自动提醒功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现