|
from fastapi import FastAPI, File, UploadFile |
|
from fastapi.responses import FileResponse |
|
import os |
|
import io |
|
from fastapi.middleware.cors import CORSMiddleware |
|
import requests |
|
import pandas as pd |
|
|
|
|
|
app = FastAPI() |
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=["*"], |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
API_KEY = "an3vib2nh4-3R48tMWfBZg" |
|
WEBSITE_COLUMN = "Website" |
|
|
|
|
|
|
|
def get_company_data(api_key, domain): |
|
response = requests.get(f"https://api.apollo.io/v1/organizations/enrich?api_key={api_key}&domain={domain}") |
|
result = response.json() |
|
|
|
if "organization" in result: |
|
org = result["organization"] |
|
return { |
|
"domain": domain, |
|
"alexa_ranking": org.get("alexa_ranking", "unknown"), |
|
"annual_revenue": org.get("annual_revenue", "unknown"), |
|
"country": org.get("country", "unknown"), |
|
"estimated_num_employees": org.get("estimated_num_employees", "unknown"), |
|
"industry": org.get("industry", "unknown"), |
|
"keywords": org.get("keywords", "unknown"), |
|
"linkedin_uid": org.get("linkedin_uid", "unknown") |
|
} |
|
else: |
|
print(f"No data for {domain}") |
|
return { |
|
"domain": domain, |
|
"alexa_ranking": "unknown", |
|
"annual_revenue": "unknown", |
|
"country": "unknown", |
|
"estimated_num_employees": "unknown", |
|
"industry": "unknown", |
|
"keywords": "unknown", |
|
"linkedin_uid": "unknown" |
|
} |
|
|
|
@app.post("/get_data_file") |
|
def main(file: UploadFile = File(...)): |
|
LEAD_LIST_PATH = file.filename |
|
print(file.filename) |
|
with open(file.filename, "wb") as file_object: |
|
file_object.write(file.file.read()) |
|
|
|
def get_domain(url): |
|
if "//" in url: |
|
start = url.index("//") + 2 |
|
else: |
|
start = 0 |
|
result = url[start:].strip("/") |
|
return result |
|
|
|
|
|
data = pd.read_excel(LEAD_LIST_PATH) |
|
websites = data[WEBSITE_COLUMN].drop_duplicates().apply(get_domain) |
|
|
|
|
|
company_data = [] |
|
for website in websites: |
|
company_data.append(get_company_data(API_KEY, website)) |
|
|
|
OUTPUT_PATH = "CompanyData.xlsx" |
|
|
|
df = pd.DataFrame(company_data) |
|
df.to_excel(OUTPUT_PATH, index=False) |
|
|
|
print("Company data has been successfully fetched and saved.") |
|
return FileResponse(OUTPUT_PATH, media_type='application/octet-stream', filename=OUTPUT_PATH) |
|
|
|
|
|
|
|
|