三分钟给女票写个“彩虹屁”bot | 🏆 技术专题第七期征文

14,644

一、缘起

前几天 女票 -> 女同学甩给我上面那张图,说她也想每天都能收到甜甜的彩虹屁。好家伙,我一寻思这不就是个彩虹屁bot嘛,自欺欺人地说?但既然她开口了,那咱必须得给她整到位,走起🚀

二、准备工作

考虑到她最近在准备考研,需要有人每天鼓励她,所以我打算给她每天来点毒鸡汤,然后做个考研倒计时的提示,再查询一下当天的天气,提醒她天冷加衣,小心着凉感冒(想到这里我都有被感动到),暖暖的bot,很贴心,哈哈哈。

先从网上整了个天气查询接口:http://wthrcdn.etouch.cn/weather_mini?city=

OK ,现在天气有了,冷暖也知道了,下面再整个彩虹屁接口:

https://chp.shadiao.app/api.php (感谢 shadiao.app | 2333.jpg)

然后再友情赠送一个毒鸡汤接口: https://www.iowen.cn/jitang/api/

OK,万事俱备,代码整起😎

三、人生苦短,我用Python

没时间解释了,快上车🚗

# coding=utf-8

import io
import sys
import time
import datetime

import requests

from email.mime.text import MIMEText
from email.header import Header
import smtplib

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

mail_host = "smtp.163.com"
mail_user = "xxxxxxx@163.com" #此处填你的邮箱
mail_girl = "xxxxxxx@qq.com" #你女票的邮箱
mail_pass = "xxxxxxx" #邮箱密码
name_girl = "xxx" #你女票的名字
mail_port = 465

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')

def getWeather():
    r = requests.get(
        'http://wthrcdn.etouch.cn/weather_mini?city=%E6%9B%B2%E9%98%9C')
    if 'OK' in r.text:
        r = r.json()['data']
        tip = r['ganmao']
        temperature = r['wendu']
        weather = r['forecast'][0]['type']
        return f'天气:{weather} 当前温度:{temperature}\n{tip}'
    return '获取天气失败:('


def getTime():
    today = datetime.datetime.now()+datetime.timedelta(hours=+8)
    date2 = time.strptime('2020-12-25', "%Y-%m-%d")
    date2 = datetime.datetime(date2[0], date2[1], date2[2])
    t = today.timetuple()
    days = (date2-today).days
    return f'今天是{t.tm_year}{t.tm_mon}{t.tm_mday}日 星期{t.tm_wday+1} 考研倒计时:{days}天'


def getSoup():
    r = requests.get('https://www.iowen.cn/jitang/api/')
    if '数据获取成功' in r.text:
        return r.json()['data']['content']['content']
    return '高考在昨天,考研在明天,今天没有什么事儿。'


def getPi():
    r = requests.get('https://chp.shadiao.app/api.php').text
    return r if len(r) > 3 else '你上辈子一定是碳酸饮料吧,为什么我一看到你就开心的冒泡'


def morning():
    return '\n'.join([getTime(), getSoup(), getWeather(), getPi()])


def night():
    return '\n'.join([getSoup(), getPi(), f'晚安,{name_girl}同学,今天你也是最棒的,继续加油鸭!'])


def getTimeX():
    t = int(time.strftime("%H", time.localtime()))+8
    if t > 24:
        t = t-24
    return 'morning' if t < 11 else ('noon' if t < 17 else 'afterNoon')


def main_handler(event, context):
    smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
    try:
        smtpObj.login(mail_user, mail_pass)
    except smtplib.SMTPException as e:
        logger.info(e)
        return False
    content = night() if getTimeX() == 'afterNoon' else morning()
    message = MIMEText(content, 'plain', 'utf-8')
    message['From'] = mail_user
    message['To'] = mail_girl
    message['Subject'] = f'早安,{name_girl}' if getTimeX() != 'afterNoon' else '晚安,xxx'
    try:
        smtpObj.sendmail(mail_user, [mail_girl], message.as_string())
        logger.info("send email success")
    except smtplib.SMTPException as e:
        logger.info(e)
        logger.info("Error: send email fail")
    logger.info(content)
    return content

四、Serverless 助你一臂之力

整完上面那些差不多两分钟就过去了,别担心,剩下一分钟交给腾讯云函数足矣☕

Step 1:注册登录腾讯云(cloud.tencent.com/

Step 2:打开腾讯云控制台(console.cloud.tencent.com/

Step 3:打开云函数菜单,依次选择函数服务->地区(随便选个)->新建

Step 4:新建Python云函数,环境python3.6,选择空白函数模板,下一步

Step 5:把前面改好的Python函数复制粘贴到index.py(覆盖原有代码),完成

Step 6:最后一步,添加定时触发器

打开刚才新建的bot云函数,选择触发管理,新建触发器,选择定时触发,自定义触发周期:0 30 6 * * * *,即每天早上6点30分(北京时间)自动触发运行一次当前函数,以达到每天定时发送“彩虹屁”给女票的目的😀

这里我早晚各加了一个定时触发器,每天对女票不止早午晚安哦😜

PS:腾讯云函数每月有免费的100万调用次数+ 40万GB·s资源使用量哦,超级良心有木有,感动~

五、来吧,展示

早安

晚安

六、总结

以上,我们简单实现了一个可盐可甜的彩虹屁bot

再也不用担心忘记跟女票早午晚安了,哈哈哈哈哈哈哈哈哈哈哈嗝~

PS: 以上情节纯属虚构,楼主暂无女票,单身可撩,狗头保命🐶

七、其他

我之前在腾讯云+社区开设了一个《万物皆可Serverless》专栏,

对 Serverless 的一些有趣实践感兴趣的同学可以去瞅瞅。

《万物皆可Serverless》专栏系列文章

  1. 万物皆可Serverless之免费搭建自己的不限速大容量云盘(5TB)
  2. 万物皆可Serverless之使用云函数Timer触发器实现每天自动定时打卡
  3. 万物皆可Serverless之使用SCF+COS快速开发全栈应用
  4. 万物皆可Serverless之使用SCF+COS免费运营微信公众号
  5. 万物皆可Serverless之使用SCF快速部署验证码识别接口
  6. 万物皆可Serverless之Kaggle+SCF端到端验证码识别从训练到部署
  7. 万物皆可Serverless之借助微信公众号简单管理用户激活码
  8. 万物皆可Serverless之使用SCF+COS给未来写封信
  9. 万物皆可Serverless之在Flutter中快速接入腾讯云开发
  10. 万物皆可Serverless之在Flutter中写一个Dart原生腾讯云对象存储插件
  11. 万物皆可Serverless之关于云函数冷热启动那些事儿
  12. 万物皆可Serverless之我的Serverless之路

🏆 技术专题第七期 | 万物皆可 Serverless