- Implemented Python scraper using BeautifulSoup and pandas to automatically collect travel rates from official NJC website - Added currency extraction from table titles (supports EUR, USD, AUD, CAD, ARS, etc.) - Added country extraction from table titles for international rates - Flatten pandas MultiIndex columns for cleaner data structure - Default to CAD for domestic Canadian sources (accommodations and domestic tables) - Created SQLite database schema (raw_tables, rate_entries, exchange_rates, accommodations) - Successfully scraped 92 tables with 17,205 rate entries covering 25 international cities - Added migration script to convert scraped data to Node.js database format - Updated .gitignore for Python files (.venv/, __pycache__, *.pyc, *.sqlite3) - Fixed city validation and currency conversion in main app - Added comprehensive debug and verification scripts This replaces manual JSON maintenance with automated data collection from official government source.
6.1 KiB
Amadeus Flight API Setup Guide
This application now automatically searches for real flight prices using the Amadeus Flight API.
🎯 Features
- ✈️ Automatic flight price search - No manual entry needed
- ⏱️ Automatic duration calculation - Determines business class eligibility
- 💰 Real-time pricing in CAD
- 🎫 Multiple flight options - Shows cheapest flights
- 🚨 Business class detection - Flags flights ≥9 hours automatically
📋 Prerequisites
You need a free Amadeus Self-Service API account:
- 2,000 free API calls per month
- No credit card required for development tier
- Official airline pricing data
🚀 Quick Setup (5 minutes)
Step 1: Register for Amadeus API
- Go to: https://developers.amadeus.com/register
- Create a free account
- Verify your email
Step 2: Create an Application
- Log in to: https://developers.amadeus.com/my-apps
- Click "Create New App"
- Enter app details:
- App Name: Government Travel Estimator
- Description: Travel cost calculator for government employees
- Click "Create"
Step 3: Get Your API Credentials
After creating the app, you'll see:
- API Key (Client ID)
- API Secret (Client Secret)
⚠️ Keep these confidential!
Step 4: Configure the Application
- Open the
.envfile in the project root - Add your credentials:
AMADEUS_API_KEY=your_api_key_here
AMADEUS_API_SECRET=your_api_secret_here
Step 5: Restart the Server
# Stop the current server (Ctrl+C)
# Then restart:
npm start
You should see:
✅ Amadeus API configured
🎮 How to Use
-
Enter Travel Details:
- Departure City: Ottawa
- Destination City: Vancouver
- Departure Date
- Return Date
-
Select Transportation:
- Choose "Flight"
-
Click "Search Flights Automatically"
- App will search for real flights
- Shows 5 cheapest options
- Duration and business class eligibility shown
-
Select a Flight:
- Click on any flight option
- Price and duration auto-populate
- Continue with accommodation estimate
-
Calculate Total Cost:
- Scroll down
- Enter accommodation estimate
- Click "Calculate Estimate"
🌍 Supported Cities
The app includes airport codes for 60+ cities:
🇨🇦 Canadian Cities
Ottawa, Toronto, Montreal, Vancouver, Calgary, Edmonton, Winnipeg, Halifax, Quebec City, Whitehorse, Yellowknife, Iqaluit, and more
🇺🇸 US Cities
New York, Los Angeles, Chicago, San Francisco, Seattle, Boston, Washington DC, Miami, Dallas, Denver, Las Vegas, and more
🌏 International
London, Paris, Frankfurt, Amsterdam, Tokyo, Hong Kong, Singapore, Dubai, Sydney, Auckland, Mexico City, and more
🔧 Troubleshooting
Error: "Amadeus API credentials not configured"
Solution: Add your API key and secret to the .env file
Error: "Could not find airport codes"
Solution: The city name needs to match one in the database. Try:
- "Ottawa" instead of "Ottawa, ON"
- "New York" instead of "NYC"
- "Vancouver" instead of "Vancouver, BC"
Error: "No flights found for this route"
Possible causes:
- Date is too far in the future (try within 11 months)
- Route not available (small airports may not have data)
- Try searching on Google Flights manually
API Rate Limits
Free tier: 2,000 calls/month
- Each search = 1 API call
- ~66 searches per day
- Perfect for small teams
If you exceed limits, you'll get an error. Wait until next month or upgrade to paid tier.
💡 API Limits & Best Practices
Free Tier Limits
- ✅ 2,000 API calls/month
- ✅ Test & development use
- ✅ No credit card required
Tips to Save API Calls
- Only search when dates are finalized
- Use manual Google Flights link for rough estimates
- Share results with colleagues instead of re-searching
- Consider caching common routes
🔐 Security Notes
- ✅
.envfile is in.gitignore(won't be committed) - ✅ Never share your API credentials
- ✅ API keys are server-side only
- ✅ Not exposed to browser/frontend
📊 What Gets Calculated
For each flight search, you get:
- Price in CAD
- Duration in hours (for business class rules)
- Number of stops (direct vs. connections)
- Business class eligibility (≥9 hours)
- Carrier information
- Departure/arrival times
🎓 Amadeus Documentation
For more details:
- API Docs: https://developers.amadeus.com/self-service/category/flights
- Support: https://developers.amadeus.com/support
- Dashboard: https://developers.amadeus.com/my-apps
⚙️ Alternative: Manual Entry
Don't want to set up the API? No problem!
The app still has the Google Flights integration:
- Click the Google Flights link
- Copy the price
- Paste into the form
- Enter duration manually
Takes about 30 seconds per search.
🧪 Sample Flights (No API)
When the Amadeus credentials are not configured (for example in a fresh Docker build or when you want to keep the app self-hosted without API keys), the backend returns curated sample flights from data/sampleFlights.json. You can still click Search Flights Automatically, review the mock options, and select one to populate the form. The status banner will mention that these are placeholder flights, so you know when to add real credentials and get live pricing.
🆘 Getting Help
API Issues
Contact Amadeus Support: https://developers.amadeus.com/support
App Issues
Check the server console for error messages
Still Stuck?
The app works fine without the API - use manual Google Flights links instead.
✨ Benefits of API Integration
| Feature | Manual Entry | With Amadeus API |
|---|---|---|
| Speed | 30 seconds | 5 seconds |
| Accuracy | User dependent | Official data |
| Business class detection | Manual | Automatic |
| Multiple options | One at a time | 5 instantly |
| Up-to-date prices | User checks | Real-time |
| Effort | Medium | Low |
You're all set! 🎉
The app will now automatically search flights and calculate costs with real airline data.