Her gün yüzlerce web sitesini gezmek, sosyal medya akışında kaybolmak ve “önemli” bilgiyi aramakla ne kadar zaman kaybediyorsunuz? Dijital dünyada bilgiye ulaşmak kolay, ancak doğru bilgiyi süzmek zor. İşte tam bu noktada Yapay Zeka Otomasyonu devreye giriyor.
Bu rehberde, tek bir kuruş ödemeden, Google Sheets ve Google’ın en yeni yapay zeka modeli Gemini’yi kullanarak çalışan, size özel bir “sektörel trend radarı” kuracağız. Üstelik bu sistem stabil çalışır, sunucu gerektirmez ve tamamen sizin kontrolünüzdedir.
Sistemin Çalışma Mantığı
Bu otomasyon üç ana adımdan oluşur. Arka planda işleyen süreci şöyle özetleyebiliriz:
- 1. Adım: Kaynak Toplama (Gemini Deep Research): İlk etapta ilgi alanlarınıza en uygun ve güvenilir kaynaklar yapay zeka desteğiyle belirlenir.
- 2. Adım: Veri Havuzu (Google Sheets): Belirlenen kaynaklardan gelen haberler, belirli aralıklarla otomatik olarak Google E-Tablolar’a çekilir ve depolanır.
- 3. Adım: Akıllı Analiz ve Raporlama (Apps Script & Gemini): Biriken haberler haftalık olarak yapay zeka tarafından analiz edilir, özetlenir, görselleriyle birlikte şık bir HTML e-posta bültenine dönüştürülür.
1. Adım: Kaynakların Derlenmesi
İyi bir bülten, kaliteli kaynaklarla başlar. Burada Gemini’nin derinlemesine araştırma (Deep Research) yeteneklerinden faydalanacağız.
1.1. Deep Research ile Kaynak Keşfi
Gemini‘ye giderek Ayarlar kısmından “Deep Research” seçeneğini seçin. Aşağıdaki komutun (prompt) en altında bulunan 3 satırı kendinize göre özelleştirin ve sektörünüzdeki en iyi kaynakları listeletin. Bu işlem bir miktar uzun sürecektir. Sonrasında Gemini tarafından oluşturulan bu kaynakları düzenleyebilir isteğinize göre yeni kaynaklar ekleyebilir ya da çıkartabilirsiniz.
Aşağıdaki [DEĞİŞKENLER] bölümünde yer alan verileri analiz et ve bu parametrelere göre Deep Research (Derin Araştırma) modunu başlat.
GÖREV: Tanımlanan [MESLEK] perspektifiyle, belirtilen [İLGİ ALANLARI] hakkında yayın yapan, küresel ölçekte en yetkin kaynakları bul ve [ADET] sayısınca listele.
FİLTRELEME VE KALİTE KRİTERLERİ (Kesin Kurallar):
Sıfır Çöp İçerik: SEO amaçlı kurulmuş "içerik tarlalarını", otomatik çeviri yapan siteleri, sadece yüzeysel haber geçen "aggregator"ları ve clickbait (tık tuzağı) odaklı blogları kesinlikle listeye alma.
Otorite: Sadece "Domain Authority" puanı yüksek, sektör profesyonelleri tarafından referans gösterilen, akademik veya teknik derinliği olan kaynakları seç.
Güncellik: Kaynakların son 1 yıl içinde aktif veri/içerik girişi yapmış olması zorunludur.
Hedefleme: Genel haber sitelerini (CNN, BBC vb.) değil; doğrudan ilgili niş alana odaklanmış dikey uzmanlık sitelerini bul.
ÇIKTI FORMATI: Sonuçları aşağıdaki başlıklarla bir tablo veya liste halinde sun:
Web Sitesi Adı ve URL:
Kategori/Tür: (Örn: Akademik Dergi, Sektörel Rapor, Teknik Blog)
Otorite Gerekçesi: (Neden bu listeye girdi? Örn: "Dünyanın en büyük X veri tabanıdır" veya "Yıllık Z raporunu yayınlar")
[DEĞİŞKENLER]
Meslek: Art Direktör
İlgi Alanları: Grafik Tasarım, Yapay Zeka , Tipografi
Web Site Adedi: 10
1.2. RSS Linklerinin Toplanması
Otomasyonun haberleri “okuyabilmesi” için RSS beslemelerine ihtiyacımız var. Gemini’nin bulduğu listeyi kopyalayın ve bu sefer “Pro” veya “Hızlı” seçeneğini seçerek şu komutu verin:
Aşağıdaki web sitesi listesinin RSS Feed (Besleme) linklerini bul. Eğer doğrudan bir RSS linki yoksa, haber akışını çekebileceğim en olası URL yapılarını ver.
Artık güncel haberleri takip edeceğimiz web sitelerinin RSS linkleri hazır oldu.
2. Adım: Google Sheets Kurulumu
Şimdi sistemin kalbini, yani veritabanını oluşturuyoruz.
2.1. Sayfaların Oluşturulması
- Google Sheets‘e giderek yeni bir e-tablo oluşturun. İsmini Sektörel Trend Raporu yapabilirsiniz.
- Alt kısımdan bir sayfa daha oluşturun ve sayfa isimlerini aşağıdaki gibi değiştirin (Sistemin çalışması için isimleri birebir aşağıdaki gibi yapmalısınız):
- 1. Sayfa Adı:
Ayarlar - 2. Sayfa Adı:
Veriler
- 1. Sayfa Adı:
- Ayarlar sayfasına gidin ve A sütununa, 1. adımda bulduğunuz RSS linklerini alt alta yapıştırın .
2.2. Google AI Studio’dan API Alınması
Yapay zekayı otomasyonu ile Gemini’nin rapor hazırlayabilmesi için bir anahtara ihtiyacımız var:
- Google AI Studio adresine gidin.
- “Create API Key” butonuna tıklayın.
- Anahtarınıza herhangi bir isim verin (Choose an imported project kısmını default bırakabilirsiniz) ve Create butonuna tıklayın.
- Oluşturduğunuz anahtarı kopyalayın ve bir kenara not edin.
2.3. Kodun Entegrasyonu
Şimdi tekrar Google Sheets’teki tablomuza dönüyoruz ve sistemi çalıştıracak kodları ekliyoruz.
- E-Tablonuzda üst menüden Uzantılar > Apps Script seçeneğine tıklayın.
- Açılan sayfadaki kodların tamamını silin.
- Aşağıdaki Kaynak Kod bloğunu kopyalayıp oraya yapıştırın.
- Kodun en başındaki
AYARLAR PANELİkısmında bulunanGEMINI_API_KEY,MAIL_ADRESIve diğer kişisel bilgileri kendi bilgilerinizle değiştirmeyi unutmayın. - Kodları düzenledikten sonra üst kısımdaki disket simgesine tıklayarak dosyayı kaydedin.
/** * ==========================================
* AYARLAR PANELİ (Sadece Burayı Düzenleyin)
* ==========================================
*/
const GEMINI_API_KEY = "GEMINI_API_KEY_BURAYA"; // API anahtarın
const MAIL_ADRESI = "MAIL_ADRESI_BURAYA"; // Bültenin gönderileceği mail adresi
const AD_SOYAD = "Samet Köseoğlu"; // Size nasıl hitap etmeli?
const RAPOR_BASLIGI = "HAFTALIK TREND RAPORU"; // Bültenin başlığı
const RENK = "#000000"; // Buton ve Header rengi
const LOGO_URL = "https://www.sametkoseoglu.com/wp-content/uploads/2024/03/favicon.png"; // Logonuzun linki
const AI_KISILIGI = "Art Direktör"; // Mesleğiniz (Yapay zeka içeriği mesleğinize göre analiz edecek.)
const KONULAR = "Grafik Tasarım, Yapay Zeka, Sanat ve Kreatif Strateji"; // Yapay zekanın odaklanmasını istediğiniz konular
/** * ==========================================
* SİSTEMİN ÇALIŞMA KODU (Dokunmayınız)
* ==========================================
*/
function anaSistem() {
haberleriTopla();
eskiHaberleriTemizle();
raporuOlusturVeGonder();
}
function haberleriTopla() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ayarlarSayfasi = ss.getSheetByName("Ayarlar");
const verilerSayfasi = ss.getSheetByName("Veriler");
const kaynaklar = ayarlarSayfasi.getRange("A:A").getValues();
const media = XmlService.getNamespace('media', 'http://search.yahoo.com/mrss/');
kaynaklar.forEach(satir => {
const url = satir[0];
if (url && url.startsWith("http")) {
try {
const xml = UrlFetchApp.fetch(url).getContentText();
const document = XmlService.parse(xml);
const channel = document.getRootElement().getChild('channel');
const haberler = channel.getChildren('item');
const kaynakAdi = channel.getChildText('title') || url;
// SİTE LOGOSUNU BUL (Kanal bazlı logo)
let siteLogosu = "";
let channelImage = channel.getChild('image');
if (channelImage) {
siteLogosu = channelImage.getChildText('url');
}
haberler.slice(0, 5).forEach(haber => {
const baslik = haber.getChildText('title');
const link = haber.getChildText('link');
// HABER GÖRSELİNİ BUL
let gorselUrl = "";
let enclosure = haber.getChild('enclosure');
if (enclosure) gorselUrl = enclosure.getAttribute('url').getValue();
if (!gorselUrl) {
let mediaContent = haber.getChild('content', media) || haber.getChild('thumbnail', media);
if (mediaContent) gorselUrl = mediaContent.getAttribute('url').getValue();
}
// EĞER HABER GÖRSELİ YOKSA SİTE LOGOSUNU KOY
const finalGorsel = gorselUrl || siteLogosu;
verilerSayfasi.appendRow([new Date(), baslik, link, finalGorsel, kaynakAdi]);
});
} catch(e) { console.log("Kaynak Hatası: " + url); }
}
});
}
function eskiHaberleriTemizle() {
const verilerSayfasi = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Veriler");
const veriler = verilerSayfasi.getDataRange().getValues();
const bugun = new Date();
for (let i = veriler.length - 1; i >= 1; i--) {
const haberTarihi = new Date(veriler[i][0]);
if ((bugun - haberTarihi) / (1000 * 60 * 60 * 24) > 7) verilerSayfasi.deleteRow(i + 1);
}
}
function getTurkishDate() {
const months = ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"];
const now = new Date();
return now.getDate() + " " + months[now.getMonth()] + " " + now.getFullYear();
}
function raporuOlusturVeGonder() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const verilerSayfasi = ss.getSheetByName("Veriler");
const ayarlarSayfasi = ss.getSheetByName("Ayarlar");
if (verilerSayfasi.getLastRow() < 2) return;
// İstatistikler için sayım
const kaynakSayisi = ayarlarSayfasi.getLastRow();
const toplamHaberSayisi = verilerSayfasi.getLastRow();
const tumHaberler = verilerSayfasi.getRange(2, 2, verilerSayfasi.getLastRow() - 1, 4).getValues();
const haberMetni = tumHaberler.map(h => `Başlık: ${h[0]} | Link: ${h[1]} | Görsel: ${h[2]} | Kaynak: ${h[3]}`).join("\n");
const tamPrompt = `
Sen dünyaca ünlü, eleştirel bir gözü olan vizyoner bir ${AI_KISILIGI}'sün. [GÖREVİN: Aşağıdaki haberlerden bir haftalık panorama çıkar.]
GENEL DEĞERLENDİRME KURALLARI:
- Giriş metninde klişelerden (dinamik değişim, hızla gelişen teknoloji vb.) kaçın.
- Haberler arasındaki korelasyonu bul ve stratejik bir çıkarım yap.
- Okuyucuya "bu hafta şuna dikkat etmelisiniz" dedirtecek bir öngörü sun.
- Sadece JSON döndür.
STRATEJİK ODAK: ${KONULAR} ;
ÇIKTI FORMATI (JSON):
{
"genel_degerlendirme": "...",
"haberler": [
{"baslik": "...", "kategori": "...", "kaynak": "...", "ozet": "...", "link": "...", "gorsel": "..."}
]
}
Veriler:
${haberMetni}
`;
const payload = { "contents": [{ "parts": [{ "text": tamPrompt }] }] };
const options = { "method": "post", "contentType": "application/json", "payload": JSON.stringify(payload), "muteHttpExceptions": true };
const url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=" + GEMINI_API_KEY;
const res = UrlFetchApp.fetch(url, options);
let aiResponse = JSON.parse(res.getContentText()).candidates[0].content.parts[0].text;
// JSON bloğunu ayıkla
let start = aiResponse.indexOf('{');
let end = aiResponse.lastIndexOf('}');
if (start !== -1 && end !== -1) aiResponse = aiResponse.substring(start, end + 1);
aiResponse = aiResponse.replace(/[\u0000-\u001F\u007F-\u009F]/g, " ");
const raporData = JSON.parse(aiResponse);
let haberlerHtml = "";
raporData.haberler.forEach(h => {
const gorselContent = h.gorsel ? `<img src="${h.gorsel}" style="width: 100%; height: 100%; object-fit: cover;">` : `<div style="width: 100%; height: 100%; background-color: #bbbbbb;"></div>`;
haberlerHtml += `
<div style="margin-bottom: 40px; display: table; width: 100%;">
<div style="display: table-cell; width: 140px; vertical-align: top;">
<div style="width: 140px; height: 140px; border-radius: 12px; overflow: hidden; background-color: #eee;">
${gorselContent}
</div>
</div>
<div style="display: table-cell; padding-left: 25px; vertical-align: top;">
<h3 style="color: #000000; font-size: 19px; margin: 0 0 4px 0; font-weight: 700; line-height: 1.3;">${h.baslik}</h3>
<div style="font-size: 12px; color: #999; margin-bottom: 10px;">${h.kategori} | ${h.kaynak}</div>
<p style="font-size: 14px; line-height: 1.5; color: #555; margin-bottom: 15px;">${h.ozet}</p>
<a href="${h.link}" style="display: inline-block; padding: 8px 24px; background-color: ${RENK}; color: white; text-decoration: none; border-radius: 6px; font-size: 12px; font-weight: bold; text-transform: uppercase;">İNCELE</a>
</div>
</div>
`;
});
const turkceTarih = getTurkishDate();
const htmlBody = `
<html>
<body style="font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 20px;">
<div style="max-width: 600px; margin: auto; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.05);">
<div style="background-color: ${RENK}; padding: 40px 30px; text-align: center; color: white;">
<img src="${LOGO_URL}" style="width: 55px; margin-bottom: 15px;">
<h1 style="margin: 0; font-size: 24px; letter-spacing: 1px; font-weight: 800;">${RAPOR_BASLIGI}</h1>
<div style="font-size: 13px; opacity: 0.8; margin-top: 10px;">${turkceTarih} | ${KONULAR}</div>
<div style="font-size: 11px; opacity: 0.7; margin-top: 8px;">
Bu bülten ${kaynakSayisi} adet kaynaktan elde edilen derlenen ${toplamHaberSayisi} haber incelenerek hazırlanmıştır.
</div>
</div>
<div style="padding: 40px 35px;">
<div style="background: #f8f9fa; padding: 30px; border-radius: 12px; border-left: 5px solid ${RENK}; margin-bottom: 50px;">
<p style="margin: 0 0 10px 0; color: #333; font-weight: bold; font-size: 16px;">Merhaba ${AD_SOYAD},</p>
<p style="margin: 0; color: #444; font-size: 15px; font-style: italic; line-height: 1.7;">"${raporData.genel_degerlendirme}"</p>
</div>
${haberlerHtml}
</div>
<div style="background: #ffffff; padding: 30px; text-align: center; font-size: 11px; color: #999; border-top: 1px solid #eee;">
© 2026 Bu rapor ${AD_SOYAD} için özel olarak Gemini 2.5 Flash tarafından küratize edilmiştir.
</div>
</div>
</body>
</html>
`;
MailApp.sendEmail({ to: MAIL_ADRESI, subject: `${RAPOR_BASLIGI}: ${turkceTarih}`, htmlBody: htmlBody });
}
3. Adım: Zamanlayıcı (Trigger) Kurulumu
Şu an aslında sistemimiz hazır. Biraz önce yapıştırdığımız kod bloğu içerisinde 3 tane komut var. Şimdi bunları test edelim:

- App Script sayfasındaki üst kısımdan(Görsel 1.1) “
haberleriTopla“ komutunu seçin ve çalıştır butonuna tıklayın. Nihayet e-tablonuzdaki Veriler sayfasında haber verilerinin toplanmaya başladığını göreceksiniz. İşlem bitince alt kısımda “Bildirim Yürütme işlemi tamamlandı” yazısını göreceksiniz. - Ardından “
raporuOlusturVeGonder“ komutunu seçerek tekrar çalıştır butonuna basın. İşlem bitip de “Bildirim Yürütme işlemi tamamlandı” yazısını gördüğünüzde bülteninizin birkaç dakika içinde mailinize ulaşacaktır. - “
eskiHaberleriTemizle“ komutu 1 haftadan eski haberleri silerek tablomuzun şişmesini engelleyecek. Fakat kurulumu yeni yaptığımız için bu komutu şu an test etmemiz mümkün değil.
Testimizi yaptıktan sonra komutlarımızın tümüyle çalıştığına emin olsak da kendi kendine çalışmaları için “Tetikleyicileri” ayarlamamız gerekiyor. Bu adımda, her bir görevi ayrı ayrı zamanlayacağız.
Apps Script ekranında sol taraftaki Saat Simgesine (Tetikleyiciler) tıklayın ve sağ alttaki “Tetikleyici Ekle” butonu ile aşağıdaki 3 farklı görevi tanımlayın:
3.1. Görev: Haberlerin Toplanması
Güncel haberlerin tümünü eksiksiz toplayabilmemiz için bu ayarı 3 kez tekrarlayın (Salı, Perşembe ve Pazar için):
- Çalıştırılacak İşlev:
haberleriTopla - Etkinlik Kaynağı: Zaman Odaklı
- Tetikleyici Türü: Haftalık Zamanlayıcı
- Gün ve Saat:
- Tetikleyici: Salı – 13:00 – 14:00
- Tetikleyici: Perşembe – 13:00 – 14:00
- Tetikleyici: Pazar – 23:00 – 00:00
3.2. Görev: Veri Temizliği (Hafıza Yönetimi)
E-Tablonuzun şişmemesi ve sadece güncel kalması için eski haberleri silmeliyiz.
- Çalıştırılacak İşlev:
eskiHaberleriTemizle - Etkinlik Kaynağı: Zaman Odaklı
- Tetikleyici Türü: Haftalık Zamanlayıcı
- Gün ve Saat: Pazartesi – 03:00 – 04:00
3.3. Görev: Raporun Hazırlanması ve Gönderimi
Ve final! Pazartesi sabahı işe başlamadan bülteniniz hazır olsun.
- Çalıştırılacak İşlev:
raporuOlusturVeGonder - Etkinlik Kaynağı: Zaman Odaklı
- Tetikleyici Türü: Haftalık Zamanlayıcı
- Gün ve Saat: Pazartesi – 08:00 – 09:00
Özet
Tetikleyicileri de ayarladıktan sonra artık Pazartesi günü bültenimizin hazırlanmasını beklemekten başka bir işimiz kalmadı. Kısaca özetlemek gerekirse, Salı 13.00, Perşembe 13.00 ve Pazar 23.00’da en başta belirlediğimiz web siteleri taranacak ve güncel haberler e-tablomuzda toplanacak. Yeni rapor oluşmadan önce Pazartesi 03.00’da 1 haftadan eski haberler silinecek. Pazartesi 08.00’da ise Gemini sizin için bu haberleri inceleyerek haftalık analiz ve önemli haberlerden oluşan bir bülteni mail olarak size ulaştıracak.
Sonuç: Artık Kişisel Bir Haber Merkeziniz Var!
Tebrikler! Artık her pazartesi sabahı, Gemini 2.5 tarafından sizin için özel olarak hazırlanmış, görselleştirilmiş ve stratejik analizi yapılmış haber bülteniniz e-posta kutunuzda olacak. Bu yapay zeka otomasyonu sayesinde hem zamandan tasarruf edecek hem de sektörünüzdeki gelişmeleri profesyonel bir gözle takip edebileceksiniz.
Konuyla bağlantılı olarak Yapay Zeka Tasarım Araçları: Yaratıcılığın Yeni Sınırları yazısını okumanızı öneririm.