Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions Domains/cli/MiniProjects/PincodeLookup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# PincodeLookup: Indian Address Resolver

A lightweight CLI tool that resolves Indian pincodes into detailed post office information—including delivery status, district, and state—using the public [PostalPincode.in API](https://api.postalpincode.in).

## 💡 Real-Life Use Cases
- **E-commerce**: Validate user addresses during checkout
- **Logistics**: Check if a location supports delivery
- **Forms & UX**: Auto-fill city/district from pincode
- **Students**: Learn how India’s postal system is structured

## Features
- Accepts any valid 6-digit Indian pincode
- Shows all associated post offices
- Highlights **delivery vs non-delivery** status
- Clean, emoji-enhanced terminal output
- Zero dependencies (pure Python)

## How to Run
1. Make sure you have Python 3 installed.
2. Navigate to the project folder:
```bash
cd Domains/CLI/MiniProjects/PincodeLookup
55 changes: 55 additions & 0 deletions Domains/cli/MiniProjects/PincodeLookup/pincode_lookup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import urllib.request
import json
import sys

def fetch_pincode_data(pincode):
"""Fetch post office data for a given Indian pincode."""
try:
url = f"https://api.postalpincode.in/pincode/{pincode}"
with urllib.request.urlopen(url) as response:
return json.loads(response.read().decode())
except Exception as e:
return None

def display_results(data):
"""Display formatted post office information."""
if not data or data[0].get("Status") != "Success":
print("\033[91m❌ Invalid or unknown pincode. Please try again.\033[0m")
return

result = data[0]
offices = result["PostOffice"]
print(f"\n\033[1;94m📬 Found {result['Message']}\033[0m")
print("=" * 60)

for i, office in enumerate(offices, 1):
name = office.get("Name", "N/A")
district = office.get("District", "N/A")
state = office.get("State", "N/A")
delivery = office.get("DeliveryStatus", "N/A")
branch = office.get("BranchType", "N/A")

print(f"\n📍 Office {i}: \033[1m{name}\033[0m")
print(f" 🏙️ District: {district}")
print(f" 🏛️ State: {state}")
print(f" 🚚 Delivery: {'✅ Yes' if delivery == 'Delivery' else '❌ No'}")
print(f" 🏢 Type: {branch}")

print("\n" + "=" * 60 + "\n")

def main():
print("\033[1;92m🇮🇳 PincodeLookup: Indian Address Resolver\033[0m")
print("\033[90mEnter a 6-digit Indian pincode to see associated post offices.\033[0m\n")

pincode = input("Enter Pincode: ").strip()

if not pincode.isdigit() or len(pincode) != 6:
print("\033[91m❌ Please enter a valid 6-digit pincode.\033[0m")
return

print("\n🔍 Looking up...\n")
data = fetch_pincode_data(pincode)
display_results(data)

if __name__ == "__main__":
main()
Loading