Skip to content

Instantly share code, notes, and snippets.

@erenmustafaozdal
Last active June 26, 2023 19:04
Show Gist options
  • Save erenmustafaozdal/017b6f63d0f1e105043703505370670a to your computer and use it in GitHub Desktop.
Save erenmustafaozdal/017b6f63d0f1e105043703505370670a to your computer and use it in GitHub Desktop.
Belirtilen sorgu, dil ve sonuç sayısı parametrelerine göre, Google'da arama yapan ve sonuçları döndüren fonksiyon. Tek sorgu için en fazla 100 adet sonuç döndürülebilir. `GOOGLE_API_KEY` ve `GOOGLE_CUSTOM_SEARCH_ID` "Guide" sayfasında belirtilen şekilde alınmalıdır. ❗ Günde 100 sorgu ücretsizdir.
import os
from time import sleep
import logging
# Doc: https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list
# Guide: https://developers.google.com/custom-search/v1/overview
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
logger = logging.getLogger(__name__)
# Google API anahtarınızı ve Özel Arama Kimliğinizi çevre değişkenlerinden alın
API_KEY = os.getenv("GOOGLE_API_KEY")
CSE_ID = os.getenv("GOOGLE_CUSTOM_SEARCH_ID")
def search(query, **kwargs) -> list:
"""
Belirtilen sorguyla Google'da arama yapar ve sonuçları döndürür.
Args:
query (str): Arama sorgusu.
Kwargs:
lr (str): Arama sonuçlarının dilini belirtir. (lang_tr)
fileType (str): Belirli dosya türlerini hariç tutun (ör. "-pdf -xlsx -doc")
siteSearch (str): Aramanın belirli web siteleriyle sınırlanması (ör. "ornek.com")
siteSearchFilter (str): siteSearch değeri ekleme mi çıkarma mı? (ör. "e" veya "i")
Returns:
list: Arama sonuçlarını içeren liste.
"""
# Google API servisini yapılandır
service = build("customsearch", "v1", developerKey=API_KEY, cache_discovery=False)
# Arama parametrelerini tanımlayın
kwargs = kwargs | {
"q": query, # Arama sorgusu
"cx": CSE_ID, # Özel Arama Motoru Kimliği
"num": 10, # Sayfa başına sonuç sayısı
"start": 1, # Sıradaki sonuç setinin başlangıç indeksi
}
logger.info(f"Google araması yapılıyor: {query}")
results = [] # Sonuçları depolamak için boş bir liste oluştur
# Belirtilen sonuç sayısına ulaşana kadar döngüyü çalıştır
while True:
# Google Custom Search API'sini kullanarak arama yap
try:
res = service.cse().list(**kwargs).execute()
except HttpError as e:
if e.resp.status == 429 and "rateLimitExceeded" in e.content:
logger.warning("İstek limiti aşıldı. 1 dakika sonra tekrar denenecek.")
sleep(60) # 1 dakika bekleyin
continue
else:
# Diğer hataları burada yönetebilirsiniz
raise e
results.extend(res.get("items", [])) # Sonuçları listeye ekle
# Sıradaki sonuç setinin başlangıç indeksi
next_page = res.get("queries", {}).get("nextPage", {})
if not next_page:
break
kwargs["start"] = next_page[0].get("startIndex")
return results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment