216 lines
5.0 KiB
Bash
Executable File
216 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
#
|
||
# Reonomy Lead Scraper
|
||
#
|
||
# A simple wrapper script to run the Reonomy lead scraper.
|
||
#
|
||
# Usage:
|
||
# ./scrape-reonomy.sh [options]
|
||
#
|
||
# Options:
|
||
# -h, --help Show this help message
|
||
# -l, --location LOC Search location (default: "New York, NY")
|
||
# -s, --sheet ID Google Sheet ID (optional, creates new sheet if not provided)
|
||
# -H, --headless Run in headless mode (no browser window)
|
||
# --no-headless Run with visible browser
|
||
# --1password Fetch credentials from 1Password
|
||
#
|
||
|
||
set -e
|
||
|
||
# Default values
|
||
LOCATION="${REONOMY_LOCATION:-New York, NY}"
|
||
SHEET_ID="${REONOMY_SHEET_ID:-}"
|
||
HEADLESS="${HEADLESS:-false}"
|
||
USE_1PASSWORD=false
|
||
|
||
# Script directory
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
# Help function
|
||
show_help() {
|
||
grep '^#' "$0" | sed 's/^# //; s/^#//; 1d' | sed '2d'
|
||
}
|
||
|
||
# Parse arguments
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
-h|--help)
|
||
show_help
|
||
exit 0
|
||
;;
|
||
-l|--location)
|
||
LOCATION="$2"
|
||
shift 2
|
||
;;
|
||
-s|--sheet)
|
||
SHEET_ID="$2"
|
||
shift 2
|
||
;;
|
||
-H|--headless)
|
||
HEADLESS=true
|
||
shift
|
||
;;
|
||
--no-headless)
|
||
HEADLESS=false
|
||
shift
|
||
;;
|
||
--1password)
|
||
USE_1PASSWORD=true
|
||
shift
|
||
;;
|
||
*)
|
||
echo "❌ Unknown option: $1"
|
||
echo " Use --help for usage information"
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Color codes for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
# Check prerequisites
|
||
check_prerequisites() {
|
||
log_info "Checking prerequisites..."
|
||
|
||
# Check if Node.js is installed
|
||
if ! command -v node &> /dev/null; then
|
||
log_error "Node.js is not installed"
|
||
log_info "Install it from: https://nodejs.org/"
|
||
exit 1
|
||
fi
|
||
|
||
# Check if npm packages are installed
|
||
if [ ! -d "$SCRIPT_DIR/node_modules" ]; then
|
||
log_warning "Node modules not found, installing..."
|
||
cd "$SCRIPT_DIR" && npm install
|
||
fi
|
||
|
||
# Check if gog is installed
|
||
if ! command -v gog &> /dev/null; then
|
||
log_error "gog CLI is not installed"
|
||
log_info "Install it from: https://github.com/stripe/gog"
|
||
log_warning "The scraper will save leads to JSON file instead of Google Sheets"
|
||
else
|
||
# Check if gog is authenticated
|
||
if ! gog auth status &> /dev/null; then
|
||
log_warning "gog CLI is not authenticated"
|
||
log_info "Run: gog auth login"
|
||
log_warning "The scraper will save leads to JSON file instead of Google Sheets"
|
||
fi
|
||
fi
|
||
|
||
# Check if 1Password CLI is available when requested
|
||
if [ "$USE_1PASSWORD" = true ]; then
|
||
if ! command -v op &> /dev/null; then
|
||
log_error "1Password CLI (op) is not installed"
|
||
log_info "Install it from: https://developer.1password.com/docs/cli/"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
log_success "All prerequisites met"
|
||
}
|
||
|
||
# Get credentials
|
||
get_credentials() {
|
||
if [ "$USE_1PASSWORD" = true ]; then
|
||
log_info "Fetching credentials from 1Password..."
|
||
# Assumes you have a Reonomy item in 1Password with email and password fields
|
||
# You may need to adjust the item name and field names
|
||
REONOMY_EMAIL=$(op item get "Reonomy" --field email 2>/dev/null || echo "")
|
||
REONOMY_PASSWORD=$(op item get "Reonomy" --field password 2>/dev/null || echo "")
|
||
|
||
if [ -z "$REONOMY_EMAIL" ] || [ -z "$REONOMY_PASSWORD" ]; then
|
||
log_error "Could not fetch credentials from 1Password"
|
||
log_info "Please create a 1Password item named 'Reonomy' with 'email' and 'password' fields"
|
||
exit 1
|
||
fi
|
||
|
||
log_success "Credentials fetched from 1Password"
|
||
else
|
||
# Use environment variables or prompt
|
||
if [ -z "$REONOMY_EMAIL" ]; then
|
||
read -p "📧 Enter Reonomy email: " REONOMY_EMAIL
|
||
fi
|
||
|
||
if [ -z "$REONOMY_PASSWORD" ]; then
|
||
read -s -p "🔑 Enter Reonomy password: " REONOMY_PASSWORD
|
||
echo
|
||
fi
|
||
fi
|
||
|
||
export REONOMY_EMAIL
|
||
export REONOMY_PASSWORD
|
||
}
|
||
|
||
# Main execution
|
||
main() {
|
||
echo
|
||
echo "🏗️ Reonomy Lead Scraper"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo
|
||
|
||
check_prerequisites
|
||
get_credentials
|
||
|
||
# Set additional environment variables
|
||
export REONOMY_LOCATION="$LOCATION"
|
||
export REONOMY_SHEET_ID="$SHEET_ID"
|
||
export HEADLESS="$HEADLESS"
|
||
|
||
log_info "Configuration:"
|
||
log_info " Location: $LOCATION"
|
||
log_info " Headless: $HEADLESS"
|
||
log_info " Sheet ID: ${SHEET_ID:-[Creating new sheet]}"
|
||
echo
|
||
|
||
# Run the scraper
|
||
log_info "Starting scraper..."
|
||
echo
|
||
|
||
cd "$SCRIPT_DIR"
|
||
|
||
if [ "$HEADLESS" = true ]; then
|
||
node reonomy-scraper.js
|
||
else
|
||
node reonomy-scraper.js
|
||
fi
|
||
|
||
exit_code=$?
|
||
|
||
echo
|
||
if [ $exit_code -eq 0 ]; then
|
||
log_success "Scraping completed successfully!"
|
||
else
|
||
log_error "Scraping failed with exit code: $exit_code"
|
||
fi
|
||
|
||
exit $exit_code
|
||
}
|
||
|
||
# Run main function
|
||
main "$@"
|