不過you know,我這個人嘛,懶~~,每天上去看網頁多麻煩…要是哪天忘了看那可是賠不起呀,畢竟強者我同學成績猛高,成績都比平均高了兩個標準差,我去考大概只能考他的零頭出來QQ。
靈機一動,為啥我不找我的好友「葉闆大師」幫忙呢?
概念其實很簡單,Google App Engine 本身就有cron 的設定,可以定時觸發一個function,最快每一分鐘觸發一次,到一個月一次都行;還有各種複雜的設定文件:
http://yhhuang1966.blogspot.tw/2013/03/gae-cron-job.html
首先我們先把向facebook 某user 發送訊息的函式獨立出來,再寫一個新的class 處理cron 的狀況,至於receiver 的ID (也就是我的ID) 是多少,那在之前寫bot 的時候,從log 裡面撈出來的:
CONSTANT_RECEIVER = "Fan ID Here" class FBNotify(webapp2.RequestHandler): def get(self): logging.info("Fire periodically hello") send_fb_message(CONSTANT_RECEIVER, "Periodically Hello") app = webapp2.WSGIApplication([ ('/webhook', FBwebhook), ('/fbnotify', FBNotify), ('/', MainPage), ], debug=True)
有了上面的設定,在project 中加上cron.yaml 先設定每分鐘觸發一次fbnotify get(注意雖然是 1分鐘可是要寫 minutes),時區在以分鐘為單位的狀況就不用設了,詳細請見參考資料:
cron: - description: check eju website automatically url: /fbnotify schedule: every 1 minutes timezone: Asia/Taipei
用appcfg.py update之後葉闆大師就會熱情的每分鐘定期向你問好:
如果覺得它很煩,只要把cron.yaml 裡面的內容刪到剩下cron: 一行,再appcfg.py update_cron把cron 取消掉就行了。
當然這樣還不行,重點是要監看,EJU 的結果會公佈在這裡:
https://www.koryu.or.jp/taipei-tw/ez3_contents.nsf/14
方法就很正規了,把第一列的資料給拉出來,xpath 的部分先用chrome 的檢查看過,決定xpath 為:
//tr[@valign='top']/td/a[@title]/@title
受限於gae 的關係,我們只能用lxml (其實應該也可以裝 beautifulsoup 不過我有點懶),搭配urllib2把資料拉下來,取出第一列的資料若是和現在的資料不同就給我發送訊息,測試用時,就算沒變也會發一則:URL = "https://www.koryu.or.jp/taipei-tw/ez3_contents.nsf/14" FIRST_ROW = u"2016年度第二期日本交流協會獎學金(短期留學生)--合格發表"
res = urlfetch.fetch(self.URL)
s = res.content root = lxml.html.fromstring(s) firstTitle = root.xpath("//tr[@valign='top']/td/a[@title]/@title")[0] isNew = (firstTitle != self.FIRST_ROW) if isNew: send_fb_message(CONSTANT_RECEIVER, "Notification: There is new message") else: send_fb_message(CONSTANT_RECEIVER, "Notification: There is no new message")把它加到fbnotify 的get 裡面,先用cron 為1 minute 測試,確定真的會送出訊息;也可以直接開瀏覽器,造訪 xxxx.appspot.com/fbnotify 觸發檢查,看看有沒有發訊息給你:
接著就可以把cron 改為30 minutes了,安心去睡覺等葉闆大師的通知了……
才怪!
我還是超緊張的,還是會開網站檢查一下它有沒有更新,要是code 沒寫好怎麼辦,或者葉闆大師下線了呢?這個網站為啥不弄個RSS 之類的就好了Orz。老實說,寫這個花了一兩個小時,其實只要每天早上花 1 秒鐘開網頁看一下就好了,我覺得我這樣根本多此一舉。
參考文件:
GAE cron 相關文件,cron的佈署和 schedule format:https://cloud.google.com/appengine/docs/python/config/cron
https://cloud.google.com/appengine/docs/python/config/cronref#schedule_format
其他相關文件,python built-in-libraries
https://cloud.google.com/appengine/docs/python/tools/built-in-libraries-27
ps :想靠北一下,GAE 用了兩年覺得網頁愈改愈亂,要找想要的東西都找不到,每每花一堆時間在找一些小東西。
----
按:剛剛在中午左右,已經收到葉闆大師的通知了,實驗成功,謝謝你葉闆大師XD
沒有留言:
張貼留言