TEKNİK YAZI / API Tasarımı ve Entegrasyonlar

Google Search API ile Kendi Arama Motorunu Yap

Google Custom Search JSON API'nin mevcut müşteriler için kullanımını, anahtar güvenliğini, kota sınırlarını ve 2027 kapanış planını inceleyin.

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:

  1. Google Cloud Console sayfasına gidiyoruz. Eğer hiç proje yoksa yeni bir tane oluşturuyoruz, varsa da mevcut birini seçebiliriz.

  2. Sol menüden API’ler kısmını bulup Custom Search API’yi etkinleştiriyoruz.

  3. 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:

  1. Programmable Search Engine sayfasına gidiyoruz.

  2. 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.
  3. 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:

Ö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:

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.