MENU

航空例行天气报告API及实现方式

August 13, 2013 • 程序

其实一周前就完成这个东西了,一直没发出来。现在METAR查询作为iTracker 2.0辅助功能的一部分,那么索性把这一整套东西都发出来好了。

首先我贴出接口信息:

功能:返回指定机场的最近一条METAR,时间范围为2小时内(数据来源:美国国家海洋和大气管理局,NOAA)。若2小时内数据均未找到,返回字符串"NoData";有正确获得数据的,返回相应内容。
URL: http://bokjan.com/util/metar/api.php HTTP请求方式:GET
请求参数:icao(必须,string,4digit) 请求示例:
http://bokjan.com/util/metar/api.php?icao=RJCC 返回数据示例: RJCC 130200Z
01007KT 330V050 9999 FEW025 SCT030 BKN/// 26/19 Q1010

接下来我们一起看看这个接口是如何实现的。首先解决数据源问题。数据源不可能每次api请求都通过服务器再次向NOAA请求,所以数据本地化是必须的。这里我偷了个懒,直接拿了个shell脚本改了一下,扔crontab里半小时一次就完了。下面把这段shell贴出来看看:

APPPATH=#这里写上路径;
cd $APPPATH;
rm -f `date -u +%H`Z.TXT;
wget ftp://tgftp.nws.noaa.gov/data/observations/metar/cycles/`date -u +%H`Z.TXT;

这样一来就完事了。实际上是真的很简单,就是下载文件。具体文件内容大家可以到上面贴出的ftp上看一看。接着是查询数据,这也很简单。拿到的文件中数据很有规律,都是"ICAO 内容 换行"这样,那么用正则表达式就好了。下面贴出php内容,很简单,不多加赘述了。(php和数据置于同一目录)


update-130829:因考虑不周全,源码多次修改,现在仍无法判断是否完全解决问题。为避免误导,现撤去源码内容。实现思路已贴出在上方,请各位自行参考。

Tags: php, api
Archives Tip
QR Code for this page
Tipping QR Code