Skip to content

Instantly share code, notes, and snippets.

@sethvincent
Created March 26, 2018 15:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sethvincent/70e4839ce58abff4532cbd6b85bc78f5 to your computer and use it in GitHub Desktop.
Save sethvincent/70e4839ce58abff4532cbd6b85bc78f5 to your computer and use it in GitHub Desktop.
var fs = require('fs')
var url = require('url')
var path = require('path')
var request = require('request')
var pump = require('pump')
var getGranules = require('../tasks/search-cmr/get-granules')
function readJSON (filepath) {
return JSON.parse(fs.readFileSync(filepath, 'utf8'))
}
function writeJSON (filepath, data) {
return fs.writeFileSync(filepath, JSON.stringify(data, null, 2))
}
var eventPath = path.join(__dirname, 'sync-granule-event.json')
var event = readJSON(eventPath)
var tiles = [
'h20v08',
'h20v09',
'h20v10',
'h21v08',
'h21v09',
'h21v10',
'h22v08',
'h22v09',
'h22v10',
'h19v03',
'h19v04',
'h20v03',
'h20v04'
];
var options = {
cmrUrl: 'https://cmr.earthdata.nasa.gov/',
startDate: '2017-01-01T10:00:00Z',
shortName: 'MOD09Q1',
version: '006',
page: 1,
pageSize: 2000,
tiles: tiles,
limit: 10
};
var provider = 'https://e4ftl01.cr.usgs.gov'
function download (dir, filename, callback) {
var filepath = path.join(__dirname, filename)
var uri = provider + '/' + dir + filename
initialDownloadRequest(uri, function (err, fileUrl) {
if (err) return callback(err)
else if (res.statusCode >= 400) return callback(body)
downloadFile(fileUrl, filepath, function (err) {
if (err) return callback(err)
callback(null, filepath)
})
})
}
function initialDownloadRequest (uri, callback) {
var options = {
uri: uri,
followRedirect: false
}
request(options, function (err, res, body) {
if (err) return callback(err)
else if (res.statusCode >= 400) return callback(body)
var redirectUri = res.headers.location;
followAuthRedirect(redirectUri, callback)
})
}
function followAuthRedirect (redirectUri, callback) {
var auth = new Buffer(
process.env.EARTHDATA_USER + ':' +
process.env.EARTHDATA_PASS
).toString('base64');
var options = {
uri: redirectUri,
method: 'GET',
followRedirect: false,
jar: true,
headers: {
authorization: 'Basic ' + auth
}
}
request(options, function (err, res, body) {
if (err) return callback(err)
else if (res.statusCode >= 400) return callback(body)
callback(null, res.headers.location)
})
}
function downloadFile (uri, filepath, callback) {
var auth = new Buffer(
process.env.EARTHDATA_USER + ':' +
process.env.EARTHDATA_PASS
).toString('base64');
var options = {
uri: uri,
method: 'GET',
followRedirect: false,
jar: true,
headers: {
authorization: 'Basic ' + auth
}
}
request(options, function (err, res, body) {
if (err) return callback(err)
else if (res.statusCode >= 400) return callback(body)
options.uri = res.headers.location
return pump(request(options), fs.createWriteStream(filepath), callback)
})
}
getGranules([], options, function (err, output) {
if (err) return console.log('ERROR', err);
event.payload.granules = output.granules
var file = output.granules[0].files[0]
download(file.path, file.name, function (err, filepath) {
if (err) return console.log('ERROR', err);
console.log('filepath', filepath)
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment