999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenAPI的Python空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)程序設(shè)計(jì)

2016-08-27 07:21:29琳,任
中低緯山地氣象 2016年3期

陳 琳,任 芳

(1.四川省氣象臺(tái),四川 成都 610072;2.陜西省氣象服務(wù)中心,陜西 西安 710014)

?

基于OpenAPI的Python空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)程序設(shè)計(jì)

陳琳1,任芳2

(1.四川省氣象臺(tái),四川成都610072;2.陜西省氣象服務(wù)中心,陜西西安710014)

環(huán)境氣象預(yù)報(bào)是政府和環(huán)保部門應(yīng)對(duì)空氣重污染時(shí)的重要決策支撐。只有實(shí)時(shí)快捷地獲取當(dāng)前空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù),氣象部門才能正常開(kāi)展環(huán)境氣象預(yù)報(bào)業(yè)務(wù)。為了快速、準(zhǔn)確地獲取西南區(qū)域空氣質(zhì)量監(jiān)測(cè)產(chǎn)品,并生成Micaps格式產(chǎn)品,開(kāi)發(fā)了基于一個(gè)OpenAPI的Python多線程程序。程序可直接調(diào)用API底層連接的數(shù)據(jù)庫(kù),獲取數(shù)據(jù)效率高,具有較高的實(shí)時(shí)性和準(zhǔn)確性,已投入四川省氣象臺(tái)天氣預(yù)報(bào)業(yè)務(wù)運(yùn)行。

OpenAPI接口;Python語(yǔ)言;多線程;空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù);Micaps

1 引言

隨著人們對(duì)環(huán)境質(zhì)量的重視,空氣污染已成為當(dāng)下民眾關(guān)注的熱點(diǎn)。而環(huán)境氣象預(yù)報(bào)作為氣象服務(wù)的新興業(yè)務(wù),也受到氣象部門越來(lái)越大的重視。為了加快環(huán)境氣象業(yè)務(wù)系統(tǒng)建設(shè),需進(jìn)行環(huán)境氣象多源數(shù)據(jù)分析和重污染天氣影響評(píng)估。對(duì)于研究環(huán)境氣象預(yù)報(bào)方法來(lái)說(shuō),環(huán)境監(jiān)測(cè)數(shù)據(jù)資料的獲取與保存至關(guān)重要。

當(dāng)前,環(huán)境監(jiān)測(cè)數(shù)據(jù)是由各省環(huán)境監(jiān)測(cè)總站將其按時(shí)以數(shù)據(jù)交換方式提供給各級(jí)氣象臺(tái),由于各方面原因,環(huán)境監(jiān)測(cè)總站提供的數(shù)據(jù)無(wú)具體值且數(shù)據(jù)實(shí)時(shí)性遠(yuǎn)不能達(dá)到環(huán)境氣象預(yù)報(bào)要求,此外,網(wǎng)上雖有當(dāng)天的空氣監(jiān)測(cè)實(shí)況,但網(wǎng)上的各類數(shù)據(jù)無(wú)法加載到氣象部門的專業(yè)業(yè)務(wù)系統(tǒng)(如Micaps系統(tǒng))中,使環(huán)境預(yù)報(bào)業(yè)務(wù)難以正常開(kāi)展。本文主要闡述利用Python提供的OpenAPI處理標(biāo)準(zhǔn)庫(kù),將環(huán)境監(jiān)測(cè)數(shù)據(jù)產(chǎn)品生成Micaps格式的實(shí)現(xiàn)方法。

2 技術(shù)方法

2.1OpenAPI

API的全稱是應(yīng)用編程接口(Application Programming Interface),這并不是一個(gè)新概念,在計(jì)算機(jī)操作系統(tǒng)出現(xiàn)的早期就已經(jīng)存在了。在互聯(lián)網(wǎng)時(shí)代,把網(wǎng)站的服務(wù)封裝成一系列計(jì)算機(jī)易識(shí)別的數(shù)據(jù)接口開(kāi)放出去,供第三方開(kāi)發(fā)者使用,這種行為叫做開(kāi)放網(wǎng)站的API,與之對(duì)應(yīng)的,所開(kāi)放的API就被稱作OpenAPI。

2.2Python腳本語(yǔ)言

Python是一種簡(jiǎn)單易學(xué)、功能強(qiáng)大的開(kāi)源編程語(yǔ)言,幾乎能夠在目前所有的操作系統(tǒng)上運(yùn)行,它有高效率的多層數(shù)據(jù)結(jié)構(gòu),能簡(jiǎn)單而有效地實(shí)現(xiàn)面向?qū)ο缶幊蘙1]。Python簡(jiǎn)潔的語(yǔ)法和對(duì)動(dòng)態(tài)輸入的支持,再加上其解釋性語(yǔ)言的本質(zhì),使得它在大多數(shù)平臺(tái)上的很多領(lǐng)域都是一個(gè)理想的腳本語(yǔ)言,特別適用于快速的應(yīng)用程序開(kāi)發(fā)[2]。尤其是Python提供了針對(duì)網(wǎng)絡(luò)協(xié)議的標(biāo)準(zhǔn)庫(kù),對(duì)網(wǎng)絡(luò)協(xié)議的各個(gè)層次進(jìn)行了抽象封裝,程序員可以集中精力處理程序邏輯。其次,Python非常擅長(zhǎng)處理字節(jié)流的各種模式,具有很快的開(kāi)發(fā)速度[3][4]。

2.3Python多線程

Python使用函數(shù)和類兩種方式包裝線程對(duì)象,其調(diào)用線程thread模塊的thread.start_new_thread()函數(shù)來(lái)創(chuàng)建一個(gè)新的線程,具體語(yǔ)法為:thread.start_new_thread ( function, args[, kwargs] ) ,其中function參數(shù)為調(diào)用的線程函數(shù);args為傳遞給線程函數(shù)的參數(shù),kwargs是可選參數(shù)[5]。調(diào)用關(guān)鍵代碼如下:

try:

thread.start_new_thread(gethtml(url), ("Thread-1", 2, ) )

thread.start_new_thread(gethtml(url), ("Thread-2", 4, ) )

except: Exception,e:

return Exception,":",e

其中,gethtml(url)函數(shù)用于獲取全國(guó)城市空氣質(zhì)量指數(shù)(AQI)排行榜。

3 程序設(shè)計(jì)

由于國(guó)家環(huán)境監(jiān)測(cè)總站未發(fā)布OpenAPI,程序采用第三方商業(yè)網(wǎng)站提供的OpenAPI。該網(wǎng)站數(shù)據(jù)全部來(lái)源于國(guó)家環(huán)保網(wǎng)站公開(kāi)數(shù)據(jù),網(wǎng)站再根據(jù)國(guó)家環(huán)保網(wǎng)站的實(shí)時(shí)數(shù)據(jù)進(jìn)行二次核實(shí)。程序設(shè)計(jì)內(nèi)容主要包括從OpenAPI獲得數(shù)據(jù)、匹配站點(diǎn)生成Micaps格式產(chǎn)品、生成可執(zhí)行文件等3個(gè)模塊。從OpenAPI獲得數(shù)據(jù)是基礎(chǔ),只有下載了OpenAPI提供的數(shù)據(jù),才能匹配預(yù)先設(shè)置的西南區(qū)域站點(diǎn)信息,得到各種空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)。程序設(shè)計(jì)流程如圖1所示:

圖1 程序設(shè)計(jì)流程Fig.1 Program design process

3.1從OpenAPI獲取數(shù)據(jù)

統(tǒng)一資源定位符(URL)是對(duì)可以從互聯(lián)網(wǎng)上得到的資源位置和訪問(wèn)方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址。互聯(lián)網(wǎng)上每個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它[6]。在Python語(yǔ)言眾多網(wǎng)絡(luò)函數(shù)庫(kù)中,功能最強(qiáng)大的是Urllib庫(kù),該庫(kù)提供一系列用于操作URL的功能,使用戶可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。通過(guò)使用Urllib庫(kù)的request模塊可以非常方便地抓取URL內(nèi)容,如發(fā)送一個(gè)GET請(qǐng)求到指定的頁(yè)面,即可返回JSON數(shù)據(jù)[7]。

從OpenAPI獲得數(shù)據(jù)的程序設(shè)計(jì)流程如圖2所示,具體流程如下:先導(dǎo)入從OpenAPI獲得數(shù)據(jù)所需的函數(shù)庫(kù)urllib和json,再定義一個(gè)函數(shù)gethtml(url),獲取全國(guó)城市的空氣質(zhì)量指數(shù)(AQI)排行榜,該函數(shù)返回的是JSON格式的數(shù)組,里面包含目前支持的全國(guó)190個(gè)城市AQI排行榜信息,其中每項(xiàng)信息包含area (城市名稱)、aqi(空氣質(zhì)量指數(shù))、co(一氧化碳1 h平均)、no2(二氧化氮1 h平均)等16種空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)。

圖2 從OpenAPI獲取數(shù)據(jù)流程Fig.2 Processes of Getting data from OpenAPI

由于OpenAPI獲取到本地的數(shù)據(jù)是JSON格式的,還需把JSON格式數(shù)據(jù)轉(zhuǎn)換成字典格式。字典是Python中唯一內(nèi)建的映射類型,可存儲(chǔ)任意類型對(duì)象,它的每個(gè)鍵值對(duì)用冒號(hào)分割,每個(gè)對(duì)之間用逗號(hào)分割,整個(gè)字典包括在花括號(hào){}中,鍵必須是唯一的,但值則不必。JSON格式數(shù)組轉(zhuǎn)換成字典后的數(shù)據(jù)格式如下:

[{"aqi":16,"area":"成都","co":0.456,…}{ "aqi":18,"area":"三亞","co":0.97, …}{"aqi":26,"area":"泉州",”co":0.717,… }]。

此部分關(guān)鍵代碼如下所示:

def gethtml(url):

try:

htmls = urllib.urlopen(url)

airproduct = json.loads( htmls.read())

excep: Exception,e:

return Exception,":",e

return (airproduct)

其中,url=http://www.####.###/api/querys/aqi_ranking.json&開(kāi)發(fā)者密鑰,airproduct = json.loads(htmls.read())的作用是把JSON格式轉(zhuǎn)換成字典格式。

3.2生成Micaps格式產(chǎn)品

3.2.1數(shù)據(jù)預(yù)處理為了將數(shù)據(jù)加載在氣象專業(yè)軟件Micaps系統(tǒng)上,需把數(shù)據(jù)轉(zhuǎn)換成Micaps 120類格式。具體步驟如下:首先生成西南區(qū)域有空氣質(zhì)量指數(shù)(AQI)的52個(gè)城市的經(jīng)緯度信息文件geo.txt,文件內(nèi)容如表1所示。

表1 西南區(qū)域52個(gè)城市經(jīng)緯度信息

站點(diǎn)名在字典airproduct中以“area”鍵表示,airproduct [i]['area']表示第i個(gè)站點(diǎn)“area”鍵的值。把經(jīng)緯度信息以字符串形式讀入內(nèi)存中,與之前的字典airproduct中“area”鍵的值進(jìn)行匹配,如匹配到相同值,用列表list[]記錄站點(diǎn)在字典中的索引值i。此部分關(guān)鍵代碼如下所示:

for i in range(0, len(listgeo)):

for j in range(0, len(airproduct)):

if airproduct[j]['area']==listgeo[i].split(' ')[3].decode("gbk"):

list.append(j)

break

其中l(wèi)en(listgeo)代表經(jīng)緯度信息列表listgeo的長(zhǎng)度;len(airproduct)代表字典airproduct的長(zhǎng)度。

接下來(lái)再利用索引列表list[]查找52個(gè)城市空氣質(zhì)量檢測(cè)數(shù)據(jù)的值,把查找到的值放在函數(shù)getele()的列表listele[]中。列表listele[]是記錄空氣質(zhì)量監(jiān)測(cè)要素的列表,其中ys表示空氣質(zhì)量監(jiān)測(cè)要素名,如“aqi”,“co”。例如調(diào)用函數(shù)getele(‘a(chǎn)qi’)表示在利用列表list[]的索引值查找字典airproduct鍵“aqi”的值,查找到的值用列表listele儲(chǔ)存,getele(‘co’)以此類推。關(guān)鍵代碼如下所示:

def getele(ys):

listele = []

for a in range(0, len(list)):

listele.append(str(airproduct[a][ys]))

return listele

3.2.2生成產(chǎn)品國(guó)家環(huán)境監(jiān)測(cè)總站空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)每小時(shí)更新1次,本程序每小時(shí)生成1個(gè)Micaps 120類數(shù)據(jù)文件,文件名格式如16022413.000。引入Python中的datetime庫(kù),截取時(shí)間的字符串作為文件名,保存文件的路徑path="d:” + datetime.now().strftime('%Y%m%d%H')[2:10] + ".000"。最后把文件頭、站點(diǎn)經(jīng)緯度和監(jiān)測(cè)數(shù)據(jù)等信息列表寫入文件,即生成Micaps 120格式產(chǎn)品,生成文件內(nèi)容見(jiàn)圖3。

圖3 Micaps 120格式的空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)產(chǎn)品Fig.3 Micaps 120 of air pollution products

在生成的Micaps 120類文件中,空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)主要包含aqi(空氣質(zhì)量指數(shù))、CO 1 h平均、NO21 h平均、O31 h平均、O38 h滑動(dòng)平均、SO21 h平均等要素。圖4為2016年2月24日13時(shí)空氣質(zhì)量監(jiān)測(cè)產(chǎn)品在Micaps 3.2系統(tǒng)的顯示界面。

圖4 Micaps 3.2系統(tǒng)顯示界面Fig.4 Micaps 3.2 system display interface

此部分關(guān)鍵代碼如下:

for x in range(len(listgeo)):

file(path,"w").writelines(listgeo[x].split(' ')[0]+" "+listgeo[x].split(' ')[1]+" "+listgeo[x].split(' ')[2]+" "+getele(‘a(chǎn)qi’)[x]+…+getele(‘so2’)+" ")

其中l(wèi)en(listgeo)代表經(jīng)緯度信息列表listgeo的長(zhǎng)度,listgeo[x].split(' ')[0]用于獲取geo.txt的站點(diǎn)編號(hào),listgeo[x].split(' ')[1]和listgeo[x].split(' ')[2]用于分別獲取geo.txt中站點(diǎn)的緯度和經(jīng)度。

3.3生成可執(zhí)行文件

為了使Python腳本程序能在未安裝Python環(huán)境的Windows系統(tǒng)下運(yùn)行,必須利用py2exe等工具把Python腳本(以.py為后綴)轉(zhuǎn)換成Windows可執(zhí)行程序(*.exe)。事先把Python腳本命名為airquality.py,然后在網(wǎng)上下載py2exe安裝程序,安裝完成后,建立一個(gè)用于發(fā)布程序的腳本文件[8],命名為setup.py,其內(nèi)容如下:

from distutils.core import setup

import py2exe

setup(console=["airquality.py"])

在Python的運(yùn)行命令提示窗口,鍵入如下命令:python setup.py py2exe,該命令執(zhí)行后,將產(chǎn)生一個(gè)名為dist的子目錄,其中包含了可執(zhí)行程序airquality.exe。把a(bǔ)irquality.exe放在Windows環(huán)境下,每小時(shí)執(zhí)行1次,即可自動(dòng)獲取每小時(shí)更新1次的空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)。

4 結(jié)語(yǔ)

利用Python豐富的標(biāo)準(zhǔn)庫(kù)以及快速開(kāi)發(fā)的特長(zhǎng),設(shè)計(jì)了一個(gè)基于OpenAPI的Python空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)產(chǎn)品程序,實(shí)現(xiàn)每小時(shí)定時(shí)自動(dòng)生成Micaps格式的西南區(qū)域空氣質(zhì)量監(jiān)測(cè)產(chǎn)品。目前該程序已部署到四川省氣象臺(tái)日常天氣預(yù)報(bào)業(yè)務(wù)中,其生成的空氣質(zhì)量監(jiān)測(cè)產(chǎn)品為環(huán)境氣象預(yù)報(bào)的研究工作提供了實(shí)況對(duì)比和技術(shù)支撐,滿足了預(yù)報(bào)員對(duì)空氣質(zhì)量監(jiān)測(cè)實(shí)況資料采集的需求。

[1] 劉志凱,張?zhí)t,劉磊.基于Web的Python3編程環(huán)境[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(7):236-239.

[2] 王大偉.基于Python的Web API自動(dòng)化測(cè)試方法研究[J]. 電子科學(xué)技術(shù),2015,2(5):573-581.

[3] Magnus Lie Hetland,司維,曾軍葳,等. Python基礎(chǔ)教程[M]. 北京:人民郵電出版社,2014:243-245.

[4] 高森. Python網(wǎng)絡(luò)編程基礎(chǔ)[M]. 北京:電子工業(yè)出版社,2007:326-327.

[5] 李俊麗.基于Linux的Python多線程爬蟲(chóng)程序設(shè)[J] .計(jì)算機(jī)與數(shù)字工程,2015(5):861-863.

[6] Elizabeth Castro.HTML XHTML CSS基礎(chǔ)教程[M].北京:人民郵電出版社,2007:35-37.

[7] TJ.O’Connor,崔孝晨,武曉音.Python絕技:運(yùn)用Python成為頂級(jí)黑客[M].北京:電子工業(yè)出版社,2016:213-220.

[8] 劉凌霞,郝寧波,吳海濤.21天學(xué)通Python[M].北京:電子工業(yè)出版社,2016:191-194.

Python Multithreaded Air Pollution Products Program Based on OpenAPI

CHEN Lin1,REN Fang2

(1.Sichuan Provincial Meteorology Observatory, Sichuan Chengdu 610072, China;2.Shanxi Provincial Meteorological Service Center, Xian 710014, China)

The environmental meteorological forecast is an important decision support for the government and the environmental protection departments to deal with the heavy air pollution. Only with real-time and fast access to current air pollution products, can the meteorological department carry out the normal environment and meteorological forecasting business. In order to quickly and accurately obtain southwest regional air pollution products and generate the Micaps products, an OpenAPI Python multithreaded program was developed. The program is of high performance, it can directly call API connections at the bottom of the database, the fetching data is more efficient, and the program is with timeliness and accuracy. This program has been applied successfully in daily operations of the Sichuan Meteorological Observatory.

Python;multithreading;air pollution products;OpenAPI;Micaps

1003-6598(2016)03-0078-04

2016-03-09

陳琳(1983—),女,工程師,主要從事氣象信息技術(shù)工作,E-mail:suelincl@126.com。

TP311

B

主站蜘蛛池模板: 97se亚洲综合在线| 欧美视频二区| 欧美日韩国产精品va| 日本一区二区不卡视频| 国产精品成人观看视频国产| 久久人人爽人人爽人人片aV东京热| 精品人妻无码中字系列| 四虎国产永久在线观看| 国产一区二区三区夜色| 综1合AV在线播放| 国产精品黑色丝袜的老师| 亚洲人成色在线观看| 欧美国产菊爆免费观看 | 视频国产精品丝袜第一页| 任我操在线视频| 在线免费不卡视频| 亚洲bt欧美bt精品| 欧美区一区| 国产欧美精品一区二区| 97se亚洲综合在线| 亚洲国产欧美国产综合久久| 国产精品永久不卡免费视频| 国产精品久久自在自2021| 久久香蕉国产线看观看式| 精品国产污污免费网站| 青草视频在线观看国产| 亚洲天堂精品在线| 九色综合伊人久久富二代| 青青草原国产免费av观看| 免费毛片网站在线观看| 黄色福利在线| 国产日韩欧美在线视频免费观看| 香蕉综合在线视频91| 97国产精品视频自在拍| a级毛片一区二区免费视频| 高潮毛片免费观看| 久久免费视频6| h视频在线观看网站| 超碰免费91| 99无码中文字幕视频| 国产麻豆aⅴ精品无码| 日本欧美一二三区色视频| 欧美色99| 性色一区| 欧美第二区| 精品成人免费自拍视频| 国产精品极品美女自在线| 拍国产真实乱人偷精品| 午夜视频免费一区二区在线看| 国产永久在线视频| 老司国产精品视频91| 亚洲久悠悠色悠在线播放| 日本午夜视频在线观看| 国内精品一区二区在线观看| 九九热这里只有国产精品| 99热这里只有精品免费| 欧洲亚洲一区| 欧美曰批视频免费播放免费| 欧美黄网在线| 手机在线免费不卡一区二| 美女高潮全身流白浆福利区| 亚洲欧美一区二区三区图片 | 伊人蕉久影院| www.亚洲色图.com| 国产精品漂亮美女在线观看| AⅤ色综合久久天堂AV色综合| 一本一道波多野结衣av黑人在线| 91欧美在线| 国产成人免费高清AⅤ| 999在线免费视频| 中文字幕 日韩 欧美| 婷婷丁香在线观看| 园内精品自拍视频在线播放| 小说 亚洲 无码 精品| 国产精品高清国产三级囯产AV| 日韩一级毛一欧美一国产| 伊人久久大香线蕉成人综合网| 国产精品无码AV片在线观看播放| 99视频精品全国免费品| 日本三级欧美三级| 久久免费成人| 亚洲黄色激情网站|