怪不得這位程式設計師有女朋友,原來是因為這個!

pythonlaodi發表於2020-12-08

一、緣起

前幾天

女票 -> 女同學甩給我上面那張圖,

PS:如有需要Python學習資料的小夥伴可以加點選下方連結自行獲取

python免費學習資料以及群交流解答點選即可加入

說她也想每天都能收到甜甜的彩虹屁。

好傢伙,

我一尋思這不就是個彩虹屁 bot 嘛,

自欺欺人地說?

但既然她開口了,

那我們必須得給她整到位,

走起 :rocket:

二、準備工作

考慮到她最近在準備 考研 ,需要有人每天鼓勵她,所以我打算給她每天來點毒雞湯,然後做個考研倒數計時的提示,再查詢一下當天的天氣,提醒她天冷加衣,小心著涼感冒(想到這裡我都有被感動到), 暖暖的 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,萬事俱備,程式碼整起:sunglasses:

三、人生苦短,我用 Python

沒時間解釋了,快上車 :car:

# 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 助你一臂之力

整完上面那些差不多兩分鐘就過去了,別擔心,剩下一分鐘交給騰訊雲函式足矣 :coffee:

Step 1:註冊登入騰訊雲(https://cloud.tencent.com/)

Step 2:開啟騰訊雲控制檯(https://console.cloud.tencent.com/)

Step 3:開啟雲函式選單,依次選擇函式服務->地區(隨便選個)->新建

Step 4:新建 Python 雲函式,環境 python3.6,選擇空白函式模板,下一步

Step 5:把前面改好的Python函式複製貼上到index.py(覆蓋原有程式碼),完成

Step 6:最後一步,新增定時觸發器

開啟剛才新建的 bot 雲函式,選擇觸發管理,新建觸發器,選擇定時觸發,自定義觸發週期:0 30 6 * * * * ,即每天早上6點30分(北京時間)自動觸發執行一次當前函式,以達到每天定時傳送“彩虹屁”給女票的目的 :grinning:

這裡我早晚各加了一個定時觸發器,每天對女票不止早午晚安哦:stuck_out_tongue_winking_eye:

PS:騰訊雲函式每月有免費的 100 萬呼叫次數+ 40萬GB·s 資源使用量哦,超級良心有木有,感動~

五、來吧,展示

早安

 

晚安

 

六、總結

以上,我們簡單實現了

一個可鹽可甜的彩虹屁 bot,

再也不用擔心忘記跟女票 早午晚安 了,

哈哈哈哈哈哈哈哈哈哈哈嗝~

 

相關文章