前言

這幾個月透過家裡頭的桌機來定時跑爬蟲以及更新 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,接著把它打開即可。
螢幕快照 2018-05-18 下午5.12.43

轉載請注明轉自: Archie  , 本文固定鏈接: HEROKU

Bitnami