iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
0

架好伺服器後,要訂閱服務,就是要在一個時間點去撈設定資料並產生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/

參考資料:

如果有任何寫得不好的地方,請跟我說,謝謝。


上一篇
[Day 29] 部屬(heroku)
系列文
用 Python 玩 PDF,結合Django 變成一個網頁系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chun8106
iT邦新手 5 級 ‧ 2022-03-17 09:18:21

大神,請問可以分享原碼嗎?

我要留言

立即登入留言