515
魔獸
使用 Cloud Insight SDK 監控北京空氣質量!
現在越來越多的 App 都開始有廣告了。特別是空氣質量監測,和天氣類的 App,廣告還是蠻多的,眼花繚亂,真是夠了。
最近剛好在用一款係統監控工具 Cloud Insight,它提供的 SDK 可以把任一數據上傳到他們那做展示。
靈機一動,作為一個程序員,自己動手豐衣足食,沒什麼不能解決的。
pip install -i https://pypi.oneapm.com/simple --upgrade oneapm-ci-sdk
這就安裝好了。
簡單用 ipython 看了看接口文檔, gauge 是主要的發數據的接口,好像 increment 也可以,但是不懂是搞啥的,貌似數據類型不一樣。
PM 2.5 API
首先得找一個 PM 2.5 API,參考了一下這個教程:Air Quality Widget - New Improved Feed。裏麵的資料顯示,美國駐京使館也用的是這裏的數據,應該還算準確吧。
注意看教程裏,他們請求的地址為:
https://feed.aqicn.org/feed/beijing/en/feed.v1.json
請求這個地址,就可以得到數據啦。
說到這個,其實國內很多 App 和網站都在用 PM25.in。用的人挺多的,就是發郵件速度有點慢,注冊之後獲取 Token 的郵件一直都沒發給我!
接入 Cloud Insight
先介紹下 Cloud Insight 吧,就是一款係統監控工具,支持 Ubuntu、MySQL、Docker 的監控。但是他們提供 SDK 可以自定義上傳數據,所以我們就用它來承接 PM 2.5 的數據吧。
他們也提供任一指標的報警功能,所以也可以通過設置報警,來發郵件提醒給我。
Cloud Insight SDK 和 StatsD 原理很像,SDK 的詳情可以參考文檔。
源代碼如下:
import requests
from oneapm_ci_sdk import statsd
PM25_API_URL = "https://feed.aqicn.org/feed/%s/en/feed.v1.json"
def get_city_data(city):
try:
res = requests.get(PM25_API_URL % city)
except:
return 0
else:
return res.json()['aqi']['val']
def using_sdk():
statsd.gauge('airquality.beijing.pm25', float(get_city_data('beijing')))
statsd.gauge('airquality.shanghai.pm25', float(get_city_data('shanghai')))
statsd.gauge('airquality.guangzhou.pm25', float(get_city_data('guangzhou')))
statsd.gauge('airquality.xuchang.pm25', float(get_city_data('xuchang'))) # 家裏。。
if __name__ == '__main__':
using_sdk()
首先通過 API 把數值取出來,然後通過 stats.gauge
對指標進行賦值,就可以了。唿~接下來是產品內部的使用了。
啦啦啦~自定義儀表盤開個 Air Quaility 儀表盤,數據選進來,就可以看各個城市的 PM 2.5 的實時數值了。
想隨時隨地知道北京空氣質量是否超標,卻又不想下載廣告一大堆的空氣質量 App。那我自己動手設一個報警策略吧。
大於或等於 100,就算超標好了。很簡單就設置完成了。
大功告成,等著郵件提醒吧。順便秀一下 Kickstarter 買來的 Pebble 手表。舒心啊:沒有廣告的北京空氣質量監測。
本文參考一篇帖子 pm25,關愛老大,征求原作者同意後改寫。
最後更新:2017-04-01 13:44:32