Init
authorEthan Nelson <git@ethan-nelson.com>
Sat, 24 Feb 2018 01:03:18 +0000 (19:03 -0600)
committerEthan Nelson <git@ethan-nelson.com>
Sat, 24 Feb 2018 01:03:18 +0000 (19:03 -0600)
LICENSE [new file with mode: 0644]
README.md [new file with mode: 0644]
pygoes.py [new file with mode: 0644]

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..af4c2a4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Ethan Nelson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..71ce710
--- /dev/null
+++ b/README.md
@@ -0,0 +1,27 @@
+Pyxrad
+======
+
+This repository contains scripts useful for querying and obtaining data from the Amazon Web Services GOES archive.
+
+The `example()` script contains an example sequence to use all of the functions. 
+
+Functions
+---------
+
+### `get_filenames(product, year, dayofyear, hour)`
+
+This function queries AWS for a GOES product on a given hour and date (using day of year instead of month and day). For example, ABI Level 1b data at 02 UTC on January 3rd, 2018 would be called as `get_filenames('ABI-L1b-RadC', '2018', '003', '02')`.
+
+The output is the returned XML body from the AWS query.
+
+### `parse_xml(content)`
+
+This function takes the returned XML from `get_filenames` and extracts all of the file names.
+
+The output is a list of full file names on AWS for the given product, date, and hour.
+
+### `get_files(filelist, save_path='')`
+
+This function downloads files supplied in a `filelist` list. An optional `save_path` will specify the path where files should be saved; by default, files will be downloaded into the current working directory.
+
+The output is a list of files saved with their local paths.
diff --git a/pygoes.py b/pygoes.py
new file mode 100644 (file)
index 0000000..b5734f2
--- /dev/null
+++ b/pygoes.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# MIT License (c) 2018 Ethan Nelson
+
+import os
+import requests
+from io import BytesIO
+import xml.etree.cElementTree as ElementTree
+
+AWS_URL = "https://s3.amazonaws.com/noaa-goes16/"
+
+
+def get_filenames(product, year, dayofyear, hour):
+    url = "%s?prefix=%s/%s/%s/%s/" % \
+            (AWS_URL, str(product), str(year), str(dayofyear).zfill(3), str(hour).zfill(2))
+    content = requests.get(url)
+    content = BytesIO(content.content)
+
+    return content
+
+def parse_xml(content):
+    e = ElementTree.parse(content)
+    r = e.getroot()
+
+    filenames = []
+    for child in r:
+        if child.tag[-8:] == 'Contents':
+            for c in child:
+                if c.tag[-3:] == 'Key':
+                    filenames.append(c.text)
+
+    return filenames
+
+def get_files(filelist, save_path=''):
+    files = []
+    for filename in filelist:
+        content = requests.get(AWS_URL + filename)
+        c = content.content
+        name = os.path.basename(filename)
+        print('Saving %s%s' % (save_path, name))
+        f = open(save_path + name,'wb')
+        f.write(c)
+        f.close()
+        files.append(save_path + name)
+
+    return files
+
+
+def example():
+    xml = get_filenames('ABI-L1b-RadF', '2018', 1, 4)
+    filenames = parse_xml(xml)
+    files = get_files(filenames)