From 4559d628d30ec6968908c0d4a69280098e658a30 Mon Sep 17 00:00:00 2001 From: JayH Date: Sun, 26 Apr 2020 13:56:30 -0500 Subject: [PATCH] addition of python3 compatible code --- PlanetImagery/py3_PlanetDataDownloader.py | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 PlanetImagery/py3_PlanetDataDownloader.py diff --git a/PlanetImagery/py3_PlanetDataDownloader.py b/PlanetImagery/py3_PlanetDataDownloader.py new file mode 100644 index 0000000..72308b4 --- /dev/null +++ b/PlanetImagery/py3_PlanetDataDownloader.py @@ -0,0 +1,119 @@ +from planet import api +import sys +import os +import requests +import time + +apikey = os.getenv('PLANET_API_KEY') + +ddir = str(sys.argv[1]) +sdate = str(sys.argv[2]) +edate = str(sys.argv[3]) +limit = int(sys.argv[4]) + +client = api.ClientV1(api_key=apikey) + + +#### +## Define data specifications +#### +# geometry +aoi = { + "type": "Polygon", + "coordinates": [ + [ + [ + -148.97048950195312, + 70.14456261942247 + ], + [ + -148.282470703125, + 70.14456261942247 + ], + [ + -148.282470703125, + 70.41333338476161 + ], + [ + -148.97048950195312, + 70.41333338476161 + ], + [ + -148.97048950195312, + 70.14456261942247 + ] + ] + ] + } + + +ubicacion = api.filters.geom_filter(aoi) + +# product type +item_type = ["PSScene4Band", "REOrthoTile"] +##item_type = 'PSScene4Band' +asset_type = 'analytic' # can be analytic, analytic_xml, udm, visual, visual_xml +# ref: https://www.planet.com/docs/api-quickstart-examples/step-2-download/ + +# date range + +date_range_filter = { + "type": "DateRangeFilter", + "field_name": "acquired", + "config": { + "gte": "%sT00:00:00.000Z" %(sdate), + "lte": "%sT00:00:00.000Z" %(edate) + } +} + + +# cloud cover + +cloud_cover_filter = { + "type": "RangeFilter", + "field_name": "cloud_cover", + "config": { + "lte": 0.05 + } +} + +PB_filter = { + "type": "AndFilter", + "config": [date_range_filter, cloud_cover_filter, ubicacion] +} + +# setup auth +session = requests.Session() +session.auth = (apikey, '') + +#### +## Post request +#### + +for i in item_type: + request = api.filters.build_search_request(PB_filter, [i], + name = None, + interval= 'day') + results = client.quick_search(request) + print(i) + for item in results.items_iter(limit): + print(item['id']) + dataset = \ + session.get( + ("https://api.planet.com/data/v1/item-types/" + + "{}/items/{}/assets/").format(i, item['id'])) + # extract the activation url from the item for the desired asset + item_activation_url = dataset.json()[asset_type]["_links"]["activate"] + # request activation + response = session.post(item_activation_url) + print(response.status_code) + while response.status_code!=204: + time.sleep(30) + response = session.post(item_activation_url) + response.status_code = response.status_code + print(response.status_code) + assets = client.get_assets(item).get() + callback = api.write_to_file(directory=ddir, + callback= None, + overwrite= True) + body = client.download(assets[asset_type], callback=callback)