#!/data/data/com.termux/files/usr/bin/python
# -*- coding: utf8 -*-
#aqicn空氣質量 #https://aqicn.org/api/
#v2 同時指定多個監測站,已防止單個站點很久不更新數據
import json,requests,sys,time
#token從https://aqicn.org/data-platform/token/獲取,只需郵箱即可
token = 'YourToken'
#預設為當前IP位置,可自行指定基站,幫助 --help
stationList = ["@5851","@5855","@5860"]
def getAqi(station):
aqiUrl = "https://api.waqi.info/feed/"+station+"/?token="+token
try:
res = requests.get(aqiUrl)
a = res.json()
if a['status']=="ok":
if time.time() - a['data']['time']['v'] < 86400:
return a
else:
return {"status":a['data']['city']['name']+"的數據已過期。"}
else:
res = requests.get(aqiUrl)
a = res.json()
return a
except:
return {"status":"net error"}
def searchStation(keyword):
searchUrl = "https://api.waqi.info/search/?token="+token+"&keyword="+keyword
try:
res = requests.get(searchUrl)
a = res.json()
res = []
if a['status']=="ok":
for s in a['data']:
resT={}
resT['uid']=s['uid']
resT['name']=s['station']['name']
resT['aqi']=s['aqi']+" ("+s['time']['stime']+")"
res.append(resT)
return res
else:
return a
except:
return {"status":"net error"}
def processAqi(aqiJson):
s=aqiJson
# print(json.dumps(s, indent=4))
res={}
if s['status']=="ok":
res['cityName']=s['data']['city']['name']
res['time']=s['data']['time']['s']
res['aqi']=s['data']['aqi']
try:
res['pm25']=s['data']['iaqi']['pm25']['v']
except:
res['pm25']="N/A"
try:
res['pm10']=s['data']['iaqi']['pm10']['v']
except:
res['pm10']="N/A"
try:
res['temp']=s['data']['iaqi']['t']['v']
except:
res['temp']="N/A"
try:
res['humidity']=s['data']['iaqi']['h']['v']
except:
res['humidity']="N/A"
try:
res['wind']=s['data']['iaqi']['w']['v']
except:
res['wind']="N/A"
else:
res=s
return res
def main():
global station
if len(sys.argv)==1:
for station in stationList:
res = processAqi(getAqi(station))
print(json.dumps(res, indent=2, ensure_ascii=False))
elif len(sys.argv)==2:
station = str(sys.argv[1])
if station == "--help":
res={"@5851":"根據觀測點編號查詢","Nanyang":"根據城市名稱查詢",
"here":"根據IP查詢","s shenzhen":"查詢深圳觀測點",}
else:
res = processAqi(getAqi(station))
print(json.dumps(res, indent=2, ensure_ascii=False))
elif len(sys.argv)==3:
res = searchStation(str(sys.argv[2]))
print(json.dumps(res, indent=2, ensure_ascii=False))
if __name__ == '__main__':
main()
前天迎來如秋後的第一場中度霧霾。
本文更新於 2018/11/08。