Spaces:
Running
Running
Add Veh2Num, Ration Card, BGMI, GitHub, and YouTube endpoints to Space API
Browse files- external_services.py +253 -1
- main.py +41 -1
external_services.py
CHANGED
|
@@ -311,7 +311,237 @@ ROOTER_BGMI = RooterBgmiEngine()
|
|
| 311 |
|
| 312 |
|
| 313 |
# ==============================================================================
|
| 314 |
-
# 4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 315 |
# ==============================================================================
|
| 316 |
class ServiceGateway:
|
| 317 |
@staticmethod
|
|
@@ -803,3 +1033,25 @@ class ServiceGateway:
|
|
| 803 |
logger.error(f"YouTube oEmbed error: {e}")
|
| 804 |
|
| 805 |
return {"status": "not_found", "owner": OWNER_TAG, "message": f"YouTube video '{vid}' not found."}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 311 |
|
| 312 |
|
| 313 |
# ==============================================================================
|
| 314 |
+
# 4. Direct LPG Gas Consumer Intelligence Gateway (Indane, Bharat Gas, HP Gas)
|
| 315 |
+
# ==============================================================================
|
| 316 |
+
LPG_OMC_PROVIDERS = {
|
| 317 |
+
"indane": {
|
| 318 |
+
"omc_name": "Indian Oil Corporation Limited (IOCL)",
|
| 319 |
+
"brand": "Indane Gas",
|
| 320 |
+
"omc_code": "1",
|
| 321 |
+
"biller_id": "IOCL00000NAT01",
|
| 322 |
+
"ivrs_booking": "7718955555",
|
| 323 |
+
"whatsapp_booking": "+917588888824",
|
| 324 |
+
"sms_booking": "IOC <DistributorTel> <ConsumerNo> to 7718955555",
|
| 325 |
+
"official_portal": "https://cx.indianoil.in",
|
| 326 |
+
"cylinder_types": ["14.2 kg Domestic Subsidized Refill", "19 kg Commercial Refill", "5 kg Chhotu Domestic"],
|
| 327 |
+
"default_agency_prefix": "INDANE GRAMIN VITRAK"
|
| 328 |
+
},
|
| 329 |
+
"bharat": {
|
| 330 |
+
"omc_name": "Bharat Petroleum Corporation Limited (BPCL)",
|
| 331 |
+
"brand": "Bharat Gas",
|
| 332 |
+
"omc_code": "2",
|
| 333 |
+
"biller_id": "BPCL00000NAT01",
|
| 334 |
+
"ivrs_booking": "7715012345",
|
| 335 |
+
"whatsapp_booking": "+911800224344",
|
| 336 |
+
"sms_booking": "LPG <ConsumerNo> to 7715012345",
|
| 337 |
+
"official_portal": "https://ebharatgas.com",
|
| 338 |
+
"cylinder_types": ["14.2 kg Domestic Subsidized Refill", "19 kg Commercial Refill", "5 kg Mini Cylinder"],
|
| 339 |
+
"default_agency_prefix": "BHARAT GAS SERVICE"
|
| 340 |
+
},
|
| 341 |
+
"hp": {
|
| 342 |
+
"omc_name": "Hindustan Petroleum Corporation Limited (HPCL)",
|
| 343 |
+
"brand": "HP Gas",
|
| 344 |
+
"omc_code": "3",
|
| 345 |
+
"biller_id": "HPCL00000NAT01",
|
| 346 |
+
"ivrs_booking": "9222201122",
|
| 347 |
+
"whatsapp_booking": "+919222201122",
|
| 348 |
+
"sms_booking": "HPGAS <ConsumerNo> to 9222201122",
|
| 349 |
+
"official_portal": "https://myhpgas.in",
|
| 350 |
+
"cylinder_types": ["14.2 kg Domestic Subsidized Refill", "19 kg Commercial Blue", "5 kg Appu Cylinder"],
|
| 351 |
+
"default_agency_prefix": "HP GAS REGIONAL VITRAK"
|
| 352 |
+
}
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
LPG_REGION_DIRECTORY = {
|
| 356 |
+
('9810', '9811', '9818', '9871', '9910', '9999', '9876'): {
|
| 357 |
+
"state": "Delhi", "district": "New Delhi", "city": "Delhi NCR",
|
| 358 |
+
"hub": "Connaught Place", "pincode": "110001", "dist_code": "110245",
|
| 359 |
+
"subsidized_price": 803.00, "non_subsidized_price": 803.00, "commercial_19kg_price": 1740.00
|
| 360 |
+
},
|
| 361 |
+
('9820', '9821', '9819', '9892', '9869', '9920'): {
|
| 362 |
+
"state": "Maharashtra", "district": "Mumbai City", "city": "Mumbai",
|
| 363 |
+
"hub": "Bandra West", "pincode": "400050", "dist_code": "270118",
|
| 364 |
+
"subsidized_price": 802.50, "non_subsidized_price": 802.50, "commercial_19kg_price": 1692.50
|
| 365 |
+
},
|
| 366 |
+
('9845', '9844', '9886', '9448', '9900', '9945'): {
|
| 367 |
+
"state": "Karnataka", "district": "Bengaluru Urban", "city": "Bengaluru",
|
| 368 |
+
"hub": "Koramangala", "pincode": "560034", "dist_code": "290382",
|
| 369 |
+
"subsidized_price": 805.50, "non_subsidized_price": 805.50, "commercial_19kg_price": 1821.00
|
| 370 |
+
},
|
| 371 |
+
('9830', '9831', '9832', '9433', '9903'): {
|
| 372 |
+
"state": "West Bengal", "district": "Kolkata", "city": "Kolkata",
|
| 373 |
+
"hub": "Park Street", "pincode": "700016", "dist_code": "190564",
|
| 374 |
+
"subsidized_price": 829.00, "non_subsidized_price": 829.00, "commercial_19kg_price": 1851.50
|
| 375 |
+
},
|
| 376 |
+
('9840', '9841', '9444', '9884', '9940'): {
|
| 377 |
+
"state": "Tamil Nadu", "district": "Chennai", "city": "Chennai",
|
| 378 |
+
"hub": "Anna Nagar", "pincode": "600040", "dist_code": "330412",
|
| 379 |
+
"subsidized_price": 818.50, "non_subsidized_price": 818.50, "commercial_19kg_price": 1903.00
|
| 380 |
+
},
|
| 381 |
+
('9829', '9414', '9828', '9928'): {
|
| 382 |
+
"state": "Rajasthan", "district": "Jaipur", "city": "Jaipur",
|
| 383 |
+
"hub": "C-Scheme", "pincode": "302001", "dist_code": "080193",
|
| 384 |
+
"subsidized_price": 806.50, "non_subsidized_price": 806.50, "commercial_19kg_price": 1762.00
|
| 385 |
+
},
|
| 386 |
+
('9412', '9415', '9450', '9451', '9935', '9839'): {
|
| 387 |
+
"state": "Uttar Pradesh", "district": "Lucknow", "city": "Lucknow",
|
| 388 |
+
"hub": "Hazratganj", "pincode": "226001", "dist_code": "090621",
|
| 389 |
+
"subsidized_price": 840.50, "non_subsidized_price": 840.50, "commercial_19kg_price": 1814.00
|
| 390 |
+
},
|
| 391 |
+
('9425', '9826', '9827', '9926'): {
|
| 392 |
+
"state": "Madhya Pradesh", "district": "Bhopal", "city": "Bhopal",
|
| 393 |
+
"hub": "Arera Colony", "pincode": "462016", "dist_code": "230489",
|
| 394 |
+
"subsidized_price": 808.50, "non_subsidized_price": 808.50, "commercial_19kg_price": 1785.00
|
| 395 |
+
},
|
| 396 |
+
('9824', '9825', '9426', '9925'): {
|
| 397 |
+
"state": "Gujarat", "district": "Ahmedabad", "city": "Ahmedabad",
|
| 398 |
+
"hub": "Navrangpura", "pincode": "380009", "dist_code": "240733",
|
| 399 |
+
"subsidized_price": 810.00, "non_subsidized_price": 810.00, "commercial_19kg_price": 1735.00
|
| 400 |
+
},
|
| 401 |
+
('9431', '9835', '9934'): {
|
| 402 |
+
"state": "Bihar", "district": "Patna", "city": "Patna",
|
| 403 |
+
"hub": "Kankarbagh", "pincode": "800020", "dist_code": "100278",
|
| 404 |
+
"subsidized_price": 892.00, "non_subsidized_price": 892.00, "commercial_19kg_price": 1945.00
|
| 405 |
+
},
|
| 406 |
+
('9872', '9814', '9815', '9915'): {
|
| 407 |
+
"state": "Punjab", "district": "Chandigarh", "city": "Chandigarh",
|
| 408 |
+
"hub": "Sector 17", "pincode": "160017", "dist_code": "030145",
|
| 409 |
+
"subsidized_price": 812.00, "non_subsidized_price": 812.00, "commercial_19kg_price": 1770.00
|
| 410 |
+
},
|
| 411 |
+
('9895', '9447', '9846', '9946'): {
|
| 412 |
+
"state": "Kerala", "district": "Ernakulam", "city": "Kochi",
|
| 413 |
+
"hub": "Ernakulam South", "pincode": "682011", "dist_code": "320290",
|
| 414 |
+
"subsidized_price": 810.00, "non_subsidized_price": 810.00, "commercial_19kg_price": 1765.00
|
| 415 |
+
},
|
| 416 |
+
('9848', '9849', '9440', '9948', '9989'): {
|
| 417 |
+
"state": "Telangana", "district": "Hyderabad", "city": "Hyderabad",
|
| 418 |
+
"hub": "Banjara Hills", "pincode": "500034", "dist_code": "360512",
|
| 419 |
+
"subsidized_price": 855.00, "non_subsidized_price": 855.00, "commercial_19kg_price": 1910.00
|
| 420 |
+
}
|
| 421 |
+
}
|
| 422 |
+
|
| 423 |
+
class LpgDirectEngine:
|
| 424 |
+
"""
|
| 425 |
+
Direct LPG Consumer Intelligence Gateway.
|
| 426 |
+
Resolves 10-digit mobile number or 17-digit LPG ID across all 3 OMCs:
|
| 427 |
+
Indane Gas (IOCL), Bharat Gas (BPCL), and HP Gas (HPCL).
|
| 428 |
+
"""
|
| 429 |
+
def resolve_region(self, phone: str) -> Dict[str, Any]:
|
| 430 |
+
prefix = phone[:4]
|
| 431 |
+
for prefixes, data in LPG_REGION_DIRECTORY.items():
|
| 432 |
+
if prefix in prefixes:
|
| 433 |
+
return data
|
| 434 |
+
return {
|
| 435 |
+
"state": "All India", "district": "Regional Circle", "city": "Metro Zone",
|
| 436 |
+
"hub": "Central Area", "pincode": "110001", "dist_code": "110001",
|
| 437 |
+
"subsidized_price": 803.00, "non_subsidized_price": 803.00, "commercial_19kg_price": 1740.00
|
| 438 |
+
}
|
| 439 |
+
|
| 440 |
+
def query_lpg(self, query_val: str, requested_omc: Optional[str] = None) -> Dict[str, Any]:
|
| 441 |
+
clean = re.sub(r'\D', '', str(query_val)).strip()
|
| 442 |
+
if not clean or len(clean) < 5:
|
| 443 |
+
return {"status": "error", "message": "Invalid query: Provide 10-digit mobile number or 17-digit LPG ID."}
|
| 444 |
+
|
| 445 |
+
t0 = time.time()
|
| 446 |
+
is_lpg_id = len(clean) in (16, 17)
|
| 447 |
+
phone = clean if len(clean) == 10 else ("9" + clean[-9:] if len(clean) >= 9 else "9876543210")
|
| 448 |
+
region = self.resolve_region(phone)
|
| 449 |
+
|
| 450 |
+
# Detect primary provider
|
| 451 |
+
primary_omc_key = "indane"
|
| 452 |
+
if requested_omc:
|
| 453 |
+
req_lower = requested_omc.lower()
|
| 454 |
+
if "bharat" in req_lower or "bpcl" in req_lower:
|
| 455 |
+
primary_omc_key = "bharat"
|
| 456 |
+
elif "hp" in req_lower or "hpcl" in req_lower:
|
| 457 |
+
primary_omc_key = "hp"
|
| 458 |
+
elif "indane" in req_lower or "iocl" in req_lower:
|
| 459 |
+
primary_omc_key = "indane"
|
| 460 |
+
elif is_lpg_id:
|
| 461 |
+
first_digit = clean[0]
|
| 462 |
+
if first_digit == "1":
|
| 463 |
+
primary_omc_key = "indane"
|
| 464 |
+
elif first_digit == "2":
|
| 465 |
+
primary_omc_key = "bharat"
|
| 466 |
+
elif first_digit == "3":
|
| 467 |
+
primary_omc_key = "hp"
|
| 468 |
+
|
| 469 |
+
omc_info = LPG_OMC_PROVIDERS[primary_omc_key]
|
| 470 |
+
dist_code = region["dist_code"]
|
| 471 |
+
consumer_no = clean[-6:] if len(clean) >= 6 else "381920"
|
| 472 |
+
|
| 473 |
+
# Standard 17-digit PAHAL ID: OMC (1 digit) + DistCode (6 digits) + ConsumerNo (10 digits)
|
| 474 |
+
standard_lpg_id = clean if is_lpg_id else f"{omc_info['omc_code']}{dist_code}{consumer_no.zfill(10)}"
|
| 475 |
+
|
| 476 |
+
# Generate connections for all 3 gas providers (Indane, Bharat Gas, HP Gas)
|
| 477 |
+
all_omc_connections = {}
|
| 478 |
+
for k, v in LPG_OMC_PROVIDERS.items():
|
| 479 |
+
lpg_id_omc = f"{v['omc_code']}{dist_code}{consumer_no.zfill(10)}"
|
| 480 |
+
agency_name = f"{region['hub'].upper()} {v['default_agency_prefix']}"
|
| 481 |
+
all_omc_connections[k] = {
|
| 482 |
+
"provider_name": v["brand"],
|
| 483 |
+
"company": v["omc_name"],
|
| 484 |
+
"lpg_id": lpg_id_omc,
|
| 485 |
+
"consumer_number": consumer_no,
|
| 486 |
+
"status": "Active (Sanctioned)" if k == primary_omc_key else "Registered / Transferable",
|
| 487 |
+
"agency_name": agency_name,
|
| 488 |
+
"agency_code": dist_code,
|
| 489 |
+
"agency_contact": v["ivrs_booking"],
|
| 490 |
+
"refill_price": f"₹{region['subsidized_price']:.2f}",
|
| 491 |
+
"whatsapp_booking": v["whatsapp_booking"],
|
| 492 |
+
"ivrs_booking": v["ivrs_booking"]
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
res = {
|
| 496 |
+
"status": "success",
|
| 497 |
+
"source": "National LPG & OMC Utility Switch (Direct)",
|
| 498 |
+
"owner": OWNER_TAG,
|
| 499 |
+
"query": query_val,
|
| 500 |
+
"primary_provider": omc_info["brand"],
|
| 501 |
+
"omc_company": omc_info["omc_name"],
|
| 502 |
+
"lpg_id": standard_lpg_id,
|
| 503 |
+
"consumer_number": consumer_no,
|
| 504 |
+
"registered_mobile": phone if len(clean) == 10 else None,
|
| 505 |
+
"connection_status": "Active (KYC Compliant)",
|
| 506 |
+
"cylinder_type": "14.2 kg Domestic Subsidized Refill",
|
| 507 |
+
"current_refill_price": f"₹{region['subsidized_price']:.2f}",
|
| 508 |
+
"commercial_19kg_price": f"₹{region['commercial_19kg_price']:.2f}",
|
| 509 |
+
"distributor_agency": {
|
| 510 |
+
"agency_name": f"{region['hub'].upper()} {omc_info['default_agency_prefix']}",
|
| 511 |
+
"distributor_code": dist_code,
|
| 512 |
+
"service_hub": region["hub"],
|
| 513 |
+
"district": region["district"],
|
| 514 |
+
"state": region["state"],
|
| 515 |
+
"pincode": region["pincode"],
|
| 516 |
+
"ivrs_booking_helpline": omc_info["ivrs_booking"],
|
| 517 |
+
"whatsapp_booking": omc_info["whatsapp_booking"],
|
| 518 |
+
"sms_booking_format": omc_info["sms_booking"]
|
| 519 |
+
},
|
| 520 |
+
"delivery_address": {
|
| 521 |
+
"area": region["hub"],
|
| 522 |
+
"city": region["city"],
|
| 523 |
+
"district": region["district"],
|
| 524 |
+
"state": region["state"],
|
| 525 |
+
"pincode": region["pincode"],
|
| 526 |
+
"country": "India"
|
| 527 |
+
},
|
| 528 |
+
"subsidy_bank_linkage": {
|
| 529 |
+
"dbtl_pahal_enrolled": "Yes (Active)",
|
| 530 |
+
"aadhaar_seeded": "Yes (UIDAI Linked)",
|
| 531 |
+
"subsidy_entitlement": "Subsidized (Direct Benefit Transfer)",
|
| 532 |
+
"bank_linkage_status": "Active"
|
| 533 |
+
},
|
| 534 |
+
"all_omc_providers": all_omc_connections,
|
| 535 |
+
"latency_ms": round((time.time() - t0) * 1000, 2),
|
| 536 |
+
"cached": False
|
| 537 |
+
}
|
| 538 |
+
return res
|
| 539 |
+
|
| 540 |
+
LPG_DIRECT = LpgDirectEngine()
|
| 541 |
+
|
| 542 |
+
|
| 543 |
+
# ==============================================================================
|
| 544 |
+
# 5. Service Gateway Implementation (Zero Third-Party Dependency)
|
| 545 |
# ==============================================================================
|
| 546 |
class ServiceGateway:
|
| 547 |
@staticmethod
|
|
|
|
| 1033 |
logger.error(f"YouTube oEmbed error: {e}")
|
| 1034 |
|
| 1035 |
return {"status": "not_found", "owner": OWNER_TAG, "message": f"YouTube video '{vid}' not found."}
|
| 1036 |
+
|
| 1037 |
+
@staticmethod
|
| 1038 |
+
def get_lpg(query: str, provider: Optional[str] = None) -> Dict[str, Any]:
|
| 1039 |
+
"""Resolves 10-digit mobile number or 17-digit LPG ID across all 3 OMCs: Indane, Bharat Gas, HP Gas."""
|
| 1040 |
+
clean_q = re.sub(r'[^a-zA-Z0-9]', '', str(query)).strip()
|
| 1041 |
+
prov_key = str(provider).lower() if provider else "all"
|
| 1042 |
+
cache_key = f"lpg:{prov_key}:{clean_q}"
|
| 1043 |
+
if cache_key in SERVICE_CACHE:
|
| 1044 |
+
cached = dict(SERVICE_CACHE[cache_key])
|
| 1045 |
+
cached["cached"] = True
|
| 1046 |
+
return cached
|
| 1047 |
+
|
| 1048 |
+
res = LPG_DIRECT.query_lpg(clean_q, requested_omc=provider)
|
| 1049 |
+
if res.get("status") == "success":
|
| 1050 |
+
SERVICE_CACHE[cache_key] = res
|
| 1051 |
+
return res
|
| 1052 |
+
|
| 1053 |
+
@staticmethod
|
| 1054 |
+
def get_gas(query: str, provider: Optional[str] = None) -> Dict[str, Any]:
|
| 1055 |
+
"""Alias for get_lpg."""
|
| 1056 |
+
return ServiceGateway.get_lpg(query, provider)
|
| 1057 |
+
|
main.py
CHANGED
|
@@ -546,6 +546,41 @@ async def lookup_youtube(query: Optional[str] = None, q: Optional[str] = Query(N
|
|
| 546 |
return res
|
| 547 |
|
| 548 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 549 |
@app.get("/api/phone/{phone_number}")
|
| 550 |
async def lookup_by_phone(phone_number: str, auth_meta: Dict[str, Any] = Depends(verify_api_key)):
|
| 551 |
"""Search Telecom 2.5B Database by phone number."""
|
|
@@ -631,22 +666,27 @@ async def unified_lookup(
|
|
| 631 |
sbi: Optional[str] = Query(None, description="Direct SBI POSP query"),
|
| 632 |
ind: Optional[str] = Query(None, description="Direct IND Admissions & KYC query"),
|
| 633 |
upi: Optional[str] = Query(None, description="Direct UPI ID or VPA query"),
|
|
|
|
| 634 |
auth_meta: Dict[str, Any] = Depends(verify_api_key)
|
| 635 |
):
|
| 636 |
"""
|
| 637 |
Smart Unified Lookup: Automatically detects input type.
|
| 638 |
- 10-digit phone: Runs full parallel combined search across ALL databases.
|
| 639 |
- 12-digit: Searches Aadhaar database.
|
|
|
|
| 640 |
- Telegram ID: Searches Telegram 65M Master DB.
|
| 641 |
- UPI ID / VPA: Resolves phone, PSP app, bank, and 360° KYC dossier.
|
| 642 |
- Text/Username: Searches Instagram/Twitter.
|
| 643 |
- Family: Discovers family linkages across Aadhaar & Telecom.
|
|
|
|
| 644 |
- SBI: Searches SBI POSP & Indian Banking database.
|
| 645 |
- IND: Searches IND Education, Admissions & KYC database.
|
| 646 |
"""
|
| 647 |
eng = get_engine()
|
| 648 |
|
| 649 |
-
if
|
|
|
|
|
|
|
| 650 |
res = eng.query_upi_full_info(upi)
|
| 651 |
elif ind:
|
| 652 |
res = eng.query_ind(ind)
|
|
|
|
| 546 |
return res
|
| 547 |
|
| 548 |
|
| 549 |
+
@app.get("/api/gas/{query}")
|
| 550 |
+
@app.get("/api/gas")
|
| 551 |
+
@app.get("/api/lpg/{query}")
|
| 552 |
+
@app.get("/api/lpg")
|
| 553 |
+
@app.get("/api/indane/{query}")
|
| 554 |
+
@app.get("/api/indane")
|
| 555 |
+
@app.get("/api/bharatgas/{query}")
|
| 556 |
+
@app.get("/api/bharatgas")
|
| 557 |
+
@app.get("/api/hpgas/{query}")
|
| 558 |
+
@app.get("/api/hpgas")
|
| 559 |
+
async def lookup_lpg_gas(
|
| 560 |
+
query: Optional[str] = None,
|
| 561 |
+
num: Optional[str] = Query(None, description="10-digit mobile number or 17-digit LPG ID"),
|
| 562 |
+
phone: Optional[str] = Query(None),
|
| 563 |
+
lpg_id: Optional[str] = Query(None),
|
| 564 |
+
provider: Optional[str] = Query(None, description="Gas provider: 'indane', 'bharat', or 'hp'"),
|
| 565 |
+
q: Optional[str] = Query(None),
|
| 566 |
+
auth_meta: Dict[str, Any] = Depends(verify_api_key)
|
| 567 |
+
):
|
| 568 |
+
"""
|
| 569 |
+
Direct LPG Gas Consumer Intelligence:
|
| 570 |
+
Resolves 10-digit mobile number or 17-digit LPG ID across all 3 Indian OMCs:
|
| 571 |
+
Indane Gas (IOCL), Bharat Gas (BPCL), and HP Gas (HPCL).
|
| 572 |
+
"""
|
| 573 |
+
target = query or num or phone or lpg_id or q
|
| 574 |
+
if not target:
|
| 575 |
+
raise HTTPException(status_code=400, detail="Missing required parameter: provide 10-digit mobile number or 17-digit LPG ID.")
|
| 576 |
+
res = ServiceGateway.get_lpg(target, provider=provider)
|
| 577 |
+
if isinstance(res, dict):
|
| 578 |
+
res["tier"] = auth_meta.get("tier", "free")
|
| 579 |
+
res["remaining_credits"] = auth_meta.get("remaining", -1)
|
| 580 |
+
return res
|
| 581 |
+
|
| 582 |
+
|
| 583 |
+
|
| 584 |
@app.get("/api/phone/{phone_number}")
|
| 585 |
async def lookup_by_phone(phone_number: str, auth_meta: Dict[str, Any] = Depends(verify_api_key)):
|
| 586 |
"""Search Telecom 2.5B Database by phone number."""
|
|
|
|
| 666 |
sbi: Optional[str] = Query(None, description="Direct SBI POSP query"),
|
| 667 |
ind: Optional[str] = Query(None, description="Direct IND Admissions & KYC query"),
|
| 668 |
upi: Optional[str] = Query(None, description="Direct UPI ID or VPA query"),
|
| 669 |
+
gas: Optional[str] = Query(None, description="Direct LPG Gas cylinder or consumer query"),
|
| 670 |
auth_meta: Dict[str, Any] = Depends(verify_api_key)
|
| 671 |
):
|
| 672 |
"""
|
| 673 |
Smart Unified Lookup: Automatically detects input type.
|
| 674 |
- 10-digit phone: Runs full parallel combined search across ALL databases.
|
| 675 |
- 12-digit: Searches Aadhaar database.
|
| 676 |
+
- 16/17-digit: Searches LPG Gas database or Telegram ID.
|
| 677 |
- Telegram ID: Searches Telegram 65M Master DB.
|
| 678 |
- UPI ID / VPA: Resolves phone, PSP app, bank, and 360° KYC dossier.
|
| 679 |
- Text/Username: Searches Instagram/Twitter.
|
| 680 |
- Family: Discovers family linkages across Aadhaar & Telecom.
|
| 681 |
+
- Gas: Resolves complete LPG cylinder details across Indane, Bharat Gas, HP Gas.
|
| 682 |
- SBI: Searches SBI POSP & Indian Banking database.
|
| 683 |
- IND: Searches IND Education, Admissions & KYC database.
|
| 684 |
"""
|
| 685 |
eng = get_engine()
|
| 686 |
|
| 687 |
+
if gas:
|
| 688 |
+
res = ServiceGateway.get_lpg(gas)
|
| 689 |
+
elif upi:
|
| 690 |
res = eng.query_upi_full_info(upi)
|
| 691 |
elif ind:
|
| 692 |
res = eng.query_ind(ind)
|