台灣定量降水預報 Telegram 頻道及 bot


如果出門的時候,可以知道這天會不會下雨,如果會,又是在上午還是下午下,雨量是大還是小,你說多好啊!

但,現在不是手機中內建的天氣 app 都已經可以做到準確到一小時的降雨預報嗎?是的,但它們的缺點包括提供的是機率而非降雨大小、精確度只到市的行政區甚至只到城市、如果當天要去旅行,也無法直接從台北看到高雄和沿途各地天氣。其實如果只需 12 小時左右的全局降水報告,是可以做得更精準的。

其實,中央氣象局是有提供每 6 小時的降水預報的,那麼,為何不利用 Telegram 提供的沒限制容量功能,讓它把圖片暫存起來並推送到手機上,讓我們每天早上 7 時,都可以看到整個台灣  8:00 ~ 14:00 及 14:00 ~ 22:00 那兒會下雨呢?

各位觀眾,這就是為何我去了研究 Telegram bot 並做了這個 @precipitation_taiwan 台灣定量降水頻道了,每天早上七時,你都可以知道那裏會下雨、是上午下還是下午下、雨量又大不大了。

除了預報降水圖,中央氣象局還有提供累積雨量圖,不過似乎不太適合 Channel ,如果大家覺得有需要的話,我可以考慮升級成 chat bot ,加上詢問後提供這圖功能的。
Telegram channel 沒太多技術可言,就在這裏講講 Telegram bot 吧。

要開發 Telegram bot 首先要找 @BotFather 去申請,然後,就是研究文件。但我走冤枉路了,一開始時,就去了找已經包好的 Python wrapper ,結果,因為 wrapper 是為了設計成讓人們更容易開發有更複雜功能的 chat bot ,所以它的文件也是針對 chat bot 的,結果我做了一個 chat bot 出來,但,這不是我想要的啊,我想每天定時自動發佈圖片,而不是要主動問 chat bot 然後 chat bot 再送我圖片。

於是我終於重回正軌,看官方的文件,一看就會了,果然 curl 才是我的真愛啊。

簡單來說,只要發佈圖片的話, curl 一行就做到了,範例如下:
curl --data "chat_id={chat_id}&photo={photo_url}" https://api.telegram.org/bot{token}/sendPhoto

記得把 {token} 換成你 bot 的 token、{chat_id} 換成使用者的 id 或者頻道的名稱,例如我是填 @precipitation_taiwan ,最後把圖片的網址 {photo_url} 也加上去,這樣就完成了。

我有把這個簡單的 script 放上 github,網址是: https://github.com/livekn/precipitation_taiwan_bot 。

再簡單來說,你只要加 @precipitation_taiwan 這個頻道就可以享受上面寫的這些成果了。如果大家會覺得會有需求的話,只要告訴我,我可以在 bot 上加上更多功能成為 chat bot 的。

希望每天早上 7 時會自動告訴你 8 ~ 14 及 14 ~ 22 的降水預報也會對你有用吧。

注:降水是指在大氣中冷凝的水汽以不同方式下降到地球表面的天氣現象,因此不一定是降雨,不過因為台灣大部分地方通常都不會下雪,所以除了冬天的玉山山頂之類的少數地方外,降水圖基本上就可以理解成降雨圖了。

留言

這個網誌中的熱門文章

如何在ubuntu中compile kernel(12.10)

如何在linux kernel 3.7中加入system call