[关闭]
@huyl08 2017-02-27T09:44:24.000000Z 字数 3543 阅读 1710

Python脚本采集天气信息

集成指挥平台 天气采集 互联网链路


本文互联网链接为https://zybuluo.com/huyl08/note/668650

本脚本采用Python编写,Python 2.7.x版本运行环境能够支持本脚本的运行。

天气数据由前置机按小时在正点时刻触发采集获得,天气数据来源为和风天气,每个小时采集获得河北150个行政区划的天气,包含实时的温湿度、压强、能见度、风力、空气质量(AQI)、天气建议等信息。

本程序需要在互联网环境下运行,使用Python脚本通过FTP协议获取前置机上的天气数据。

1. 脚本执行方式

脚本调用方式如下

  1. python downloadWeather.py <DIRECTORY_TO_STORE> [<TIMESTAMP_TO_STORE>]

参数列表的解释如下

DIRECTORY_TO_STORE,必须参数,指定了天气数据的存储目录。Windows路径或者Unix路径均可,如"C:\Users\Administrator\Documents\weather" (Windows)或者"/data/weather" (Unix)。
TIMESTAMP_TO_STORE,非必须参数,指定了天气数据的采集时点,24小时制,格式为yyyyMMddHH,精确到小时。 如2017年2月14日5时的天气数据,需要输入的参数为"2017021405"。

如果参数列表中不包含TIMESTAMP_TO_STORE,那么默认会取得脚本所在客户机器的当前时刻(精确到小时)请求互联网服务器上的天气数据。
为了保证天气数据不会持续累计影响客户机存储空间,每次执行脚本会删除7天以前对应时刻的数据。每小时原始数据量约为500K(UTF-8编码的txt格式的JSON原始数据),zip压缩后约为25K。考虑到数据传输的影响,可以根据互联网入公安网的链路带宽选择原始数据文件或压缩文件进行传输。

2. 定时触发配置方式

互联网前置机在每小时0分开始采集天气数据,涉及到天气采集本身需要时间,建议在每小时05分时执行本脚本获取天气数据。

2.1 Unix CRON定时任务设置

Unix环境下,可使用cron服务进行配置,命令行键入crontab -e进入cron命令配置文件后,可如下配置定时任务,在每小时的05分时刻启动

  1. 5 * * * * /usr/bin/python /path/to/downloadWeather.py /path/to/weather_store_path

2.2 Windows计划任务程序设置

Windows环境下,可使用计划任务程序进行配置。进入后设置如下。

任务创建

1.png-29.8kB

触发器创建

2.png-38.5kB

操作创建

3.png-27.1kB

附录 城市天气数据样例

  1. {
  2. "HeWeather5": [
  3. {
  4. "aqi": {
  5. "city": {
  6. "aqi": "74",
  7. "co": "1",
  8. "no2": "16",
  9. "o3": "93",
  10. "pm10": "96",
  11. "pm25": "38",
  12. "qlty": "良",
  13. "so2": "38"
  14. }
  15. },
  16. "basic": {
  17. "city": "石家庄",
  18. "cnty": "中国",
  19. "id": "CN101090101",
  20. "lat": "38.042000",
  21. "lon": "114.498000",
  22. "update": {
  23. "loc": "2017-02-27 13:51",
  24. "utc": "2017-02-27 05:51"
  25. }
  26. },
  27. "daily_forecast": [
  28. {
  29. "astro": {
  30. "mr": "07:17",
  31. "ms": "18:59",
  32. "sr": "06:56",
  33. "ss": "18:13"
  34. },
  35. "cond": {
  36. "code_d": "100",
  37. "code_n": "100",
  38. "txt_d": "晴",
  39. "txt_n": "晴"
  40. },
  41. "date": "2017-02-27",
  42. "hum": "38",
  43. "pcpn": "0.0",
  44. "pop": "2",
  45. "pres": "1024",
  46. "tmp": {
  47. "max": "17",
  48. "min": "3"
  49. },
  50. "uv": "3",
  51. "vis": "10",
  52. "wind": {
  53. "deg": "286",
  54. "dir": "南风",
  55. "sc": "微风",
  56. "spd": "2"
  57. }
  58. },
  59. {
  60. "astro": {
  61. "mr": "07:54",
  62. "ms": "20:05",
  63. "sr": "06:54",
  64. "ss": "18:14"
  65. },
  66. "cond": {
  67. "code_d": "101",
  68. "code_n": "101",
  69. "txt_d": "多云",
  70. "txt_n": "多云"
  71. },
  72. "date": "2017-02-28",
  73. "hum": "33",
  74. "pcpn": "0.0",
  75. "pop": "2",
  76. "pres": "1024",
  77. "tmp": {
  78. "max": "15",
  79. "min": "2"
  80. },
  81. "uv": "3",
  82. "vis": "10",
  83. "wind": {
  84. "deg": "328",
  85. "dir": "南风",
  86. "sc": "微风",
  87. "spd": "3"
  88. }
  89. },
  90. {
  91. "astro": {
  92. "mr": "08:29",
  93. "ms": "21:12",
  94. "sr": "06:53",
  95. "ss": "18:15"
  96. },
  97. "cond": {
  98. "code_d": "100",
  99. "code_n": "100",
  100. "txt_d": "晴",
  101. "txt_n": "晴"
  102. },
  103. "date": "2017-03-01",
  104. "hum": "28",
  105. "pcpn": "0.0",
  106. "pop": "2",
  107. "pres": "1028",
  108. "tmp": {
  109. "max": "12",
  110. "min": "0"
  111. },
  112. "uv": "3",
  113. "vis": "10",
  114. "wind": {
  115. "deg": "339",
  116. "dir": "北风",
  117. "sc": "3-4",
  118. "spd": "11"
  119. }
  120. }
  121. ],
  122. "hourly_forecast": [
  123. {
  124. "cond": {
  125. "code": "100",
  126. "txt": "晴"
  127. },
  128. "date": "2017-02-27 16:00",
  129. "hum": "17",
  130. "pop": "0",
  131. "pres": "1021",
  132. "tmp": "18",
  133. "wind": {
  134. "deg": "300",
  135. "dir": "西北风",
  136. "sc": "微风",
  137. "spd": "10"
  138. }
  139. },
  140. {
  141. "cond": {
  142. "code": "103",
  143. "txt": "晴间多云"
  144. },
  145. "date": "2017-02-27 19:00",
  146. "hum": "25",
  147. "pop": "0",
  148. "pres": "1021",
  149. "tmp": "15",
  150. "wind": {
  151. "deg": "282",
  152. "dir": "西北风",
  153. "sc": "微风",
  154. "spd": "9"
  155. }
  156. },
  157. {
  158. "cond": {
  159. "code": "101",
  160. "txt": "多云"
  161. },
  162. "date": "2017-02-27 22:00",
  163. "hum": "32",
  164. "pop": "0",
  165. "pres": "1022",
  166. "tmp": "13",
  167. "wind": {
  168. "deg": "272",
  169. "dir": "西风",
  170. "sc": "微风",
  171. "spd": "11"
  172. }
  173. }
  174. ],
  175. "now": {
  176. "cond": {
  177. "code": "100",
  178. "txt": "晴"
  179. },
  180. "fl": "17",
  181. "hum": "18",
  182. "pcpn": "0",
  183. "pres": "1020",
  184. "tmp": "16",
  185. "vis": "7",
  186. "wind": {
  187. "deg": "277",
  188. "dir": "北风",
  189. "sc": "3-4",
  190. "spd": "10"
  191. }
  192. },
  193. "status": "ok",
  194. "suggestion": {
  195. "air": {
  196. "brf": "很差",
  197. "txt": "气象条件不利于空气污染物稀释、扩散和清除,请尽量避免在室外长时间活动。"
  198. },
  199. "comf": {
  200. "brf": "舒适",
  201. "txt": "白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。"
  202. },
  203. "cw": {
  204. "brf": "较适宜",
  205. "txt": "较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"
  206. },
  207. "drsg": {
  208. "brf": "较舒适",
  209. "txt": "建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"
  210. },
  211. "flu": {
  212. "brf": "易发",
  213. "txt": "昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。"
  214. },
  215. "sport": {
  216. "brf": "较不宜",
  217. "txt": "天气较好,但考虑天气寒冷,推荐您进行各种室内运动,若在户外运动请注意保暖并做好准备活动。"
  218. },
  219. "trav": {
  220. "brf": "适宜",
  221. "txt": "天气较好,温度适宜,是个好天气哦。这样的天气适宜旅游,您可以尽情地享受大自然的风光。"
  222. },
  223. "uv": {
  224. "brf": "中等",
  225. "txt": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
  226. }
  227. }
  228. }
  229. ]
  230. }

作者: 胡杨林
联系方式: huylaws@163.com

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注