#!/usr/bin/env python3 """ Test script for offline geolocation functionality using qqwry-py3 """ import sys import os def install_qqwry_library(): """Install qqwry-py3 library if not available""" try: import qqwry return True except ImportError: print("๐Ÿ“ฆ Installing qqwry-py3 library...") try: import subprocess subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'qqwry-py3']) print("โœ“ qqwry-py3 library installed successfully") return True except Exception as e: print(f"โœ— Failed to install qqwry-py3: {e}") return False def test_geolocation(): """Test the offline geolocation functionality""" print("๐Ÿงช Testing Offline Geolocation with QQWry Database (qqwry-py3)") print("=" * 60) # Ensure library is available if not install_qqwry_library(): return False # Import after installation try: from qqwry import QQwry except ImportError: print("โœ— Failed to import qqwry library") return False # Test IPs from different regions test_ips = [ "8.8.8.8", # Google DNS (US) "114.114.114.114", # China DNS "1.1.1.1", # Cloudflare DNS "223.5.5.5", # Alibaba DNS (China) "180.76.76.76", # Baidu DNS (China) "208.67.222.222", # OpenDNS (US) "119.29.29.29", # Tencent DNS (China) "202.96.128.86", # China Telecom "221.5.88.88", # China Mobile ] try: # Check if database exists db_path = "qqwry.dat" if not os.path.exists(db_path): print(f"๐Ÿ“ฅ QQWry database not found, downloading...") import urllib.request url = "https://github.com/metowolf/qqwry.dat/releases/latest/download/qqwry.dat" urllib.request.urlretrieve(url, db_path) print(f"โœ“ Database downloaded to {db_path}") # Initialize QQWry q = QQwry() q.load_file(db_path) print(f"โœ“ QQWry database loaded successfully") print() # Test each IP for ip in test_ips: try: country, area = q.lookup(ip) # Format location if country and area: if area in country or country in area: location = country if len(country) > len(area) else area else: location = f"{country}, {area}" elif country: location = country elif area: location = area else: location = "Unknown" print(f"๐Ÿ“ {ip:<15} โ†’ {location}") except Exception as e: print(f"โŒ {ip:<15} โ†’ Error: {e}") print() print("โœ… All tests completed successfully!") print("๐Ÿš€ Offline geolocation with qqwry-py3 is working perfectly!") except Exception as e: print(f"โŒ Test failed: {e}") return False return True if __name__ == "__main__": success = test_geolocation() sys.exit(0 if success else 1)