#!/bin/bash # Download IP2Location LITE DB3 (City-level) database # Free for commercial use with attribution # https://lite.ip2location.com/database/db3-ip-country-region-city set -e DATA_DIR="${1:-./data/ip2location}" DB_FILE="IP2LOCATION-LITE-DB3.BIN" mkdir -p "$DATA_DIR" cd "$DATA_DIR" echo "Downloading IP2Location LITE DB3 database..." # IP2Location LITE DB3 - includes city, region, country, lat/lng # You need to register at https://lite.ip2location.com/ to get a download token # Then set IP2LOCATION_TOKEN environment variable if [ -z "$IP2LOCATION_TOKEN" ]; then echo "" echo "ERROR: IP2LOCATION_TOKEN not set" echo "" echo "To download the database:" echo "1. Register free at https://lite.ip2location.com/" echo "2. Get your download token from the dashboard" echo "3. Run: IP2LOCATION_TOKEN=your_token ./scripts/download-ip2location.sh" echo "" exit 1 fi # Download DB3.LITE (IPv4 + City) DOWNLOAD_URL="https://www.ip2location.com/download/?token=${IP2LOCATION_TOKEN}&file=DB3LITEBIN" echo "Downloading from IP2Location..." curl -L -o ip2location.zip "$DOWNLOAD_URL" echo "Extracting..." unzip -o ip2location.zip # Rename to standard name if [ -f "IP2LOCATION-LITE-DB3.BIN" ]; then echo "Database ready: $DATA_DIR/IP2LOCATION-LITE-DB3.BIN" elif [ -f "IP-COUNTRY-REGION-CITY.BIN" ]; then mv "IP-COUNTRY-REGION-CITY.BIN" "$DB_FILE" echo "Database ready: $DATA_DIR/$DB_FILE" else # Find whatever BIN file was extracted BIN_FILE=$(ls *.BIN 2>/dev/null | head -1) if [ -n "$BIN_FILE" ]; then mv "$BIN_FILE" "$DB_FILE" echo "Database ready: $DATA_DIR/$DB_FILE" else echo "ERROR: No BIN file found in archive" ls -la exit 1 fi fi # Cleanup rm -f ip2location.zip *.txt LICENSE* README* echo "" echo "Done! Database saved to: $DATA_DIR/$DB_FILE" echo "Update monthly by re-running this script."