Metehan Şenyer

VLR.GG Unofficial API

VLR.GG Unofficial API banner

VLR.GG Unofficial API

VLR.GG'den Valorant espor verilerini kazıyıp sunan modern, talep üzerine çalışan bir RESTful API.
GitHub Workflow Status GitHub stars License Python Version

Bu proje; maçlar, haberler, takımlar, oyuncular ve etkinlikler için yapılandırılmış JSON verileri sağlayarak geliştiricilerin kazıma zahmetine girmeden Valorant verileri üzerinde kendi uygulamalarını kolayca oluşturabilmelerini sağlar.

✨ Özellikler

  • Talep Üzerine Kazıma: Veriler, bir API isteği yapıldığında vlr.gg'den gerçek zamanlı olarak çekilir.
  • Modern Teknoloji Yığını: Sağlam ve verimli bir API için Python, FastAPI ve Pydantic ile geliştirildi.
  • Kapsamlı Endpoint'ler: Maç sonuçlarından oyuncu istatistiklerine kadar geniş bir veri yelpazesine erişin.
  • Asenkron Mimari: Engellenmeyen I/O işlemleri için httpx ve asyncio kullanır.
  • Kolay Dağıtım: Vercel gibi sunucusuz platformlarda sorunsuz dağıtım için tasarlandı.
  • Test Edilmiş: Güvenilirliği sağlamak için pytest kullanan bir test paketi ile birlikte gelir.

🚀 Teknoloji Yığını

  • Backend: Python 3.12+
  • Framework: FastAPI
  • HTTP İstemcisi: httpx
  • HTML Ayrıştırma: selectolax
  • Test: pytest, pytest-asyncio, respx
  • Linting/Formatlama: ruff
  • Tip Kontrolü: mypy

API Endpoint'leri

Tüm endpoint'ler için temel URL /api'dir.

EndpointMetotAçıklama
/healthGETSağlık kontrolü endpoint'i.
/newsGETEn son haber makalelerini getirir.
/matchesGETYaklaşan, canlı ve tamamlanmış maçları getirir.
/matches/{match_id}GETBelirli bir maçın detaylarını getirir.
/eventsGETEtkinlik listesini getirir.
/events/{event_id}GETBelirli bir etkinliğin detaylarını getirir.
/player/{player_id}GETBelirli bir oyuncunun detaylarını getirir.
/searchGETOyuncuları ve takımları arar.

Sorgu parametreleri ve yanıt modelleri hakkında detaylı bilgi için lütfen /docs adresinde sunulan Dokümantasyon'a bakın.

📦 Kurulum

  1. Depoyu klonlayın:

    git clone https://github.com/metehansenyer/vlrgg-api.git
    cd vlrgg-api
    
  2. Sanal ortam oluşturun ve etkinleştirin:

    python3 -m venv venv
    source venv/bin/activate  # Windows'ta `venv\Scripts\activate` kullanın
    
  3. Bağımlılıkları yükleyin:

    # Üretim (yalnızca çalışma zamanı)
    pip install -r requirements.txt
    
    # Geliştirme (lint, tip kontrolü, testler)
    pip install -r requirements.txt -r requirements-dev.txt
    
  4. Ortam değişkenlerini yapılandırın:

    cp .env.example .env
    # .env dosyasını tercih ettiğiniz ayarlarla düzenleyin
    

🔧 Ortam Değişkenleri

Bu proje yapılandırma için .env dosyalarını kullanır. Tüm mevcut seçenekler için .env.example dosyasına bakın.

