本文已参与「新人创作礼」活动,一起开启掘金创作之路。
引言
大家在日常生活中可能会遇到这样的需求:身边的同学朋友非常关注“十二星座”,每天翻看各种星座运势,逮着人就要给人算命,神神叨叨的,心情也同样如天上的星星那般,难以捉摸。就是很喜欢搞电视剧里面那些桥段,主要是星座、生肖等等。这可如何是好,为了显得不脱节,与他们有共同话题,摸清其规律,我搜索“星座运势”,得到这个东东:
这可是个好东西,但是星座运势每天都不一样,如果能像日报那样每天获取到推送就好了。我决定使用当今最前沿的互联网云服务,实现自动星座功能。
python编写自动脚本
首先我们需要先选定一个网站,或者是一个API,作为我们信息的来源。然后,我浏览各大星座网站,发现大家算出来的结果都差不多,那就随机选一个。
主要步骤就是:Python requests ---> 访问API ---> 获取星座JSON数据 ---> 发送至邮箱。部分代码如下:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
import requests
import time
#构建调用API函数
def run():
url = 'https://api.shenjian.io/constellation/today?appid=74a1d223b7f5105634f6e0c3341bea82'
params = {'constellation':'天蝎座'}
data = requests.get(url,params=params).json()
constellation = data['data']['constellation']
fate = data['data']['fate']
total = data['data']['fate_data'][0]['name']
total_score = data['data']['fate_data'][0]['value']
love = data['data']['fate_data'][1]['name']
love_score = data['data']['fate_data'][1]['value']
work = data['data']['fate_data'][2]['name']
work_score = data['data']['fate_data'][2]['value']
fortune = data['data']['fate_data'][3]['name']
fortune_score = data['data']['fate_data'][3]['value']
lucky_color = data['data']['lucky_object'][1]
lucky_num = data['data']['lucky_object'][2]
health = data['data']['lucky_object'][3]
analysis = data['data']['analysis']
#对API返回的数据构建邮件文本内容
content = '''{}
星座:{}
{}:{}
{}:{}
{}:{}
{}:{}
{}
{}
{}
运势分析:
{}
'''.format(fate,constellation,total,total_score,love,love_score,work,work_score,
fortune,fortune_score,lucky_color,lucky_num,health,analysis)
注意:代码中的content变量,用的是三个单引号,因为字符串跨了多行,按照python语法需要使用三个单引号,当然使用三个双引号也OK。另外,字符串中使用了很多{}大括号,这个{}是用做占位符的,后面的format就是把对应的变量付给里面对应的占位符。因为我没有指定顺序,所以默认就是一一对应。你也可以在大括号{}里面填写整数,来调整它们和后面变量的位置关系。当然最好是使用变量名来指定,防止出错,例如:
print('我的名字是{name},我今年{age}岁了'.format(89, 'xiaoming', name='henry', age=45))
第二步,我需要把查询到的结果,每天自动反馈给我,比如通过短信或者邮件。这里选择邮件,因为发短信要钱,邮件不要钱。首先,注册一个邮箱,比如163邮箱。获得SMTP服务器地址。
然后编写邮件发送自动发送脚本,脚本内容为通过API获取的星座运势。接下来,设置定时发送时间,比如每天早上8点。这里为了快速验证脚本,简单设置了间隔60秒发送一次。设置邮件发送任务也很简单,如下:
#下面的发件人,收件人是用于邮件传输的。
smtpserver = 'smtp.163.com' #邮件服务器
username = 'XXX@163.com' #邮箱
password='XXXXXX' #邮箱密码
sender='XXX@163.com' #发件人邮箱
receiver='XXX@qq.com' #收件人邮箱
#收件人为多个收件人
#receiver=['XXX@126.com','XXX@qq.com']
subject = '星座运势' #邮件名称
#通过Header对象编码文本,如果出现中文乱码情况,请使用
#subject = '中文标题'
#subject=Header(subject, 'utf-8').encode()
然后就是构造邮件对象,代码如下:
#构造邮件对象
#下面的主题,发件人,收件人,日期是显示在邮件页面上的。
msg = MIMEMultipart('mixed')
msg['Subject'] = subject
msg['From'] = 'private_server@163.com <XXX@163.com>'
msg['To'] = 'XXX@qq.com'
#收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
#msg['To'] = ";".join(receiver)
#msg['Date']='2022-05-01'
#构造文字内容
text = content #传入文本
text_plain = MIMEText(text,'plain', 'utf-8')
msg.attach(text_plain)
最后就是发送邮件:
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
#用set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息。
print(smtp.set_debuglevel(1))
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
#构建定时任务
def main():
while true :
run()
time.sleep(60)#设置脚本运行的时间间隔
到此,简单的python脚本就弄好了。我们只需要运行程序,就可以在邮箱接收到发送的星座信息啦。好了,让我们查看一下邮箱:
Ok,以上就利用python编程做好了一个云算小程序。