女朋友的情緒難以捉摸,作為程式設計師我應該?
文章釋出於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。
轉自 |資料團學社(微信搜尋metrodata_xuexi 即可關注)
本文約1200字,閱讀需要4分鐘
關鍵詞:阿里雲 Python 郵件 星座
本文講述了使用和部署簡單雲伺服器的方法,可以用Python實現以郵件方式獲取每日星座運勢。
最近遇到了一件難事:我發現女友突然愛上了“十二星座”,每天翻看各種星座運勢,逮著人就要給人算命,神神叨叨的,心情也同樣如天上的星星那般,難以捉摸。
這可怎麼辦呢?為了摸清其規律,對症下藥,挽回我即將逝去的愛情,我搜索“星座運勢”,得到這個東東:
這可真是好東西!可是星座運勢每天都不一樣,如果能像日報那樣每天獲取到推送就太好了!
我決定使用當今最前沿的網際網路雲服務,實現自動算命功能,以科學的手段拯救愛情。
▼
獲取星座資訊,選定算命網站
女友的星座?嗯…我記得好像是白羊或者金牛或者雙子…或者摩羯或者水瓶或者雙魚。算了算了~這個不重要,隨機吧!
排名第8的星座:天蠍座。應該就是它了!
然後,我瀏覽各大算命網站,發現大家算出來的結果都是一個版本,那也隨機選一個吧!
這是一款星座運勢查詢API,具體如何使用API,請參考這篇:感謝百度,我再也不用手動抓經緯度了!
主要步驟就是訪問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)
▼
用指令碼獲取自動反饋
第二步,我需要把查詢到的結果,每天自動反饋給我,比如通過簡訊或者郵件。
這裡選擇郵件,因為發簡訊要錢,郵件不要錢。
首先,註冊一個郵箱,這裡推薦163郵箱。獲得SMTP伺服器地址。
然後編寫郵件傳送自動傳送指令碼,指令碼內容為通過API獲取的星座運勢。然後設定定時傳送時間,比如每天早上8點。這裡為了快速驗證指令碼,簡單設定了間隔60秒傳送一次。
1、設定郵件傳送任務
#下面的發件人,收件人是用於郵件傳輸的。
smtpserver = 'smtp.163.com' #郵件伺服器
username = '[email protected]' #郵箱
password='XXXXXX' #郵箱密碼
sender='[email protected]' #發件人郵箱
receiver='[email protected]' #收件人郵箱
#收件人為多個收件人
#receiver=['[email protected]','[email protected]']
subject = '星座運勢' #郵件名稱
#通過Header物件編碼文字,如果出現中文亂碼情況,請使用
#subject = '中文標題'
#subject=Header(subject, 'utf-8').encode()
2、構造郵件物件
#構造郵件物件
#下面的主題,發件人,收件人,日期是顯示在郵件頁面上的。
msg = MIMEMultipart('mixed')
msg['Subject'] = subject
msg['From'] = '[email protected] <[email protected]>'
msg['To'] = '[email protected]'
#收件人為多個收件人,通過join將列表轉換為以;為間隔的字串
#msg['To'] = ";".join(receiver)
#msg['Date']='2018-9-23'
3、構造文字內容
text = content #傳入文字
text_plain = MIMEText(text,'plain', 'utf-8')
msg.attach(text_plain)
4、傳送郵件
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()
5、構建定時任務
def main(): #構建定時任務
while 1 :
run()
time.sleep(60)#設定指令碼執行的時間間隔
到此,簡單的算命指令碼就弄好了。不過接下來面臨一個問題,家中電腦不可能24小時待命執行指令碼,我需要一臺永不停止的電腦。
▼
獲取一臺“永不停止的電腦”
阿里雲瞭解一下。
阿里雲可以搭建雲站點,進行雲計算,運行雲爬蟲……當然也可以用來雲算命!
首先,進入阿里雲官網,使用您的淘寶賬號登陸
購買雲伺服器ECS,找最便宜的就好
選擇伺服器配置,配最便宜的就行,映象從映象市場找一個python執行環境
然後下單,只要15.4!挺便宜的。
▼
使用阿里雲
我們進入管理控制檯,檢視例項,已經在執行中了:
1)先重置伺服器密碼,然後進行遠端連線。這裡會自動生成一個遠端連線密碼,記下來,不要忘了
2)輸入賬號和密碼,登陸伺服器
賬號:root,密碼:就是剛才設定密碼時的那個。
3)下面和平時使用cmd安裝python包一樣,我們安裝一些會使用到的庫:
4)下載一個FileZilla,用來上傳指令碼至伺服器:
5)主機填IP地址(在阿里雲控制檯,例項詳情頁)。賬號密碼和剛才一樣,埠填22
6)進入之後,新建一個資料夾,把指令碼拖進去
7)為了使用方便,我們可以再下載一個叫putty用於訪問伺服器,進行操作
填入IP和埠,然後點選OPEN,後面和在頁面上進行遠端管理操作完全一樣~
比如,我們可以進入python環境,執行一些程式碼:
這裡,先CD到指令碼所在目錄,然後,鍵入後臺執行指令碼命令。
然後指令碼將會不間斷自動執行。
(備註:郵件服務請使用阿里雲自己的郵箱伺服器和解決方案,否則可能會發生不給發郵件的情況)
好了,讓我們檢視一下郵箱:
點開一封郵件,是這樣的:
看!結果一目瞭然,這樣我就可以有針對性的哄女友開心了!
比如,上面寫到,今天是一個適合學習和積累的日子。我果斷為女友入手一套資料分析師(Python)課程,我覺得她一定會取消今天和我共進晚餐的計劃,好好學習!
附註:
本文純屬虛構,如有雷同,節哀順變。
這裡主要是想講一下如何使用和部署簡單的雲伺服器。我們可以在雲伺服器上自動執行一些指令碼,比如時間花費較長的爬蟲指令碼,或者資料量極大的運算邏輯。然後,甚至我們可以搭建簡易的站點,實現自己的API介面,比如可以嘗試一下搭建一個POI查詢服務API~