DeğişkenAçıklamaVarsayılan Değer
API_TITLEAPI'nin başlığıVLR.GG API
API_DESCRIPTIONAPI açıklama metniValorant esports data API scraped from vlr.gg
API_VERSIONAPI sürümü1.0.0
API_DEVELOPMENTLog seviyesi için1.0.0
HOSTSunucu adresi0.0.0.0
PORTSunucu portu8000
DEBUGHata ayıklama modunu etkinleştirFalse
VLR_BASE_URLVLR.GG için temel URLhttps://www.vlr.gg
HTTP_TIMEOUTHTTP istekleri için zaman aşımı (saniye)10
REQUEST_MIN_DELAYGiden istekler arasındaki minimum gecikme (saniye)0.5
REQUEST_MAX_DELAYGiden istekler arasındaki maksimum gecikme (saniye)2.0
MAX_CONCURRENT_REQUESTSMaksimum eşzamanlı giden HTTP isteği2
USER_AGENTKazıma için User-Agent başlığı.env.example dosyasına bakın
ACCEPTAccept başlığıtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
ACCEPT_LANGUAGEAccept-Language başlığıen-US,en;q=0.5
DEFAULT_NEWS_COUNTDöndürülecek varsayılan haber sayısı10
MAX_NEWS_COUNTDöndürülebilecek maksimum haber sayısı50
SEARCH_NEWS_PAGE_LIMITHaber endpoint'inde aranacak maksimum sayfa10
DEFAULT_MATCHES_COUNTVarsayılan maç sayısı10
MAX_MATCHES_COUNTMaksimum maç sayısı50
DEFAULT_PLAYER_MATCHES_COUNTVarsayılan oyuncu maç sayısı10
MAX_PLAYER_MATCHES_COUNTMaksimum oyuncu maç sayısı50
DEFAULT_EVENTS_COUNTVarsayılan etkinlik sayısı10
MAX_EVENTS_COUNTMaksimum etkinlik sayısı50
API_RATE_LIMIT_PER_MINUTEGelen API hız sınırı (IP başına dakikada)60
CORS_ALLOW_ORIGINSCORS için izin verilen kaynaklar (virgülle ayrılmış)*
CORS_ALLOW_METHODSİzin verilen HTTP metotları (virgülle ayrılmış)GET
CORS_ALLOW_HEADERSİzin verilen başlıklar (virgülle ayrılmış)*
TRUST_PROXYİstemci IP'si için X-Forwarded-For'a güvenFalse
RESPECT_ROBOTSGiden istekler için robots.txt'ye uyTrue
ROBOTS_TTL_SECONDSrobots.txt önbellek TTL'si86400
STATIC_CACHE_SECONDSStatik varlıklar için önbellek TTL'si86400
DOCS_CACHE_SECONDSDokümantasyon HTML'i için önbellek TTL'si300
USE_SHARED_HTTP_SESSIONPaylaşılan HTTP oturumuFalse

🏃‍♂️ Yerel Olarak Çalıştırma

Yerel geliştirme sunucusunu başlatmak için şunu çalıştırın:

uvicorn main:app --reload

API http://127.0.0.1:8000 adresinde kullanılabilir olacaktır.

  • Ana Sayfa: http://127.0.0.1:8000
  • Dokümantasyon: http://127.0.0.1:8000/docs

✅ Test

Bu proje test için pytest kullanır. Test paketini çalıştırmak için:

pytest

🚀 Dağıtım

Bu API, Vercel gibi sunucusuz platformlarda kolayca dağıtılmak üzere tasarlanmıştır. Depodaki vercel.json dosyası bu amaç için yapılandırılmıştır.

  1. Kodunuzu bir GitHub deposuna gönderin.
  2. Vercel'de yeni bir proje oluşturun ve GitHub deponuza bağlayın.
  3. Vercel, FastAPI uygulamasını otomatik olarak algılayacak ve dağıtacaktır.

🤝 Katkıda Bulunma

Katkılarınızı bekliyoruz! Herhangi bir öneriniz varsa veya bir hata bulursanız lütfen bir pull request göndermekten veya bir issue açmaktan çekinmeyin.

  1. Depoyu fork'layın.
  2. Özellik dalınızı oluşturun (git checkout -b feature/HarikaOzellik).
  3. Değişikliklerinizi commit'leyin (git commit -m 'Harika bir özellik ekle').
  4. Dalı gönderin (git push origin feature/HarikaOzellik).
  5. Bir pull request açın.

🌐 Uluslararasılaştırma

  • Site İngilizce ve Türkçe'yi destekler. Üst navigasyondaki dil değiştiriciyi kullanın (EN | TR).
  • Yeni bir dil eklemek için static/i18n/{lang}.json konumuna bir dosya bırakın.
  • Seçilen dil localStorage'da saklanır ve <html> etiketindeki lang özniteliği aracılığıyla yansıtılır.

⚖️ Sorumluluk Reddi

Bu proje vlr.gg'den veri kazır ve vlr.gg veya Riot Games ile bağlantılı değildir ya da onlar tarafından onaylanmamıştır. Lütfen bu API'yi sorumlu bir şekilde kullanın ve orijinal web sitesinin hizmet şartlarına saygı gösterin. Sağlanan veriler yalnızca eğitim ve kişisel kullanım içindir.

📄 Lisans

Bu proje Apache Lisansı, Sürüm 2.0 altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.

GitHub'da Görüntüle