监理工程师学习看书的顺序与进度?
2021-06-13
更新时间:2022-09-06 11:03:47作者:佚名
获取东京亚运会金牌排名榜及得奖人员序言
他人的90后,出征亚运会,我的90后,在家睡大觉。
作为编程爱好者,刚才用写了查询亚运会金牌排名榜,并通过云函数发送短信,查看每晚实时数据的小功能,为亚运会做些力所能及的事,推动亚运,中国加油!
排名榜代码
卫视网官网数据
金牌排名榜:
中国铜牌榜获得者:
截至到目前(2021年7月26日11:48),东京亚运会赛事第一天,我国金牌6,铜牌2,银牌5东京奥运会金牌排行,名次第一!
图中"跳水男子单人3米跳板"项目金牌获得者是:施廷懋/王涵夺
通过央网链接,打开F12,剖析发觉两个链接获取数据
话不多说,上代码
.py
import requests
import json
def getMedalsList(url, replaceTxt):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
# 替换多余的内容
data = str.replace(r.text, replaceTxt + "(", "")
data = str.replace(data, ");", "")
# 解码json,转成字典
medals = json.loads(data)
return medals
except:
return "Failed!"
# 获取排行榜数据
def getRanking():
url = "https://api.cntv.cn/olympic/getOlyMedals?serviceId=pcocean&itemcode=GEN-------------------------------&t=jsonp&cb=omedals1"
medals = getMedalsList(url, "omedals1")
# 获取数据列表
medalList = medals['data']['medalsList']
res = ""
for i in range(5):
res += "第" + medalList[i]["rank"] + "名:" + medalList[i]["countryname"] + "(" + medalList[i]["countryid"] + ")n"
res += "金牌/银牌/铜牌:" + medalList[i]["gold"] + "/" + medalList[i]["silver"] + "/" + medalList[i]["bronze"] + "nn"
return res
# 中国奖牌获得者数据
def getWinners():
url = "https://api.cntv.cn/Olympic/getOlyMedalList?t=jsonp&cb=OM&serviceId=pcocean&countryid=CHN"
owners = getMedalsList(url, "OM")
# 获取数据列表
ownerList = owners['data']['medalList']
gold = "" # 金牌
silver = "" # 银牌
bronze = "" # 铜牌
for owner in ownerList:
medaltype = owner['medaltype'] # 奖牌类型
startdatecn = owner['startdatecn'] # 日期CN
item = owner['itemcodename'] + " " + owner['subitemname'] # 项目
playname = owner['playname'] # 运动员
if medaltype == "ME_GOLD":
gold += "日期:" + startdatecn + "n项目:" + item + "n获得者:" + playname+"nn"
elif medaltype == "ME_SILVER":
silver += "日期:" + startdatecn + "n项目:" + item + "n获得者:" + playname+"nn"
elif medaltype == "ME_BRONZE":
bronze += "日期:" + startdatecn + "n项目:" + item + "n获得者:" + playname+"nn"
res = "n-------金牌:---------n" + gold+"n-------银牌:---------n" + silver+"n-------铜牌:---------n"+ bronze
return res
if __name__ == '__main__':
print(getRanking())
print(getWinners())
输出结果:
发送短信代码
mail.py
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from medals import getWinners, getRanking
def sendmail():
sender = '*****@qq.com' # 发送邮箱
senderName = "致远" # 发送者昵称
password = '*****' # 发送方QQ邮箱授权码
receivers = ['*****@qq.com',"*****@qq.com"] # 接收邮件
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
str = getRanking() + getWinners()
message = MIMEText(str, 'plain', 'utf-8')
message['From'] = Header(senderName, 'utf-8') # 发送者昵称
# 主题
subject = '东京奥运会金牌排行榜及获奖人员'
message['Subject'] = Header(subject, 'utf-8')
try:
client = smtplib.SMTP_SSL('smtp.qq.com', smtplib.SMTP_SSL_PORT)
print("连接到邮件服务器成功")
client.login(sender, password)
print("登录成功")
client.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
if __name__ == '__main__':
sendmail()
布署云函数方式
登陆阿里云,找到函数估算FC:
1、创建服务及函数,选择环境
2、上传两个代码文件,.py和mail.py
3、编辑index.py
# -*- coding: utf-8 -*-
import logging
from mail import sendmail
# To enable the initializer feature (https://help.aliyun.com/document_detail/158208.html)
# please implement the initializer function as below:
# def initializer(context):
# logger = logging.getLogger()
# logger.info('initializing')
def handler(event, context):
sendmail()
在“触发器”中可选择定时触发器东京奥运会金牌排行,具体操作可查看官方文档