Skip to content

Instantly share code, notes, and snippets.

@sanderpick
Forked from luisbosque/cdb_import.sh
Last active August 29, 2015 14:14
Show Gist options
  • Save sanderpick/185bc819c6a80b06d1b8 to your computer and use it in GitHub Desktop.
Save sanderpick/185bc819c6a80b06d1b8 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Disclaimer:
# We are not actively maintaining this script. We can't assure it will work, but we'll do our best to keep it updated.
# Credits:
# Original author: https://gist.github.com/lbosque/5876697
# Contributors:
# https://gist.github.com/andrewxhill/5884845 Mac-compatible version
# https://gist.github.com/kentr / http://maplight.org/ new uuid format bugfix + email notification
# https://gist.github.com/sanderpick/185bc819c6a80b06d1b8 allow spaces in filesnames
CDB_USER=$1
API_KEY=$2
IMPORT_FILE=$3
NOTIFICATION_EMAIL=$4
PROTOCOL=https
DEBUG=true
ITEM_ID_REGEX='\"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\"'
if [[ -z $CDB_USER ]]
then
echo "Missing user"
exit 1
fi
if [[ -z $API_KEY ]]
then
echo "Missing api key"
exit 1
fi
if [[ -z $IMPORT_FILE ]]
then
echo "Missing file"
exit 1
fi
function log {
if [[ ${DEBUG} == true ]]
then
echo $1
fi
}
v1=$(uname)
log "Sending file '${IMPORT_FILE}'"
if [[ "$v1" = Darwin ]];
then
job_id=`curl -s -F file=@"${IMPORT_FILE}" "${PROTOCOL}://${CDB_USER}.cartodb.com/api/v1/imports/?api_key=${API_KEY}" | sed -E "s/\{\"item_queue_id\":${ITEM_ID_REGEX}.*/\1/"`
else
job_id=`curl -s -F file=@"${IMPORT_FILE}" "${PROTOCOL}://${CDB_USER}.cartodb.com/api/v1/imports/?api_key=${API_KEY}" | sed -r "s/\{\"item_queue_id\":${ITEM_ID_REGEX}.*/\1/"`
fi
log "Waiting for job '${job_id}' to be completed"
while true
do
if [[ "$v1" = Darwin ]];
then
status=`curl -s "${PROTOCOL}://${CDB_USER}.cartodb.com/api/v1/imports/${job_id}?api_key=${API_KEY}" | sed -E 's/(.*)\"state\":\"([a-z]+)\"(.*)/\2/'`
else
status=`curl -s "${PROTOCOL}://${CDB_USER}.cartodb.com/api/v1/imports/${job_id}?api_key=${API_KEY}" | sed -r 's/(.*)\"state\":\"([a-z]+)\"(.*)/\2/'`
fi
log "JOB '${job_id}' STATE: ${status}"
if [[ -n $NOTIFICATION_EMAIL ]]
then
log "${PROTOCOL}://${CDB_USER}.cartodb.com" | mail -s "CartoDB import finished: ${IMPORT_FILE}" "${NOTIFICATION_EMAIL}"
fi
if [[ $status == 'complete' ]]
then
log "Import successful"
exit 0
elif [[ $status == 'failure' ]]
then
log "Failed import"
exit 1
fi
sleep 2
done
./cdb_import.sh <cdb_username> <api_key> <filename>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment