Spaces:
Build error
Build error
| import cloudscraper | |
| from bs4 import BeautifulSoup | |
| from fastapi import FastAPI, Query | |
| from fastapi.responses import JSONResponse | |
| import time | |
| import json | |
| app = FastAPI() | |
| # Cloudscraper with default settings (Chrome ki zaroorat nahi) | |
| scraper = cloudscraper.create_scraper( | |
| interpreter='nodejs', # Node.js interpreter - lighter than Chrome | |
| delay=15, # Thoda delay Cloudflare ko bypass karne ke liye | |
| browser={ | |
| 'browser': 'firefox', | |
| 'platform': 'windows', | |
| 'mobile': False | |
| } | |
| ) | |
| # Cookie persistence for session | |
| session_cookies = {} | |
| def read_root(): | |
| return { | |
| "message": "SIM Database Checker API", | |
| "developer": "WASIF ALI", | |
| "endpoint": "/check?phone=3xxxxxxx", | |
| "status": "active" | |
| } | |
| def check_number(phone: str = Query(..., description="Phone number to check")): | |
| if not phone: | |
| return JSONResponse( | |
| status_code=400, | |
| content={"success": False, "message": "Phone number required"} | |
| ) | |
| try: | |
| # Step 1: Main page se session start | |
| print(f"🌐 Visiting main page for {phone}") | |
| main_response = scraper.get( | |
| "https://freshsimdatabases.com/", | |
| timeout=30, | |
| allow_redirects=True | |
| ) | |
| # Step 2: Search page par POST | |
| print(f"📤 Submitting number {phone}") | |
| response = scraper.post( | |
| "https://freshsimdatabases.com/number_dattta.php", | |
| data=f"numberCnic={phone}&searchNumber=", | |
| headers={ | |
| "Content-Type": "application/x-www-form-urlencoded", | |
| "Referer": "https://freshsimdatabases.com/", | |
| "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", | |
| "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", | |
| "Accept-Language": "en-US,en;q=0.9", | |
| "Accept-Encoding": "gzip, deflate, br", | |
| "Connection": "keep-alive" | |
| }, | |
| timeout=45 | |
| ) | |
| # Check if blocked | |
| if response.status_code == 403 or "cf-challenge" in response.text.lower(): | |
| return { | |
| "success": False, | |
| "message": "Cloudflare blocking detected. The site has bot protection.", | |
| "suggestion": "Try using a VPN or proxy", | |
| "developer": "WASIF ALI" | |
| } | |
| # Parse HTML | |
| soup = BeautifulSoup(response.text, 'html.parser') | |
| records = [] | |
| # Try different table selectors | |
| tables = soup.find_all('table') | |
| for table in tables: | |
| rows = table.find_all('tr') | |
| for row in rows: | |
| cols = row.find_all('td') | |
| if len(cols) >= 4: | |
| mobile = cols[0].get_text(strip=True) | |
| if mobile and len(mobile) >= 10: # Valid phone number | |
| records.append({ | |
| "Mobile": mobile, | |
| "Name": cols[1].get_text(strip=True) if len(cols) > 1 else "", | |
| "CNIC": cols[2].get_text(strip=True) if len(cols) > 2 else "", | |
| "Address": cols[3].get_text(strip=True) if len(cols) > 3 else "" | |
| }) | |
| if records: | |
| return { | |
| "success": True, | |
| "count": len(records), | |
| "records": records, | |
| "developer": "WASIF ALI", | |
| "telegram": "@FREEHACKS95" | |
| } | |
| else: | |
| # No records found | |
| return { | |
| "success": False, | |
| "message": "No records found for this number", | |
| "developer": "WASIF ALI" | |
| } | |
| except cloudscraper.exceptions.CloudflareChallengeError as e: | |
| return JSONResponse( | |
| status_code=503, | |
| content={ | |
| "success": False, | |
| "error": "Cloudflare challenge detected", | |
| "message": "Site has bot protection. This API cannot bypass it.", | |
| "developer": "WASIF ALI" | |
| } | |
| ) | |
| except Exception as e: | |
| return JSONResponse( | |
| status_code=500, | |
| content={ | |
| "success": False, | |
| "error": str(e), | |
| "message": "Server error occurred", | |
| "developer": "WASIF ALI" | |
| } | |
| ) | |
| # Health check endpoint | |
| def health_check(): | |
| return {"status": "running"} |