Google Custom Search JSON API, yapılandırılmış bir Programmable Search Engine üzerinden arama sonuçlarını JSON olarak almaya yarar. Aşağıdaki örnekler mevcut müşterilerin entegrasyon mantığını gösterir; yeni bir proje için hizmetin güncel erişim ve kapanış durumunu önce kontrol etmek gerekir.
Güncel durum (2026): Google’ın resmi duyurusuna göre API yeni müşterilere kapalıdır ve mevcut müşterilerin 1 Ocak 2027’ye kadar alternatif bir çözüme geçmesi gerekir. Bu nedenle yazı yeni hesap açma rehberinden çok, mevcut entegrasyonu anlamak ve taşınma planı hazırlamak için kullanılmalıdır.
İlk Adım: Google Cloud Console
İlk iş Google Cloud Console’a girip işlerimizi halletmek. Biraz karışık görünebilir ama aslında çok basit:
-
Google Cloud Console sayfasına gidiyoruz. Eğer hiç proje yoksa yeni bir tane oluşturuyoruz, varsa da mevcut birini seçebiliriz.
-
Sol menüden API’ler kısmını bulup Custom Search API’yi etkinleştiriyoruz.
-
Kimlik bilgileri bölümünden API anahtarımızı alıyoruz. Bu anahtarı güvenli bir yerde saklayın - çünkü kodumuzda kullanacağız.
Arama Motoru Oluşturma
Şimdi eğlenceli kısım! Kendi arama motorumuzu yapacağız:
-
Programmable Search Engine sayfasına gidiyoruz.
-
Burada birkaç seçenek var:
- Sadece belirli sitelerde mi arama yapmak istiyorsunuz? O zaman o siteleri ekleyin.
- Tüm internet’te arama mı? “Tüm web’i ara” diyoruz o zaman.
- Dil seçimi yapıyoruz (Türkçe olabilir mesela).
- Arama motorumuza güzel bir isim veriyoruz.
-
Oluşturduktan sonra size bir cx kodu verecek. Bu kodu not alın - API isteklerinde bu lazım olacak!
Artık Aramaya Başlayalım!
Elinizdeki malzemeler: API anahtarı ✓, cx kodu ✓. Şimdi gerçek iş başlıyor!
Nasıl İstek Gönderiyoruz?
Temel format şu şekilde:
GET https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CX_KEY}&q={QUERY}
JavaScript ile Yapalım
Ben JavaScript ile başlamayı seviyorum, çünkü hızlıca test edebiliriz:
const API_KEY = "api-key";
const SEARCH_ENGINE_ID = "cx-key";
const SEARCH_QUERY = "learn js";
async function search_google(query) {
const url = `https://www.googleapis.com/customsearch/v1?key=${API_KEY}&cx=${SEARCH_ENGINE_ID}&q=${encodeURIComponent(query)}`;
try {
const response = await fetch(url);
const data = await response.json();
if (data.items) {
console.log("Search Results:");
data.items.forEach((item, index) => {
console.log(`${index + 1}. ${item.title}`);
console.log(` Link: ${item.link}`);
console.log(` Summary: ${item.snippet}`);
console.log("---");
});
} else {
console.log("Nothing to see... 😔");
}
} catch (error) {
console.error("Error:", error);
}
}
search_google(SEARCH_QUERY);
Python Seviyorsanız
Python da harika bir seçenek:
import requests
API_KEY = 'api-key'
SEARCH_ENGINE_ID = 'cx-key'
SEARCH_QUERY = 'learn python'
def search_google(query):
url = "https://www.googleapis.com/customsearch/v1"
params = {
'key': API_KEY,
'cx': SEARCH_ENGINE_ID,
'q': query
}
try:
response = requests.get(url, params=params)
data = response.json()
if 'items' in data:
print("Search Results:")
for i, item in enumerate(data['items'], 1):
print(f"{i}. {item['title']}")
print(f" Link: {item['link']}")
print(f" Summary: {item['snippet']}")
print("---")
else:
print("Nothing too see... 😔")
except Exception as e:
print(f"Error: {e}")
search_google(SEARCH_QUERY)
Daha Detayına İnelim
Temel aramayı yaptık ama API’nin daha fazla özelliği var. Şunlara bakabilirsiniz:
- num: Kaç sonuç istiyorsunuz? (En fazla 10)
- start: Sayfalama için hangi sonuçtan başlasın?
- lr: Sadece Türkçe sonuçlar mı?
lang_tryazın - safe: Güvenli arama aktif mi?
- fileType: Sadece PDF mi yoksa Word dosyası mı arıyorsunuz?
Örnek Gelişmiş Arama
// Sadece Türkçe, güvenli arama aktif, 5 sonuç
const gelismisUrl = `https://www.googleapis.com/customsearch/v1?key=${API_KEY}&cx=${SEARCH_ENGINE_ID}&q=${query}&num=5&lr=lang_tr&safe=medium`;
Bilmeniz Gerekenler
Tabii ki her şeyin bir sınırı var:
- Ücretsiz: Günde 100 arama hakkınız var
- Fazlası: 100’den fazla arama için para ödeyeceksiniz
- Sonuç limiti: Bir seferde en fazla 10 sonuç alabilirsiniz
Bu kotalar yalnızca mevcut müşteriler için geçerlidir ve kapanışa kadar değişebilir. Büyük bir uygulamada maliyet kadar 2027 öncesi geçiş takvimi de planlanmalıdır.
Sonuç
Mevcut bir Custom Search JSON API entegrasyonunda anahtarı istemciye açmayın, kota ve hata oranlarını izleyin ve sonuç bulunamamasıyla servis hatasını ayırın. En önemlisi, 2027 kapanış tarihinden önce arama kapsamınıza uygun alternatifi seçip davranış, maliyet ve sonuç kalitesini aynı sorgu setiyle karşılaştırın.