HEROKU

前言

這幾個月透過家裡頭的桌機來定時跑爬蟲以及更新 Firebase 資料庫,不過電費也是一筆固定支出,所以趁今天想到這件事,便來搬移到免費的 HEROKU 來做這些事。

HEROKU

是一個有提供免費伺服器方案的平台,支援的語言算多,而我的爬蟲是以 Python 3.6 作為開發語言的,故選擇它來玩玩。 在免費的方案之中有一些限制,如 24 小時內得休息 6 小時之類的; 不過在這邊,我需要的只是一個可以執行 Cron Job 的地方,所以不需要升級主機的部分。 目前我的 HEROKU 裡頭包含著三個動作:

  • 每天台灣時間 00:00 時,到星座網爬蟲並記錄當日運勢到 Firebase
  • 每天台灣時間 09:00 時,到 PTT CodeJob 以及 Soft_Job 版搜尋 iOS 相關的文章,並 mail 到我的信箱
  • 每天台灣時間 12:00 時,爬 PTT 一些熱門看板的文章並發佈到機器人部落格以及機器人推特之中 我分成三個 .py 檔案,下方會說明我的作法。

簡單的建構步驟

首先,先到 HEROKU 的 dashboard 建立一個新的 App,接著照著它的敘述完成 Git 的建置。 我在資料夾當中,放入了下列的檔案:

  • PTT.py – 12:00 該做的事
  • iOS.py – 09:00 該做的事
  • Astro.py – 00:00 該做的事
  • requirements.txt – 提供給 HEROKU 知道要在這台機器上安裝哪些 Python 的套件
  • serviceAccountCredentials.json – 存取 Firebase 所需要的 credential 文件
  • Procfile – 用來告知 HEROKU 關於這個 App 的一些參數
  • clock.py – 利用 apscheduler 來完成 cron job 的撰寫

clock.py

import os
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
@sched.scheduled_job('cron', hour=0)
def scheduled_job():
    print('This job is run every day at UTC+8 8am.')
    os.system("python astro.py")
@sched.scheduled_job('cron', hour=1)
def scheduled_job2():
    print('This job is run every day at UTC+8 9am.')
    os.system("python ios.py")
@sched.scheduled_job('cron', hour=4)
def scheduled_job3():
    print('This job is run every day at UTC+8 12pm.')
    os.system("python ptt.py")
sched.start()

Procfile

clock: python clock.py

接著透過下方指令推送到 HEROKU 上頭部署

git push heroku master

便可以在 Free Dynos 的頁面看到我們剛剛定義的 clock python clock.py,接著把它打開即可。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus