-
Notifications
You must be signed in to change notification settings - Fork 4
/
DataRetrieval.html
375 lines (306 loc) · 32 KB
/
DataRetrieval.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>olm.USGS.DataRetrieval — olm 0.36 documentation</title>
<link rel="stylesheet" href="../../../_static//default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">olm 0.36 documentation</a> »</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for olm.USGS.DataRetrieval</h1><div class="highlight"><pre>
<span></span><span class="c1">#Function to download USGS Daily Average Discharge values given date and the location text</span>
<span class="sd">"""</span>
<span class="sd">Contains functions used to download data from USGS databases.</span>
<span class="sd">"""</span>
<span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
<span class="kn">import</span> <span class="nn">lxml.html</span><span class="o">,</span> <span class="nn">requests</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="kn">import</span> <span class="n">quote</span> <span class="c1">#could eventually rework to use only requests</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">urllib</span> <span class="kn">import</span> <span class="n">quote</span>
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">StringIO</span>
<span class="kn">from</span> <span class="nn">pandas</span> <span class="kn">import</span> <span class="n">read_csv</span><span class="p">,</span> <span class="n">DataFrame</span><span class="p">,</span> <span class="n">to_datetime</span>
<span class="c1">#import requests</span>
<span class="c1">#import os</span>
<div class="viewcode-block" id="GetSiteData"><a class="viewcode-back" href="../../../olm.USGS.DataRetrieval.GetSiteData.html#olm.USGS.DataRetrieval.GetSiteData">[docs]</a><span class="k">def</span> <span class="nf">GetSiteData</span><span class="p">(</span><span class="n">location</span><span class="p">):</span><span class="c1">#, writedir='.'): #Changed so that we don't write out data into text file, only keep dataframe</span>
<span class="sd">"""</span>
<span class="sd"> Retrieves meta data about a USGS site using the full site identifier.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> location : string</span>
<span class="sd"> Full USGS site number starting with 'USGS-' or the bare integer number of a USGS site.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> siteDF : pandas.DataFrame</span>
<span class="sd"> Returns a pandas DataFrame object that contains all of the site meta data from an expanded USGS site data query. Data is indexed using field labels given in USGS file (see Notes).</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Pair of keys and descriptions from USGS site meta data.</span>
<span class="sd"> agency_cd -- Agency</span>
<span class="sd"> site_no -- Site identification number</span>
<span class="sd"> station_nm -- Site name</span>
<span class="sd"> site_tp_cd -- Site type</span>
<span class="sd"> lat_va -- DMS latitude</span>
<span class="sd"> long_va -- DMS longitude</span>
<span class="sd"> dec_lat_va -- Decimal latitude</span>
<span class="sd"> dec_long_va -- Decimal longitude</span>
<span class="sd"> coord_meth_cd -- Latitude-longitude method</span>
<span class="sd"> coord_acy_cd -- Latitude-longitude accuracy</span>
<span class="sd"> coord_datum_cd -- Latitude-longitude datum</span>
<span class="sd"> dec_coord_datum_cd -- Decimal Latitude-longitude datum</span>
<span class="sd"> district_cd -- District code</span>
<span class="sd"> state_cd -- State code</span>
<span class="sd"> county_cd -- County code</span>
<span class="sd"> country_cd -- Country code</span>
<span class="sd"> land_net_ds -- Land net location description</span>
<span class="sd"> map_nm -- Name of location map</span>
<span class="sd"> map_scale_fc -- Scale of location map</span>
<span class="sd"> alt_va -- Altitude of Gage/land surface</span>
<span class="sd"> alt_meth_cd -- Method altitude determined</span>
<span class="sd"> alt_acy_va -- Altitude accuracy</span>
<span class="sd"> alt_datum_cd -- Altitude datum</span>
<span class="sd"> huc_cd -- Hydrologic unit code</span>
<span class="sd"> basin_cd -- Drainage basin code</span>
<span class="sd"> topo_cd -- Topographic setting code</span>
<span class="sd"> instruments_cd -- Flags for instruments at site</span>
<span class="sd"> construction_dt -- Date of first construction</span>
<span class="sd"> inventory_dt -- Date site established or inventoried</span>
<span class="sd"> drain_area_va -- Drainage area</span>
<span class="sd"> contrib_drain_area_va -- Contributing drainage area</span>
<span class="sd"> tz_cd -- Time Zone abbreviation</span>
<span class="sd"> local_time_fg -- Site honors Daylight Savings Time</span>
<span class="sd"> reliability_cd -- Data reliability code</span>
<span class="sd"> gw_file_cd -- Data-other GW files</span>
<span class="sd"> nat_aqfr_cd -- National aquifer code</span>
<span class="sd"> aqfr_cd -- Local aquifer code</span>
<span class="sd"> aqfr_type_cd -- Local aquifer type code</span>
<span class="sd"> well_depth_va -- Well depth</span>
<span class="sd"> hole_depth_va -- Hole depth</span>
<span class="sd"> depth_src_cd -- Source of depth data</span>
<span class="sd"> project_no -- Project number</span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="p">(</span><span class="n">location</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'USGS-'</span><span class="p">):</span>
<span class="n">sitenum</span> <span class="o">=</span> <span class="n">location</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sitenum</span> <span class="o">=</span> <span class="n">location</span>
<span class="n">BASEURL</span> <span class="o">=</span> <span class="s1">'https://waterservices.usgs.gov/nwis/site/?site='</span>
<span class="n">queryURL</span> <span class="o">=</span> <span class="n">BASEURL</span> <span class="o">+</span> <span class="n">sitenum</span> <span class="o">+</span> <span class="s1">'&siteOutput=expanded'</span>
<span class="c1">#Need to skip header, which is hopefully uniform across USGS queries</span>
<span class="n">skiprows</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">59</span><span class="p">))</span>
<span class="n">skiprows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>
<span class="n">siteDF</span> <span class="o">=</span> <span class="n">read_csv</span><span class="p">(</span><span class="n">queryURL</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">,</span> <span class="n">skiprows</span><span class="o">=</span><span class="n">skiprows</span><span class="p">)</span>
<span class="n">siteDF</span> <span class="o">=</span> <span class="n">siteDF</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1">#change axis so that we only have key-data pairs</span>
<span class="k">return</span> <span class="n">siteDF</span></div>
<div class="viewcode-block" id="querySiteList"><a class="viewcode-back" href="../../../olm.USGS.DataRetrieval.querySiteList.html#olm.USGS.DataRetrieval.querySiteList">[docs]</a><span class="k">def</span> <span class="nf">querySiteList</span><span class="p">(</span><span class="n">siteList</span><span class="p">,</span> <span class="n">charList</span><span class="p">):</span>
<span class="n">BASE_URL</span> <span class="o">=</span> <span class="s1">'https://www.waterqualitydata.us/Result/search?'</span>
<span class="n">queryText</span> <span class="o">=</span> <span class="n">BASE_URL</span> <span class="o">+</span> <span class="s1">'siteid='</span>
<span class="c1">#add sites to query</span>
<span class="k">for</span> <span class="n">site</span> <span class="ow">in</span> <span class="n">siteList</span><span class="p">:</span>
<span class="c1">#check for USGS prefixes (are there others? EPA?)</span>
<span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">site</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'USGS-'</span><span class="p">)):</span>
<span class="n">site</span> <span class="o">=</span> <span class="s1">'USGS-'</span> <span class="o">+</span> <span class="n">site</span>
<span class="c1">#add this site to list with trailing semi-colon</span>
<span class="n">queryText</span> <span class="o">+=</span> <span class="n">site</span> <span class="o">+</span> <span class="s1">';'</span>
<span class="c1">#remove final semi-colon</span>
<span class="n">queryText</span> <span class="o">=</span> <span class="n">queryText</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="c1">#add characteristics to query</span>
<span class="n">queryText</span> <span class="o">+=</span> <span class="s1">'&characteristicName='</span>
<span class="k">for</span> <span class="n">characteristic</span> <span class="ow">in</span> <span class="n">charList</span><span class="p">:</span>
<span class="n">queryText</span> <span class="o">+=</span> <span class="n">characteristic</span> <span class="o">+</span> <span class="s1">';'</span>
<span class="c1">#remove trailing semi-colon</span>
<span class="n">queryText</span> <span class="o">=</span> <span class="n">queryText</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="c1">#add mime type</span>
<span class="n">queryText</span> <span class="o">+=</span> <span class="s1">'&mimeType=xml'</span>
<span class="c1">#convert query string to url special characters</span>
<span class="n">queryText</span> <span class="o">=</span> <span class="n">quote</span><span class="p">(</span><span class="n">queryText</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="s2">"/&=:?"</span><span class="p">)</span>
<span class="k">return</span> <span class="n">queryText</span></div>
<div class="viewcode-block" id="GetDailyDischarge"><a class="viewcode-back" href="../../../olm.USGS.DataRetrieval.GetDailyDischarge.html#olm.USGS.DataRetrieval.GetDailyDischarge">[docs]</a><span class="k">def</span> <span class="nf">GetDailyDischarge</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">date</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Retrieve daily average discharge value from USGS database for given date and USGS site.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> location : string</span>
<span class="sd"> Full USGS site number starting with 'USGS-' or a string that just contains the bare integer number of a USGS site.</span>
<span class="sd"> date : string</span>
<span class="sd"> String containing the date for which discharge will be retrieved. Should be given as YYYY-MM-DD.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> data : dict {'discharge':float, 'quality':string, 'name':string}</span>
<span class="sd"> Returns a dicionary that contains three items, the average discharge value for the site and date given, the quality code assigned to that discharge value, and the name of the site.</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Currently hard-wired to retrieve USGS pcode 00060, daily discharge in cfs.</span>
<span class="sd"> """</span>
<span class="c1">#construct url for discharge query</span>
<span class="n">BASE_URL</span> <span class="o">=</span> <span class="s1">'https://waterservices.usgs.gov/nwis/dv?format=waterml,1.1'</span>
<span class="c1">#query discharge and read into xml parser</span>
<span class="c1">#pull site number out of location text</span>
<span class="c1">#Check to see if location contains 'USGS-' or is just the bare number</span>
<span class="k">if</span> <span class="p">(</span><span class="n">location</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'USGS-'</span><span class="p">):</span>
<span class="n">site_number</span> <span class="o">=</span> <span class="n">location</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">site_number</span> <span class="o">=</span> <span class="n">location</span>
<span class="c1">#construct html address for query</span>
<span class="n">query_html</span> <span class="o">=</span> <span class="n">BASE_URL</span> <span class="o">+</span> <span class="s1">'&sites='</span> <span class="o">+</span> <span class="n">site_number</span> <span class="o">+</span> <span class="s1">'&startDT='</span><span class="o">+</span><span class="n">date</span><span class="o">+</span><span class="s1">'&endDT='</span><span class="o">+</span><span class="n">date</span>
<span class="c1">#read in xml file through html query</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Discharge query html: "</span><span class="p">,</span><span class="n">query_html</span><span class="p">)</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">query_html</span><span class="p">)</span>
<span class="c1">#qtree = etree.parse(r.raw)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Problem retrieving discharge value (IOError)."</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="c1">#parse xml file to pull out discharge and quality code</span>
<span class="c1">#root = qtree.getroot()</span>
<span class="c1">#get namespace map</span>
<span class="n">NSMAP</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">nsmap</span>
<span class="n">NS1</span> <span class="o">=</span> <span class="s2">"{</span><span class="si">%s</span><span class="s2">}"</span> <span class="o">%</span> <span class="n">NSMAP</span><span class="p">[</span><span class="s1">'ns1'</span><span class="p">]</span>
<span class="n">tsString</span> <span class="o">=</span> <span class="s2">"timeSeries[@name='USGS:"</span><span class="o">+</span><span class="n">site_number</span><span class="o">+</span><span class="s2">":00060:00003']"</span>
<span class="n">ts</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="n">tsString</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ts</span> <span class="o">==</span> <span class="kc">None</span><span class="p">):</span>
<span class="c1">#there is no time series data for this site and date</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">sourceInfo</span> <span class="o">=</span> <span class="n">ts</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"sourceInfo"</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">sourceInfo</span><span class="o">.</span><span class="n">findtext</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"siteName"</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">ts</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"values"</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"value"</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">value</span> <span class="o">==</span> <span class="kc">None</span><span class="p">):</span>
<span class="c1">#there is no discharge data for this site and date</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">text</span>
<span class="n">quality_code</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"qualifiers"</span><span class="p">)</span>
<span class="c1">#return discharge and quality code</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'discharge'</span><span class="p">:</span><span class="n">q</span><span class="p">,</span> <span class="s1">'quality'</span><span class="p">:</span><span class="n">quality_code</span><span class="p">,</span> <span class="s1">'name'</span><span class="p">:</span><span class="n">name</span><span class="p">}</span>
<span class="k">return</span> <span class="n">data</span></div>
<div class="viewcode-block" id="GetDailyDischargeRecord"><a class="viewcode-back" href="../../../olm.USGS.DataRetrieval.GetDailyDischargeRecord.html#olm.USGS.DataRetrieval.GetDailyDischargeRecord">[docs]</a><span class="k">def</span> <span class="nf">GetDailyDischargeRecord</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Retrieve daily average discharge values from USGS database for given date range and USGS site.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> location : str</span>
<span class="sd"> Full USGS site number starting with 'USGS-' or a string that just contains the bare integer number of a USGS site.</span>
<span class="sd"> start_date : str</span>
<span class="sd"> String containing the beginning date in the range for which discharge will be retrieved. Should be given as YYYY-MM-DD.</span>
<span class="sd"> end_date : str (optional)</span>
<span class="sd"> String containing the ending date in the range for which discharge will be retrieved. Should be given as YYYY-MM-DD. If not provided then data will be retrieved up to the current date.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> data : pandas dataframe</span>
<span class="sd"> Returns a Pandas dataframe with an index of the date, a column 'discharge' of discharge values, and a column 'quality' of the USGS quality rating.</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Currently hard-wired to retrieve USGS pcode 00060, daily discharge in cfs.</span>
<span class="sd"> """</span>
<span class="c1">#construct url for discharge query</span>
<span class="n">BASE_URL</span> <span class="o">=</span> <span class="s1">'https://waterservices.usgs.gov/nwis/dv?format=waterml,1.1'</span>
<span class="c1">#query discharge and read into xml parser</span>
<span class="c1">#pull site number out of location text</span>
<span class="c1">#Check to see if location contains 'USGS-' or is just the bare number</span>
<span class="k">if</span> <span class="p">(</span><span class="n">location</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'USGS-'</span><span class="p">):</span>
<span class="n">site_number</span> <span class="o">=</span> <span class="n">location</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">site_number</span> <span class="o">=</span> <span class="n">location</span>
<span class="c1">#construct html address for query</span>
<span class="k">if</span> <span class="n">end_date</span><span class="o">==</span><span class="kc">None</span><span class="p">:</span>
<span class="n">query_html</span> <span class="o">=</span> <span class="n">BASE_URL</span> <span class="o">+</span> <span class="s1">'&sites='</span> <span class="o">+</span> <span class="n">site_number</span> <span class="o">+</span> <span class="s1">'&startDT='</span><span class="o">+</span><span class="n">start_date</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">query_html</span> <span class="o">=</span> <span class="n">BASE_URL</span> <span class="o">+</span> <span class="s1">'&sites='</span> <span class="o">+</span> <span class="n">site_number</span> <span class="o">+</span> <span class="s1">'&startDT='</span><span class="o">+</span><span class="n">start_date</span><span class="o">+</span><span class="s1">'&endDT='</span><span class="o">+</span><span class="n">end_date</span>
<span class="c1">#read in xml file through html query</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">query_html</span><span class="p">)</span>
<span class="c1">#qtree = etree.parse(r.raw)</span>
<span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Problem retrieving discharge value (IOError)."</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="c1">#parse xml file to pull out discharge and quality code</span>
<span class="c1">#root = qtree.getroot()</span>
<span class="c1">#get namespace map</span>
<span class="n">NSMAP</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">nsmap</span>
<span class="n">NS1</span> <span class="o">=</span> <span class="s2">"{</span><span class="si">%s</span><span class="s2">}"</span> <span class="o">%</span> <span class="n">NSMAP</span><span class="p">[</span><span class="s1">'ns1'</span><span class="p">]</span>
<span class="n">tsString</span> <span class="o">=</span> <span class="s2">"timeSeries[@name='USGS:"</span><span class="o">+</span><span class="n">site_number</span><span class="o">+</span><span class="s2">":00060:00003']"</span>
<span class="n">ts</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="n">tsString</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ts</span> <span class="o">==</span> <span class="kc">None</span><span class="p">):</span>
<span class="c1">#there is no time series data for this site and date</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">sourceInfo</span> <span class="o">=</span> <span class="n">ts</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"sourceInfo"</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">sourceInfo</span><span class="o">.</span><span class="n">findtext</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"siteName"</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">ts</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"values"</span><span class="p">)</span>
<span class="n">value_list</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">NS1</span><span class="o">+</span><span class="s2">"value"</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">values</span> <span class="o">==</span> <span class="kc">None</span><span class="p">):</span>
<span class="c1">#there is no discharge data for this site and date</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">q</span><span class="o">=</span><span class="p">[]</span>
<span class="n">quality_code</span><span class="o">=</span><span class="p">[]</span>
<span class="n">date_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">value_list</span><span class="p">:</span>
<span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
<span class="n">quality_code</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"qualifiers"</span><span class="p">))</span>
<span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dateTime"</span><span class="p">)[:</span><span class="mi">10</span><span class="p">])</span>
<span class="c1">#4/24/14 ended coding here. need to write into dataframe</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">DataFrame</span><span class="p">({</span><span class="s1">'discharge'</span><span class="p">:</span><span class="n">q</span><span class="p">,</span> <span class="s1">'quality'</span><span class="p">:</span><span class="n">quality_code</span><span class="p">},</span> <span class="n">index</span><span class="o">=</span><span class="n">to_datetime</span><span class="p">(</span><span class="n">date_list</span><span class="p">))</span>
<span class="c1">#return discharge and quality code data frame</span>
<span class="k">return</span> <span class="n">data</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">olm 0.36 documentation</a> »</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2014-2018 Matthew Covington.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>