from datetime import datetime
import pytz
tz = pytz.timezone('Asia/Bangkok')
d = datetime.now(tz).strftime('%Y-%m-%d')
def check_datenow(t):
return if d in t
มาลูปจัดเก็บลง data
for i in temp_data['stations']:
d_temp = {}
d_temp['Lat'] = i['lat']
d_temp['Lng'] = i['long']
l_temp=i['LastUpdate']
d_temp['aqi'] = l_temp['AQI']['aqi']
if 'PM25' in list(l_temp.keys()):
pm25=l_temp['PM25']['value']
if pm25 != 'n/a' and pm25!='' and pm25!='-' and pm25!='N/A':
d_temp['pm2.5'] = pm25
else:
d_temp['pm2.5'] = ''
#continue
else:
d_temp['pm2.5'] = ''
#continue
if 'PM10' in list(l_temp.keys()):
pm10=l_temp['PM10']['value']
if pm10 != 'n/a' and pm10!='' and pm10!='-' and pm10!='N/A':
d_temp['pm10'] = pm10
if 'CO' in list(l_temp.keys()):
CO=l_temp['CO']['value']
if CO != 'n/a' and CO!='' and CO!='-' and CO!='N/A':
d_temp['CO'] = CO
if 'NO2' in list(l_temp.keys()):
NO2=l_temp['NO2']['value']
if NO2 != 'n/a' and NO2!='' and NO2!='-' and NO2!='N/A':
d_temp['NO2'] = NO2
if 'O3' in list(l_temp.keys()):
O3=l_temp['O3']['value']
if O3 != 'n/a' and O3!='' and O3!='-' and O3!='N/A':
d_temp['O3'] = O3
if 'SO2' in list(l_temp.keys()):
SO2=l_temp['SO2']['value']
if SO2!= 'n/a' and SO2!='' and SO2!='-' and SO2!='N/A':
d_temp['SO2'] = SO2
d_temp['title'] = i['areaTH']
d_temp['time'] = l_temp['date']+" "+l_temp['time']
d_temp['source'] = "air4thai"
if check_datenow(d_temp['time']):
data.append(d_temp)
ต่อมา เรามาจัดการดึงข้อมูลคุณภาพอากาศในเขตกรุงเทพมหาครโดยดึงผ่าน Bangkok Air Quality กัน
Bangkok Air Quality มีข้อดีตรงที่มี XML ที่สามารถดึงมาใช้งานได้ โดยดึงจาก
https://bangkokairquality.com/bma/marker.php เป็น XML หลาย ๆ คน คงใช้ไลบารี XML ของ Python ในการจัดการ XML แต่ผมจะใช้วิธีที่ง่ายกว่านั้น โดยใช้ xmltodict สามารถติดตั้ง xmltodict ได้ด้วยคำสั่ง xmltodict ก่อนดึงข้อมูล เนื่องจาก Bangkok Air Quality ใช้รูปแบบวันเดือนปีที่ไม่เหมือนกับ AIR4THAI จึงต้องสร้างฟังก์ชันใหม่ขึ้นมา
d2 = datetime.now(tz).strftime('%d-%m-%Y')
def check_datenow2(t):
return if d2 in t
# getdata
import xmltodict
data_bangkok=dict(json.loads(json.dumps(xmltodict.parse(r2.text),ensure_ascii=False)))
for i in data_bangkok['markers']['marker']:
d_temp = {}
d_temp['Lat'] = i['@lat']
d_temp['Lng'] = i['@lng']
d_temp['aqi'] = ''
if '@pm25' in list(i.keys()):
if i['@pm25'] != 'n/a' and i['@pm25']!='' and i['@pm25']!='-':
d_temp['pm2.5'] = i['@pm25']
else:
d_temp['pm2.5'] = ''#continue
else:
d_temp['pm2.5'] =''#continue
if '@pm10' in list(i.keys()):
d_temp['pm10'] = i['@pm10']
d_temp['title'] = i['@district_th'].strip() + " กรุงเทพฯ"
d_temp['CO'] = ''
d_temp['NO2'] = ''
d_temp['O3'] = ''
d_temp['SO2'] = ''
d_temp['time'] = i['@date_time']
d_temp['source'] = "bangkokairquality"
if check_datenow2(d_temp['time']):
d_temp['time'] = d_temp['time'].replace(d2,d) # เปลี่ยนวันเดือนปี ให้เหมือนกัน
data.append(d_temp)
from pythaiair import Air
air = Air()
กรุงเทพpm25_x = [i['title'] for i in air.get_data_provinces()['กรุงเทพฯ']]
กรุงเทพpm25_y = [i['pm2.5'] for i in air.get_data_provinces()['กรุงเทพฯ']]
กรุงเทพpm25 = sorted(list(zip(กรุงเทพpm25_x, กรุงเทพpm25_y)), key=lambda x: x[1],reverse=True) # เรียงจากมากที่สุดไปน้อยที่สุด
pm25_x = [i[0] for i in กรุงเทพpm25]
pm25_y = [i[1] for i in กรุงเทพpm25]
from nvd3 import discreteBarChart # ติดตั้งด้วยคำสั่ง pip install python-nvd3
chart = discreteBarChart(name='discreteBarChart', height=400, width=1280)
xdata = pm25_x[:5]
ydata = pm25_y[:5]
chart.add_serie(y=ydata, x=xdata)
chart.buildhtml()
with open('bkk.html','w') as f:
f.write('chart.htmlcontent')