81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
import requests
|
|
import json
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Keys provided in the user prompt
|
|
KEYS = {
|
|
"NUMLOOKUP": "num_live_iViCHWVuE5tWiAsSBimesKfrD3w2VDgA748z9Btw",
|
|
"ABSTRACT": "bdf209a5a133453cbf82f4a0f098773d",
|
|
"VERIPHONE": "885174620DD34D3A80B4E57BA05036E3",
|
|
"HUNTERIO": "374d3258ec737081b981b693ac6590661c87c60d",
|
|
"OPENCELLID": "1f8f328afa8ba5",
|
|
"OPENCAGE": "f8c073589bca4d09b09a50e7c600ee10",
|
|
"SERPAPI": "eee2937a45ff20f37c91be7f73f8264ed2b4c07c7e58e6a4348ab84e249ee72b",
|
|
}
|
|
|
|
def phone_lookup(number):
|
|
"""Unified phone lookup from multiple sources"""
|
|
results = {}
|
|
|
|
# 1. NumLookup
|
|
try:
|
|
url = f"https://api.numlookupapi.com/v1/validate/{number}?apikey={KEYS['NUMLOOKUP']}"
|
|
resp = requests.get(url, timeout=5)
|
|
if resp.status_code == 200:
|
|
results['numlookup'] = resp.json()
|
|
except Exception as e:
|
|
logger.error(f"NumLookup error: {e}")
|
|
|
|
# 2. Veriphone
|
|
try:
|
|
url = f"https://veriphone.com/api/v1/verify?phone={number}&key={KEYS['VERIPHONE']}"
|
|
resp = requests.get(url, timeout=5)
|
|
if resp.status_code == 200:
|
|
results['veriphone'] = resp.json()
|
|
except Exception as e:
|
|
logger.error(f"Veriphone error: {e}")
|
|
|
|
return results
|
|
|
|
def email_lookup(email):
|
|
"""Unified email lookup"""
|
|
results = {}
|
|
|
|
# 1. Hunter.io
|
|
try:
|
|
url = f"https://api.hunter.io/v2/email-verifier?email={email}&api_key={KEYS['HUNTERIO']}"
|
|
resp = requests.get(url, timeout=5)
|
|
if resp.status_code == 200:
|
|
results['hunter'] = resp.json().get('data', {})
|
|
except Exception as e:
|
|
logger.error(f"Hunter.io error: {e}")
|
|
|
|
# 2. Abstract API
|
|
try:
|
|
url = f"https://emailvalidation.abstractapi.com/v1/?api_key={KEYS['ABSTRACT']}&email={email}"
|
|
resp = requests.get(url, timeout=5)
|
|
if resp.status_code == 200:
|
|
results['abstract'] = resp.json()
|
|
except Exception as e:
|
|
logger.error(f"Abstract error: {e}")
|
|
|
|
return results
|
|
|
|
def serp_search(query):
|
|
"""Google search via SerpAPI for public mentions"""
|
|
try:
|
|
url = "https://serpapi.com/search.json"
|
|
params = {
|
|
"q": query,
|
|
"api_key": KEYS['SERPAPI'],
|
|
"engine": "google"
|
|
}
|
|
resp = requests.get(url, params=params, timeout=10)
|
|
if resp.status_code == 200:
|
|
return resp.json().get('organic_results', [])
|
|
except Exception as e:
|
|
logger.error(f"SerpAPI error: {e}")
|
|
return []
|