架好伺服器後,要訂閱服務,就是要在一個時間點去撈設定資料並產生PDF並寄送email,寫一個檔案去做這件事。
新增一個檔案 crontabSendEmail.py,要讓heroku的排程附加元件,用Heroku Scheduler,他可以設定時間執行動作。
因為會用到django orm ,所以要 django.setup(),call 天氣API因為資料都一樣,只有區不一樣,就呼叫一次就好。
撈所有紀錄去判斷選了什麼區,產製PDF,夾帶檔案,寄送email。
crontabSendEmail.py
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pdfProject.settings')
import django
django.setup()
from django.core.mail import EmailMessage
from lib.pdfWeather import CrawlerWeatherAPI, PdfWeather
from pdfProject.settings import MEDIA_ROOT, EMAIL_HOST_USER
from main.models import WeatherSubscribe
if __name__ == '__main__':
crawlerWeatherAPI = CrawlerWeatherAPI()
dataDictListAll = crawlerWeatherAPI.getCrawlerData()
weatherSubscribes = WeatherSubscribe.objects.all()
for weatherSubscribe in weatherSubscribes:
locationNameList = weatherSubscribe.districts
dataDictList = []
for dataDict in dataDictListAll:
if dataDict['locationName'] in locationNameList:
dataDictList.append(dataDict)
fileName = os.path.join(MEDIA_ROOT, '未來鄉鎮天氣預報.pdf')
pdfWeather = PdfWeather(dataDictList, fileName)
pdfWeather.export()
fromEmail = EMAIL_HOST_USER
toEmailList = [weatherSubscribe.email]
email = EmailMessage(
'未來鄉鎮天氣預報',
'您好,附檔是未來鄉鎮天氣預報PDF,謝謝',
fromEmail,
toEmailList,
)
email.attach_file(fileName)
email.send()
程式寫完,記得上傳到heorku ,
去heroku 設定加上 add-on Heroku Scheduler ,選擇免費方案
新增工作,讓他每天晚上9點送隔天的天氣預報。
可以在heorku跑執行指令確認有沒有錯。
$ heroku run python3 crontabSendEmail.py
這樣就完成了。
結語:
總算結束了,這30天前半部介紹了ReportLab的各個元素用法,後半部應用天氣api 的資料,製作 未來天氣預報pdf,後來結合django 做查詢功能,完成一個粗略的 報表訂閱網頁系統,未來可以根據需求加入其他資料,頁面多通知訊息等等,都是可以再做的。
demo連結:https://demo-pdf-weather.herokuapp.com/
參考資料: