Sahibinden.com MCP Server
No description available
Ask AI about Sahibinden.com MCP Server
Powered by Claude · Grounded in docs
I know everything about Sahibinden.com MCP Server. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
🏠 Sahibinden.com Gelişmiş Emlak Scraper & Analytics Platform
Türkiye'nin en kapsamlı emlak veri toplama, analiz ve takip sistemi
Sahibinden.com'dan emlak ilanlarını otomatik olarak toplayan, veritabanında saklayan, detaylı analizler yapan, Google Maps entegrasyonu ile konum bazlı sorgular yapan ve MCP (Model Context Protocol) üzerinden Claude AI'ya entegre edilebilen profesyonel bir emlak platformu.
📋 İçindekiler
- Özellikler
- Kurulum
- Hızlı Başlangıç
- CLI Kullanımı
- Google Maps Entegrasyonu
- MCP Server
- Web Dashboard
- Veri Modeli
🌟 Özellikler
🔍 Gelişmiş Web Scraping
- Detaylı Veri Toplama: Sadece temel bilgiler değil, tüm emlak özelliklerini toplar
- Çoklu Sayfa Desteği: Binlerce ilanı otomatik toplar
- Rate Limiting: Saygılı scraping, siteyi yormaz
- Hata Toleransı: Robust hata yönetimi
🗄️ Veritabanı Yönetimi
- SQLite Veritabanı: Lokal, hızlı, kolay yönetim
- Fiyat Geçmişi: Tüm fiyat değişiklikleri kaydedilir
- Favoriler Sistemi: İlgilendiğiniz ilanları işaretleyin
- Arama Geçmişi: Yaptığınız aramaları takip edin
📊 Güçlü Analitik
- Fiyat İstatistikleri: Min, max, ortalama, medyan, standart sapma
- m² Başına Fiyat Analizi: En objektif karşılaştırma
- İlçe Karşılaştırmaları: Hangi ilçe daha uygun?
- Trend Analizi: Fiyatlar artıyor mu, azalıyor mu?
- Piyasa Genel Görünümü: Şehir bazında detaylı durum
- En İyi Fırsatlar: m² bazında en ucuz ilanlar
🔔 Otomatik Takip
- Fiyat Düşüşü Bildirimi: Fiyatı düşen ilanları yakalar
- Favori Takibi: Favori ilanlarınızın fiyat değişimlerini izler
- Yeni İlan Bildirimi: Kriter match eden ilanları bulur
🤖 Claude AI Entegrasyonu (MCP Server)
- Model Context Protocol: Claude'un emlak verilerine doğrudan erişimi
- 10+ MCP Tool: Arama, analiz, karşılaştırma, trend analizi
- JSON API: RESTful benzeri veri erişimi
- Real-time Data: Güncel verilerle çalışır
💻 Kolay Kullanım
- CLI Arayüzü: Güçlü komut satırı araçları
- Programatik API: Python kodunuzda kullanın
- JSON Export: Verileri dışa aktarın
- Detaylı Raporlar: Otomatik rapor oluşturma
📦 Kurulum
Gereksinimler
- Python 3.8 veya üzeri
- pip (Python paket yöneticisi)
- 100MB+ disk alanı
Kurulum Adımları
- Repository'yi klonlayın:
git clone <repository-url>
cd E-Mail-Generator
- Bağımlılıkları yükleyin:
pip install -r requirements.txt
- Veritabanını başlatın:
python -c "from emlak_scraper import RealEstateDatabase; RealEstateDatabase()"
- Test edin:
python emlak_cli.py --help
- (Önerilen)
.envdosyası ile güvenli yapılandırma:
# Örnek dosyayı kopyalayın
cp .env.example .env
# .env içine kendi değerlerinizi yazın
# GOOGLE_MAPS_API_KEY=...
# NOTIFICATION_EMAIL=...
# EMAIL_USERNAME=...
# EMAIL_PASSWORD=...
Not: Uygulama başlangıcında .env dosyası otomatik yüklenir. Google Maps özellikleri (geocoding, harita görselleştirme) için GOOGLE_MAPS_API_KEY gerekir. Detaylar için Google Maps Entegrasyonu bölümüne bakın.
🚀 Kullanım
CLI (Komut Satırı) Kullanımı
1. Emlak Araması
Temel arama:
python emlak_cli.py search \
--city istanbul \
--category satilik-daire \
--pages 3
Detaylı filtreleme:
python emlak_cli.py search \
--city istanbul \
--category satilik-daire \
--district kadikoy \
--rooms "3+1" \
--min-price 3000000 \
--max-price 6000000 \
--min-m2 100 \
--max-m2 140 \
--pages 5 \
--detailed \
--output results.json
2. Fiyat Analizi
Hızlı istatistik:
python emlak_cli.py analyze \
--city ankara \
--category satilik-daire \
--district cankaya
Detaylı rapor:
python emlak_cli.py analyze \
--city izmir \
--category kiralik-daire \
--report \
--output izmir_rapor.txt
3. İlçe Karşılaştırması
python emlak_cli.py compare \
--city istanbul \
--category satilik-daire \
--districts "kadikoy,besiktas,sisli,bakirkoy,uskudar" \
--output karsilastirma.json
4. En İyi Fırsatlar
python emlak_cli.py best-deals \
--city istanbul \
--category satilik-daire \
--district kadikoy \
--limit 20
5. Fiyat Düşüşlerini Tespit Et
python emlak_cli.py price-drops \
--days 14 \
--min-drop 10
6. Piyasa Genel Görünümü
python emlak_cli.py market-overview \
--city istanbul \
--output istanbul_piyasa.json
7. İlanları Güncelle
python emlak_cli.py update --days 7
8. Favoriler
# Favori ekle
python emlak_cli.py favorites --add 123456 --notes "Çok beğendim"
# Favorileri listele
python emlak_cli.py favorites
Python API Kullanımı
from emlak_scraper import (
AdvancedRealEstateScraper,
RealEstateAnalytics,
SearchCriteria
)
# Scraper oluştur
scraper = AdvancedRealEstateScraper()
# Arama kriterleri
criteria = SearchCriteria(
city="istanbul",
category="satilik-daire",
district="kadikoy",
min_price=3000000,
max_price=6000000,
rooms="3+1"
)
# Ara ve kaydet
properties = scraper.search_and_save(
criteria,
max_pages=3,
fetch_details=True
)
print(f"{len(properties)} ilan bulundu ve kaydedildi")
# Analiz yap
analytics = RealEstateAnalytics()
stats = analytics.get_price_statistics(criteria)
print(f"Ortalama fiyat: {stats['avg']:,.0f} TL")
# Rapor oluştur
report = analytics.generate_report(criteria)
print(report)
# Kaynakları temizle
scraper.close()
analytics.close()
MCP Server Kullanımı
MCP Server'ı Başlatma
python -m emlak_scraper.mcp.server
Claude Web (Remote MCP Connector) için doğru adres
Claude Web tarafında URL isteyen bağlantı tipi için stdio değil, remote HTTP gerekir.
Bu proje remote endpoint'i şu adresten sunar:
https://sahibinden-mcp.fly.dev/mcp
Kimlik doğrulama:
- Connector auth ekranında Bearer Token seçin
- Token olarak
.enviçindekiMCP_AUTH_TOKENdeğerini girin
Özet:
- Claude Desktop (local):
scripts/run_mcp_server.shilecommandtabanlı stdio - Claude Web (remote):
https://sahibinden-mcp.fly.dev/mcp+ Bearer token
Claude Desktop ile Entegrasyon
mcp_config.json dosyasını Claude Desktop yapılandırmanıza ekleyin:
{
"mcpServers": {
"real-estate": {
"command": "/mnt/thunderbolt/Sahibinden.com-MCP-Server/scripts/run_mcp_server.sh",
"args": [],
"cwd": "/mnt/thunderbolt/Sahibinden.com-MCP-Server",
"env": {}
}
}
}
Önemli: Bu proje MCP için
stdiotransport kullanır, HTTP URL/adres girilmez. Claude tarafında girmeniz gereken şey bircommand'dır, örn.scripts/run_mcp_server.sh.
Alternatif (wrapper script kullanmadan):
{
"mcpServers": {
"real-estate": {
"command": "python3",
"args": ["-m", "emlak_scraper.mcp.server"],
"cwd": "/mnt/thunderbolt/Sahibinden.com-MCP-Server",
"env": {}
}
}
}
MCP Tools
MCP Server şu araçları sağlar:
- search_properties: Emlak ara
- get_property_details: Detaylı ilan bilgisi
- get_price_statistics: Fiyat istatistikleri
- compare_districts: İlçe karşılaştırması
- get_market_overview: Piyasa genel görünümü
- find_best_deals: En iyi fırsatlar
- detect_price_drops: Fiyat düşüşleri
- get_price_trends: Fiyat trend analizi
- get_favorites: Favori ilanlar
- add_to_favorites: Favorilere ekle
Claude ile Kullanım Örnekleri
Sen: İstanbul Kadıköy'de 3 milyon ile 5 milyon TL arası satılık 3+1 daire ara
Claude: [search_properties tool kullanarak araştırır ve sonuçları gösterir]
Sen: Bu ilanların m² başına fiyat istatistiklerini ver
Claude: [get_price_statistics tool kullanarak analiz yapar]
Sen: Kadıköy, Beşiktaş ve Şişli'yi karşılaştır
Claude: [compare_districts tool kullanarak karşılaştırma yapar]
📊 Veri Modeli
PropertyDetails (Emlak Detayları)
@dataclass
class PropertyDetails:
# Temel Bilgiler
listing_id: str
title: str
url: str
price: float
currency: str
# Konum
city: str
district: str
neighborhood: str
latitude: float
longitude: float
# Emlak Özellikleri
rooms: str # "3+1"
gross_m2: float
net_m2: float
floor: str
total_floors: int
building_age: str
heating_type: str
# Ek Özellikler
bathroom_count: int
balcony: bool
furnished: bool
site_interior: bool
elevator: bool
parking: bool
garden: bool
terrace: bool
swimming_pool: bool
# Cephe ve Görünüm
front_view: str
scenic_view: bool
sea_view: bool
# İlan Bilgileri
description: str
listing_date: datetime
view_count: int
# İletişim
advertiser_name: str
advertiser_type: str
phone: str
# Görseller
images: List[str]
thumbnail: str
Veritabanı Tabloları
- properties: Tüm emlak ilanları
- price_history: Fiyat değişim geçmişi
- search_history: Arama geçmişi
- favorites: Favori ilanlar
- alerts: Otomatik bildirimler
📁 Proje Yapısı
E-Mail-Generator/
├── emlak_scraper/ # Ana paket
│ ├── __init__.py
│ ├── models.py # Veri modelleri ve veritabanı
│ ├── advanced_scraper.py # Gelişmiş scraper
│ ├── analytics.py # Analitik modülü
│ └── mcp/ # MCP Server
│ ├── __init__.py
│ └── server.py # MCP server implementasyonu
├── database/ # SQLite veritabanı
│ └── real_estate.db
├── data/ # Veri dosyaları
│ └── images/ # İlan görselleri
├── emlak_cli.py # CLI arayüzü
├── requirements.txt # Python bağımlılıkları
├── mcp_config.json # MCP yapılandırması
├── README.md # Bu dosya
└── SAHIBINDEN_KULLANIM.md # Detaylı Türkçe kılavuz
# Eski dosyalar (geriye dönük uyumluluk)
├── sahibinden_search.py # Basit scraper
├── sahibinden_interactive.py # İnteraktif CLI
└── sahibinden_selenium.py # Selenium scraper
🔧 Gelişmiş Özellikler
Otomatik Fiyat Takibi
from emlak_scraper import AdvancedRealEstateScraper
scraper = AdvancedRealEstateScraper()
# Mevcut ilanları güncelle ve fiyat değişikliklerini yakala
scraper.update_existing_listings(check_last_n_days=7)
# Fiyatı düşen ilanları bul
from emlak_scraper import RealEstateAnalytics
analytics = RealEstateAnalytics()
drops = analytics.detect_price_drops(days=7, min_drop_pct=5.0)
for drop in drops:
print(f"{drop['title']}: {drop['drop_pct']:.1f}% düşüş!")
Özel Analizler
from emlak_scraper import RealEstateAnalytics, SearchCriteria
analytics = RealEstateAnalytics()
# Mahalle bazında m² fiyat analizi
criteria = SearchCriteria(city="istanbul", category="satilik-daire")
ppm2_stats = analytics.get_price_per_m2_analysis(criteria)
# Piyasa trendi
overview = analytics.get_market_overview("istanbul")
# En uygun fırsatlar
best_deals = analytics.find_best_deals(criteria, top_n=20)
Veritabanı Sorguları
from emlak_scraper import RealEstateDatabase
db = RealEstateDatabase()
# Özel sorgu
cursor = db.conn.cursor()
cursor.execute('''
SELECT district, AVG(price / net_m2) as avg_ppm2
FROM properties
WHERE city = 'istanbul' AND net_m2 > 0
GROUP BY district
ORDER BY avg_ppm2 ASC
LIMIT 10
''')
for row in cursor.fetchall():
print(f"{row['district']}: {row['avg_ppm2']:,.0f} TL/m²")
📈 Kullanım Senaryoları
Senaryo 1: Ev Alıcısı
# 1. İstanbul'da uygun fiyatlı 3+1 daireler
python emlak_cli.py search \
--city istanbul \
--category satilik-daire \
--rooms "3+1" \
--max-price 5000000 \
--pages 10 \
--detailed
# 2. İlçeleri karşılaştır
python emlak_cli.py compare \
--city istanbul \
--category satilik-daire \
--districts "kadikoy,maltepe,kartal,pendik"
# 3. En uygun fırsatları bul
python emlak_cli.py best-deals \
--city istanbul \
--category satilik-daire \
--limit 50
# 4. Günlük fiyat takibi
python emlak_cli.py price-drops --days 1 --min-drop 2
Senaryo 2: Emlakçı/Yatırımcı
# 1. Piyasa analizi
python emlak_cli.py market-overview --city istanbul
# 2. Bölgesel fiyat analizi
python emlak_cli.py analyze \
--city istanbul \
--category satilik-daire \
--district kadikoy \
--report
# 3. Trend takibi (günlük cron job)
python emlak_cli.py update --days 1
python emlak_cli.py price-drops --days 1
Senaryo 3: Veri Analisti
from emlak_scraper import RealEstateDatabase, RealEstateAnalytics
import pandas as pd
db = RealEstateDatabase()
# Veritabanından tüm verileri çek
cursor = db.conn.cursor()
cursor.execute("SELECT * FROM properties WHERE is_active = 1")
rows = cursor.fetchall()
# Pandas DataFrame'e çevir
df = pd.DataFrame([dict(row) for row in rows])
# Analiz yap
print(df.groupby('district')['price'].describe())
print(df.groupby('rooms')['price'].mean())
# Görselleştir
import matplotlib.pyplot as plt
df.boxplot(column='price', by='district', figsize=(15, 8))
plt.show()
⚙️ Yapılandırma
Veritabanı Konumu
# Özel veritabanı konumu
from emlak_scraper import RealEstateDatabase
db = RealEstateDatabase("/path/to/custom/database.db")
Scraper Ayarları
from emlak_scraper import AdvancedRealEstateScraper
scraper = AdvancedRealEstateScraper()
# Custom headers
scraper.headers['User-Agent'] = "Mozilla/5.0 ..."
# Timeout ayarı
scraper.session.timeout = 30
🔒 Yasal Uyarı
Bu araç kişisel kullanım ve eğitim amaçlıdır. Kullanırken:
- ✅ Sahibinden.com'un kullanım şartlarına uyun
- ✅ Rate limiting uygulayın (istekler arası bekleyin)
- ✅ Sadece kişisel araştırma için kullanın
- ❌ Siteyi aşırı yüklemeyin
- ❌ Verileri ticari amaçla kullanmayın
- ❌ Toplanan verileri izinsiz paylaşmayın
🐛 Sorun Giderme
403 Forbidden Hatası
# VPN kullanın veya IP değiştirin
# Selenium versiyonunu deneyin
python sahibinden_selenium.py
Veritabanı Hatası
# Veritabanını sıfırlayın
rm database/real_estate.db
python -c "from emlak_scraper import RealEstateDatabase; RealEstateDatabase()"
MCP Server Çalışmıyor
# Bağımlılıkları kontrol edin
pip install -r requirements.txt
# Manuel test
python -m emlak_scraper.mcp.server
📚 Ek Dokümantasyon
- SAHIBINDEN_KULLANIM.md: Detaylı Türkçe kullanım kılavuzu
- MCP Integration Guide: MCP entegrasyon rehberi (yakında)
- API Reference: API dokümantasyonu (yakında)
🤝 Katkıda Bulunma
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/YeniOzellik) - Commit yapın (
git commit -m 'Yeni özellik: ...') - Push edin (
git push origin feature/YeniOzellik) - Pull Request oluşturun
📄 Lisans
MIT License
👨💻 Geliştirici
Claude AI ile geliştirilmiştir.
Not: Bu araç Sahibinden.com ile resmi bir ilişkisi yoktur. Eğitim ve kişisel kullanım amaçlıdır.
🚀 Hızlı Başlangıç
# Kurulum
pip install -r requirements.txt
# İlk arama
python emlak_cli.py search --city istanbul --category satilik-daire --pages 1 --detailed
# Analiz
python emlak_cli.py analyze --city istanbul --category satilik-daire --report
# Excel'e export
python emlak_cli.py export --city istanbul --category satilik-daire --format excel
# Grafikler oluştur
python emlak_cli.py visualize --type dashboard --city istanbul --category satilik-daire
# Görselleri indir
python emlak_cli.py download-images --limit 20 --max-images 5
# Web dashboard başlat
python emlak_cli.py web --port 5000
# Google Maps - Koordinat ekleme
python emlak_cli.py geocode --limit 50
# Google Maps - Harita oluştur
python emlak_cli.py map --city istanbul --category satilik-daire
# Google Maps - Yakındaki ilanlar
python emlak_cli.py nearby --address "Taksim, İstanbul" --radius 2
# MCP Server başlat
python -m emlak_scraper.mcp.server
📝 Changelog
v2.2.0 (2025-02-21) - Google Maps Entegrasyonu 🗺️
Yeni Özellikler:
- ✅ Google Maps API entegrasyonu
- ✅ Geocoding: Otomatik koordinat dönüştürme
- ✅ Yakındaki İlanlar: Konum bazlı arama ve mesafe hesaplama
- ✅ İnteraktif Haritalar: Folium ile HTML harita görselleştirme
- ✅ Seyahat Süresi: Google Distance Matrix API
- ✅ MCP Tools: 3 yeni konum bazlı tool (geocode_property, find_nearby_properties, create_property_map)
- ✅ CLI Komutları:
geocode,map,nearbykomutları - ✅ Web Dashboard:
/mapsayfası ve 4 yeni API endpoint
İyileştirmeler:
- ✅ Lint hataları düzeltildi (flake8 clean)
- ✅ PEP 8 uyumluluğu sağlandı
- ✅ Import organizasyonu iyileştirildi
- ✅ Exception handling standardizasyonu
- ✅ Kod kalitesi artırıldı
Dosyalar:
emlak_scraper/maps_integration.py(421 satır)web_dashboard/templates/map.html- 3 yeni CLI komutu
- Google Maps dokümantasyonu
v2.1.0 (2025-02-20) - Complete Feature Implementation
Yeni Özellikler:
- ✅ Görsel İndirme:
image_downloader.py - ✅ Excel/CSV Export:
exporters.py - ✅ Görselleştirme:
visualizations.py(matplotlib) - ✅ Email Bildirimleri:
notifications.py - ✅ Scheduled Jobs: Cron scriptleri
- ✅ Web Dashboard: Flask app
- ✅ Gelişmiş CLI: 13 komut
Modüller:
emlak_scraper/advanced_scraper.pyemlak_scraper/analytics.pyemlak_scraper/models.pyemlak_scraper/mcp/server.py
🗺️ Google Maps Entegrasyonu
Google Maps entegrasyonu, emlak ilanlarına konum tabanlı özellikler ekler ve harita görselleştirmesi sağlar.
Kurulum
-
Google Maps API Anahtarı Alın
- Google Cloud Console üzerinden bir proje oluşturun
- APIs & Services > Credentials bölümünden yeni bir API key oluşturun
- Aşağıdaki API'leri etkinleştirin:
- Geocoding API
- Maps JavaScript API
- Distance Matrix API (opsiyonel)
- Places API (opsiyonel)
-
Gerekli Kütüphaneleri Yükleyin
pip install googlemaps folium geopy -
API Anahtarını Ayarlayın
Önerilen yöntem (
.env):cp .env.example .env.enviçine:GOOGLE_MAPS_API_KEY=AIzaSy...Alternatif (tek oturumluk shell env):
# Linux/Mac export GOOGLE_MAPS_API_KEY='AIzaSy...' # Windows PowerShell $env:GOOGLE_MAPS_API_KEY='AIzaSy...' # Windows CMD set GOOGLE_MAPS_API_KEY=AIzaSy...Not:
.envdosyası repoya eklenmez;.gitignoretarafından hariç tutulur.
CLI Kullanımı
1. İlanları Geocode Etme
Mevcut ilanların adreslerini koordinatlara dönüştür:
# İlk 100 ilanı geocode et
python emlak_cli.py geocode --limit 100
# Mevcut koordinatları da üzerine yaz
python emlak_cli.py geocode --limit 100 --overwrite
2. Harita Oluşturma
İlanları interaktif harita üzerinde görselleştir:
# İstanbul'daki satılık daireler için harita
python emlak_cli.py map --city istanbul --category satilik-daire
# Kadıköy'deki 3+1 daireler için harita
python emlak_cli.py map --city istanbul --category satilik-daire --district kadikoy --rooms "3+1"
# Özel çıktı dosyası
python emlak_cli.py map --city ankara --category kiralik-daire --output ankara_kiralık.html
Harita dosyası oluşturulduktan sonra tarayıcınızda açabilirsiniz:
open ankara_kiralık.html # Mac
start ankara_kiralık.html # Windows
xdg-open ankara_kiralık.html # Linux
3. Yakındaki İlanları Bulma
Belirli bir konuma yakın ilanları bul:
# Adres kullanarak
python emlak_cli.py nearby --address "Taksim, İstanbul" --radius 2
# Koordinat kullanarak
python emlak_cli.py nearby --lat 41.0082 --lng 28.9784 --radius 3
# Filtreleme ile
python emlak_cli.py nearby --address "Kızılay, Ankara" --radius 5 --city ankara --category kiralik-daire
Web Dashboard Kullanımı
Web dashboard'da harita görünümü:
# Web server'ı başlat
python emlak_cli.py web
# Tarayıcıda http://localhost:5000/map adresine gidin
Dashboard üzerinden:
- Şehir, kategori, ilçe seçimi yapabilirsiniz
- İlan sayısını belirleyebilirsiniz
- Haritayı interaktif olarak oluşturabilirsiniz
- Harita üzerinde ilanları inceleyebilirsiniz
Python API Kullanımı
from emlak_scraper.maps_integration import GoogleMapsIntegration
from emlak_scraper import RealEstateDatabase, SearchCriteria
# Google Maps entegrasyonu
maps = GoogleMapsIntegration() # API key otomatik olarak env'den alınır
# 1. Adres geocoding
coords = maps.geocode_address("Kadıköy, İstanbul")
print(coords) # (40.9833, 29.0333)
# 2. Reverse geocoding
address = maps.reverse_geocode(40.9833, 29.0333)
print(address) # "Kadıköy, İstanbul, Türkiye"
# 3. İlan koordinat zenginleştirme
db = RealEstateDatabase()
prop = db.get_property("12345")
enriched_prop = maps.enrich_property_location(prop)
db.save_property(enriched_prop)
# 4. Yakındaki ilanları bulma
nearby = maps.find_nearby_properties(
center_lat=41.0082,
center_lng=28.9784,
max_distance_km=2.0,
db=db,
criteria=SearchCriteria(city="istanbul", category="satilik-daire")
)
for prop in nearby[:10]:
distance = maps.calculate_distance(
(41.0082, 28.9784),
(prop.latitude, prop.longitude)
)
print(f"{distance:.2f} km - {prop.title}")
# 5. Harita oluşturma
criteria = SearchCriteria(city="istanbul", category="satilik-daire", district="kadikoy")
properties = db.search_properties(criteria, limit=100)
map_path = maps.create_property_map(
properties=properties,
output_file="kadikoy_map.html"
)
print(f"Harita oluşturuldu: {map_path}")
# 6. Toplu geocoding
stats = maps.batch_geocode_database(
db=db,
limit=200,
overwrite=False
)
print(f"Başarılı: {stats['success']}, Başarısız: {stats['failed']}")
# 7. Mesafe hesaplama
distance = maps.calculate_distance(
(41.0082, 28.9784), # Taksim
(40.9833, 29.0333) # Kadıköy
)
print(f"Mesafe: {distance:.2f} km")
# 8. Seyahat süresi
travel = maps.get_travel_time(
origin=(41.0082, 28.9784),
destination=(40.9833, 29.0333),
mode='driving'
)
print(f"Süre: {travel['duration_text']}, Mesafe: {travel['distance_text']}")
MCP Server ile Kullanım
Google Maps özellikleri MCP Server üzerinden Claude'a açılır:
# Claude'a şu şekilde sorabilirsiniz:
"İstanbul Kadıköy'deki satılık dairelerin haritasını oluştur"
# -> create_property_map tool kullanır
"Taksim'e 2 km mesafedeki kiralık evleri bul"
# -> find_nearby_properties tool kullanır
"Listing ID 12345 olan ilanın koordinatlarını ekle"
# -> geocode_property tool kullanır
MCP Server'daki Google Maps araçları:
geocode_property: İlana koordinat eklefind_nearby_properties: Yakındaki ilanları bulcreate_property_map: Harita oluştur
Harita Özellikleri
Oluşturulan haritalar:
- Interaktif: Zoom, pan, marker'lara tıklama
- Cluster: Çok sayıda ilan için otomatik gruplama
- Renkli Marker'lar: Fiyata göre renk kodlaması
- 🟢 Yeşil: < 1M TL
- 🔵 Mavi: 1-3M TL
- 🟠 Turuncu: 3-5M TL
- 🔴 Kırmızı: > 5M TL
- Popup Bilgi: Başlık, fiyat, konum, oda, m², link
- Tooltip: Mouse hover ile hızlı bilgi
- OpenStreetMap: Ücretsiz harita altyapısı
Örnek Kullanım Senaryoları
Senaryo 1: Ofise Yakın Ev Bulma
# İşyeri koordinatları
office_lat, office_lng = 41.0082, 28.9784 # Taksim
# 30 dakikalık mesafedeki ilanları bul
maps = GoogleMapsIntegration()
db = RealEstateDatabase()
nearby = maps.find_nearby_properties(
center_lat=office_lat,
center_lng=office_lng,
max_distance_km=5.0, # ~30 dk araba
db=db,
criteria=SearchCriteria(city="istanbul", category="kiralik-daire")
)
# Her ilan için seyahat süresi hesapla
for prop in nearby[:20]:
travel = maps.get_travel_time(
origin=(office_lat, office_lng),
destination=(prop.latitude, prop.longitude),
mode='driving'
)
print(f"{prop.title}")
print(f" Süre: {travel['duration_text']}")
print(f" Fiyat: {prop.price_text}")
Senaryo 2: Bölgesel Fiyat Analizi
# Belirli bir bölgedeki tüm ilanları haritala
criteria = SearchCriteria(
city="istanbul",
category="satilik-daire",
min_price=2000000,
max_price=5000000
)
properties = db.search_properties(criteria, limit=500)
# Koordinat eksik olanları geocode et
maps = GoogleMapsIntegration()
for prop in properties:
if not prop.latitude or not prop.longitude:
enriched = maps.enrich_property_location(prop)
db.save_property(enriched)
# Haritayı oluştur
maps.create_property_map(properties, "istanbul_2-5m.html")
Limitler ve Maliyetler
Google Maps API ücretsiz kotası:
- Geocoding API: 40,000 istek/ay ücretsiz
- Distance Matrix: 40,000 element/ay ücretsiz
- Maps JavaScript: Sınırsız harita yüklemeleri
💡 İpucu: Batch geocoding yaparken limit parametresi kullanarak API kotanızı koruyun:
python emlak_cli.py geocode --limit 50 # Günde 50 ilan
Sorun Giderme
API Anahtarı Hatası:
ValueError: Google Maps API anahtarı bulunamadı
Çözüm: .env dosyasına GOOGLE_MAPS_API_KEY ekleyin veya shell ortamına tanımlayın.
Geocoding Başarısız:
❌ Koordinat bulunamadı: xyz mahallesi
Çözüm: Adres bilgisi eksik veya yanlış. Manuel koordinat ekleyebilirsiniz.
Harita Görünmüyor:
- HTML dosyasını modern bir tarayıcıda açın (Chrome, Firefox, Safari)
- JavaScript'in etkin olduğundan emin olun
- Folium kütüphanesinin yüklü olduğunu kontrol edin:
pip install folium
📞 Destek
- GitHub Issues: Sorun bildirin
- Dokümantasyon: README.md ve kod içi dokümantasyon
- Örnekler:
emlak_cli.py --help - MCP Server: Claude Desktop ile entegrasyon
🛠️ Teknoloji Stack
Backend
- Python 3.8+: Ana programlama dili
- BeautifulSoup4: Web scraping
- SQLite: Veritabanı
- Flask: Web framework
Veri İşleme
- Pandas (opsiyonel): Veri analizi
- NumPy (opsiyonel): Sayısal işlemler
- Scikit-learn (opsiyonel): Makine öğrenimi
Görselleştirme
- Matplotlib: Grafik oluşturma
- Folium: İnteraktif haritalar
Entegrasyon
- MCP (Model Context Protocol): Claude AI entegrasyonu
- Google Maps API: Geocoding ve konum servisleri
- SMTP: Email bildirimleri
Export & Raporlama
- openpyxl: Excel export
- CSV/JSON: Veri formatları
📊 Proje İstatistikleri
- Toplam Kod: ~6,500+ satır Python
- Modüller: 15 ana modül
- CLI Komutları: 16 komut
- MCP Tools: 13 tool
- API Endpoints: 10+ endpoint
- Veritabanı Tabloları: 5 tablo
- Desteklenen Formatlar: JSON, CSV, Excel, HTML
- Versiyon: 2.2.0 (Production Ready)
📜 Lisans
Bu proje MIT lisansı altında lisanslanmıştır.
🙏 Teşekkürler
- Sahibinden.com - Veri kaynağı
- Google Maps Platform - Konum servisleri
- Anthropic Claude - MCP entegrasyonu
- Açık kaynak topluluğu - Kullanılan tüm kütüphaneler için
⭐ Bu projeyi faydalı bulduysanız, yıldız vermeyi unutmayın!
Geliştirici: Mahir Kurt Versiyon: 2.2.0 Son Güncelleme: 2025-02-21
