[Day 30] Heroku Scheduler

架好服务器後,要订阅服务,就是要在一个时间点去捞设定资料并产生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/

参考资料:

如果有任何写得不好的地方,请跟我说,谢谢。


<<:  [2020铁人赛Day28]糊里糊涂Python就上手-Pandas的观念与运用(上)

>>:  I Want To Know React - Context 范例 & 使用技巧

Material UI in React [ Day13 ] Inputs (slider) 调整滑块

Slider 滑块组件通常用来跳整音量,萤幕亮度的时候使用,这里值得变更不能以 const [sli...

新新新手阅读 Angular 文件 - Add Services - Day08

声明一下 这边要声明一下,这一篇其实应该出现在 Day07 的内容之前才对,所以,如果真的有读者 f...

初学者跪着学JavaScript Day21 : 原型毕露(下)

一日客语:中文:圆 客语: 眼ienˇ 学习内容 检查实例的建构器类型:instanceof、con...

[C#] LeetCode 3. Longest Substring Without Repeating Characters

Given a string s, find the length of the longest s...

Progressive Web App Checklist: 优化检核清单项目说明 (7)

Starts fast, stays fast Web App 的效能会直接影响使用者体验,也会影响...