icmr-data / app.py
Kyren1's picture
Update app.py
3c60cd1 verified
Raw
History Blame Contribute Delete
3.34 kB
from fastapi import FastAPI, HTTPException, Query
import duckdb
from contextlib import asynccontextmanager
# Global Connection
con = None
@asynccontextmanager
async def lifespan(app: FastAPI):
global con
print("🟢 DuckDB initialize ho raha hai...")
con = duckdb.connect()
con.execute("PRAGMA memory_limit='800MB'")
con.execute("PRAGMA threads=2")
con.execute("SET enable_object_cache=true")
con.execute("SET preserve_insertion_order=false")
con.execute("INSTALL httpfs; LOAD httpfs;")
URL_ICMR = "https://huggingface.co/datasets/kzropx/icmr-parquet/resolve/main/icmr.parquet"
con.execute(f"SELECT 1 FROM read_parquet('{URL_ICMR}') LIMIT 1")
print("🟢 DuckDB ready! API secure hai.")
yield
con.close()
app = FastAPI(lifespan=lifespan)
# === API Key ===
VALID_KEY = "@kzr0x"
@app.get("/")
def home(key: str = Query(..., description="API Key required")):
if key != VALID_KEY:
return {"status": "error", "message": "Invalid or missing API key"}
return {
"status": "success",
"message": "API Live! Use /search?key=@kzr0x&number=xxx",
"developer": {
"name": "@kzr0x",
"team": "TEAM DARK KNIGHT APIs",
"Channel": "@API_WALLAH"
}
}
@app.get("/search")
async def search_data(
key: str = Query(..., description="API Key required"),
number: str = Query(None, description="Search by Phone Number"),
aadhar: str = Query(None, description="Search by Aadhar Number"),
q: str = Query(None, description="Generic search")
):
# === API Key Check ===
if key != VALID_KEY:
return {"status": "error", "message": "Invalid or missing API key"}
if not number and not aadhar and not q:
raise HTTPException(status_code=400, detail="Provide number, aadhar, or q")
search_term = q or number or aadhar
URL_ICMR = "https://huggingface.co/datasets/kzropx/icmr-parquet/resolve/main/icmr.parquet"
try:
query = f"""
SELECT name, fathersName, phoneNumber, aadharNumber, address, district, pincode, state, town
FROM read_parquet('{URL_ICMR}')
WHERE phoneNumber = ? OR aadharNumber = ?
LIMIT 1
"""
result = con.execute(query, [search_term, search_term]).fetchall()
if not result:
return {
"status": "error",
"message": f"'{search_term}' se koi data nahi mila.",
"developer": {
"name": "@kzr0x",
"team": "TEAM DARK KNIGHT APIs",
"Channel": "@API_WALLAH"
}
}
columns = [desc[0] for desc in con.description]
return {
"status": "success",
"data": dict(zip(columns, result[0])),
"developer": {
"name": "@kzr0x",
"team": "TEAM DARK KNIGHT APIs",
"Channel": "@API_WALLAH"
}
}
except Exception as e:
return {
"status": "error",
"message": f"Query error: {str(e)}",
"developer": {
"name": "@kzr0x",
"team": "TEAM DARK KNIGHT APIs",
"Channel": "@API_WALLAH"
}
}