Last active
June 26, 2023 19:04
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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