5分鍾,教你用Python每天跟女朋友說1000遍土味情話!


 

目錄

一、serverless簡介

serverless架構

serverless三大應用場景

serverless的優勢

二、python實現發送郵件

三、部署到騰訊雲serverless,實現自動發送

四、效果展示

五、注意事項


一、serverless簡介

serverless,顧名思義,即“無服務器”,提供一個微型的架構,用戶不需要部署、配置或管理服務器服務,只需要專注於業務邏輯,代碼運行所需要的服務器服務皆由雲端平台來提供,因此運維成本很低。

serverless有一個非常出名的產品,就是亞馬遜公司在2014年推出的AWS Lambda

  • serverless架構

主要包含兩部分:BaasFaas,通常位於雲端,使用時不需要關注最底層的服務器。

Baas(后端即服務:Backend as a Service)包括對象存儲、雲數據庫、API網關、消息推送等。

Faas(函數即服務:Functions as a Service)對計算能力進行了抽象,可以在無需管理服務器的情況下響應事件。

  • serverless三大應用場景

場景一:事件觸發場景,即有事件觸發時才會執行。

場景二:流量突發場景,遇到突發大流量情況時,serverless架構下按需加載,彈性伸縮,節省資源,負載均衡。

場景三:大數據處理場景,用戶只需要上傳核心代碼到函數計算,就可以快速完成整個工作。

  • serverless的優勢

傳統架構下,面對大流量場景,需要增加機器或者對機器升級,運維較為困難。面對高峰和低谷,無法做到按需使用,成本較高。

serverless架構下,開發者只需專注代碼開發,無需在各個雲資源控制台手動開通服務和配置管理,並能夠根據業務請求自動進行彈性伸縮;支持用戶按需付費,成本較低;開發周期快,很大程度上提升了開發、部署的效率。

具體可以查看這里的文檔  https://www.serverless.com/cn/framework/docs/


二、python實現發送郵件

import io
import sys
import time
import datetime
import random
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.qq.com"
mail_user = "*********@qq.com" #此處填你的郵箱
mail_girl = "*********@qq.com" #女朋友的郵箱
mail_pass = "*************" #郵箱密碼,默認POP3/SMTP服務是關閉的,需要在設置中開啟查看
name_gf = "***" #女朋友的名字
mail_port = 465
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')

def getWeather():
    r = requests.get(
        'http://wthrcdn.etouch.cn/weather_mini?city=%E5%8C%97%E4%BA%AC')
    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)
    t = today.timetuple()
    return f'今天是{t.tm_year}年{t.tm_mon}月{t.tm_mday}日 星期{t.tm_wday+1}'

def getSoup():
    
    return{
        0:'你知道你和星星有什么區別嗎?星星在天上,你在我心里。',
        1:'這是我的手背,這是我的腳背,你是我的寶貝。',
        2:'莫文蔚的陰天,孫燕姿的雨天,周傑倫的晴天,都不如你和我聊天。',
        3:'我覺得你好像一款游戲。什么游戲?我的世界。',
        4:'你今天特別討厭,討人喜歡和百看不厭。',
        5:'你上輩子一定是碳酸飲料吧,為什么我一看到你就能開心的冒泡。',
        6:'我對你的愛,就像拖拉機上山,轟轟烈烈……',
    }.get(random.randint(0,6),'false')

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

def night():
    return '\n'.join([getSoup(),  f'晚安,{name_gf},夢里見!'])

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)
    print('enter')
    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_gf}' if getTimeX() != 'afterNoon' else '晚安,{name_gf}'
    try:
        smtpObj.sendmail(mail_user, [mail_girl], message.as_string())
        logger.info("發送成功")
    except smtplib.SMTPException as e:
        logger.info(e)
        logger.info("發送失敗")
    logger.info(content)
    return content

 


三、部署到騰訊雲serverless,實現自動發送

1.注冊騰訊雲賬號騰訊雲 - 產業智變 雲啟未來 (tencent.com)

 

2.找到雲函數的管理控制台->函數服務->新建->自定義創建

 

3.將函數代碼粘貼到index.py中,單擊完成。

4.點擊部署,部署到騰訊雲

5.找到觸發管理,創建觸發器,設置定時觸發


四、效果展示

馬上就要到520了,快用起來吧!


五、注意事項

同時發給多個人的時候,一定要注意創建一個新的函數。

為什么呢?

因為我在運行過程中出現了一個error,收到的郵件是這個樣子

一堆“早安,小紅”里面突然混進了一個“早安,小白”。

查看了一下日志,是一個超時錯誤。調用失敗后自動運行了前一個調用成功的代碼,而我發送的時候只改了女朋友的名字。。

(幸好是在測試的時候發現的,否則又將是一個翻車現場。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM