Orange Head
Uzman
- Katılım
- 3 Ekim 2024
- Mesajlar
- 76
- Makaleler
- 1
- Beğeniler
- 141
Merhaba arkadaşlar,
Haber sitelerinin tık tuzağı (clickbait) başlıklarından ve "Kura ne zaman?" gibi soruların cevabını bulmak için destan gibi yazılar okumaktan sıkıldığım için Yapay Zekaya ufak bir Chrome eklentisi yazdırdım. Eklentiyi sizinle açık kaynak olarak paylaşacağım. İsteyen kendi de kullanabilir ya da daha iyi bir hale getirebilir.
KENDİ TARAYICINIZA EKLEME REHBERİ
ADIM 1:
Masaüstünde HaberBulucu adında bir klasör açın ve içine şu 3 dosyayı oluşturup kodları yapıştırın. Ardından Chrome'da Chrome://extensions/ adresine gidip sağ üstten "Geliştirici Modu"nu açın ve sol üstteki "Paketlenmemiş öge yükle" diyerek bu klasörü seçin.
ADIM 2:
Ardından Bedava Gemini API bağlantısına gidin ve "Create API key" butonuna basarak bir API oluşturun.
Gemini Flash 2.5 API'si olması gerekiyor.
API için hiçbir ücret ödemiyorsunuz
ADIM 3:
Herhangi bir sayfaya sağ tıklayın ve "Sonucu Bul" seçeneğine tıklayın. İlk defa yaptığınızda sizden API kodu isteyecek. Gemini'den aldığımız beleş API kodunu yapıştırın ve eklentinin keyfini çıkarın.
BİLMENİZ GEREKENLER
Haber sitelerinin tık tuzağı (clickbait) başlıklarından ve "Kura ne zaman?" gibi soruların cevabını bulmak için destan gibi yazılar okumaktan sıkıldığım için Yapay Zekaya ufak bir Chrome eklentisi yazdırdım. Eklentiyi sizinle açık kaynak olarak paylaşacağım. İsteyen kendi de kullanabilir ya da daha iyi bir hale getirebilir.
KENDİ TARAYICINIZA EKLEME REHBERİ
ADIM 1:
Masaüstünde HaberBulucu adında bir klasör açın ve içine şu 3 dosyayı oluşturup kodları yapıştırın. Ardından Chrome'da Chrome://extensions/ adresine gidip sağ üstten "Geliştirici Modu"nu açın ve sol üstteki "Paketlenmemiş öge yükle" diyerek bu klasörü seçin.
JSON
{
"Manifest_version": 3,
"Name": "Gemini Haber Sonucu",
"Version": "1.0",
"Description": "Haberlerdeki gizli cevabı bulur.",
"Permissions": ["contextMenus", "activeTab", "scripting", "storage"],
"Host_permissions": ["https://generativelanguage.googleapis.com/*"],
"Background": {
"Service_worker": "background.js"
}
}
{
"Manifest_version": 3,
"Name": "Gemini Haber Sonucu",
"Version": "1.0",
"Description": "Haberlerdeki gizli cevabı bulur.",
"Permissions": ["contextMenus", "activeTab", "scripting", "storage"],
"Host_permissions": ["https://generativelanguage.googleapis.com/*"],
"Background": {
"Service_worker": "background.js"
}
}
// Add button to right-Click menu
chrome.runtime.onInstalled.addListener(() => {
Chrome. ContextMenus. Create({
ID: "Gemini-sonucu-bul",
Title: "
Sonucu Bul",
Contexts: ["all"]
});
});
// Listen for the Click
Chrome. ContextMenus. OnClicked. AddListener((info, Tab) => {
İf (info. MenuItemId === "Gemini-sonucu-bul") {
Chrome. Scripting. ExecuteScript({
Target: { tabId: Tab. ID },
Files: ["content.js"]
});
}
});
chrome.runtime.onInstalled.addListener(() => {
Chrome. ContextMenus. Create({
ID: "Gemini-sonucu-bul",
Title: "
Contexts: ["all"]
});
});
// Listen for the Click
Chrome. ContextMenus. OnClicked. AddListener((info, Tab) => {
İf (info. MenuItemId === "Gemini-sonucu-bul") {
Chrome. Scripting. ExecuteScript({
Target: { tabId: Tab. ID },
Files: ["content.js"]
});
}
});
Chrome. Storage. Local. Get(['geminiApiKey'], function(result) {
Let apiKey = result. GeminiApiKey;
İf (!apiKey) {
ApiKey = prompt("Lütfen Gemini API anahtarınızı girin:");
İf (apiKey) {
Chrome. Storage. Local. Set({geminiApiKey: ApiKey});
} Else {
Return;
}
}
FindAnswer(apiKey);
});
Function findAnswer(apiKey) {
Let resultBox = document. GetElementById('Gemini-result-box');
İf (!resultBox) {
ResultBox = document. CreateElement('div');
ResultBox. ID = 'Gemini-result-box';
ResultBox. Style. CssText = 'position: Fixed; bottom: 20px; right: 20px; Z-index: 999999; padding: 15px; background:#333; color:#fff; border-radius: 8px; Max-width: 300px; box-Shadow: 0 4px 6px rgba(0, 0, 0,0.3);font-family: Sans-serif; font-size: 14px;';
Document. Body. AppendChild(resultBox);
ResultBox. AddEventListener('Click', () => resultBox.remove());
}
ResultBox. İnnerText = 'Okunuyor ve düşünülüyor...';
Let titleNode = document. QuerySelector('H1');
Let titleText = titleNode? TitleNode. İnnerText: Document. Title;
Let paragraphs = document. QuerySelectorAll('p');
Let bodyText = "";
Paragraphs. ForEach(p => { bodyText += p. İnnerText + "\n"; });
Let fullContent = "Başlık: " + titleText + "\n\nMetin: " + bodyText;
İf (fullContent. Length > 30000) {
FullContent = fullContent. Substring(0, 30000);
}
Const URL =
Const requestData = {
System_instruction: { parts: [{ text: "Sen bir sonuç bulucusun. Kullanıcı sana uzun bir haber metni verecek. Haberin başlığındaki asıl soruyu anla. Metin içinden bu sorunun cevabını bul. Eğer kesin bir bilgi yoksa, 'beklenen', 'planlanan' veya 'tahmin edilen' durumu cevap olarak kabul et (örneğin: 'Kesin tarih yok ama 1 Nisan'a kadar bitmesi bekleniyor'). Sadece sonucu çok kısa ve net şekilde söyle. Merhaba deme, uzun cümleler kurma." }] },
Contents: [{ parts: [{ text: fullContent }] }]
};
Fetch(URL, {
Method: "POST",
Headers: { "Content-Type": "application/json" },
Body: JSON. Stringify(requestData)
})
.Then(response => response.json())
.Then(data => {
İf (data. Candidates && data. Candidates. Length > 0) {
ResultBox. İnnerText = data. Candidates[0].content. Parts[0].text;
} Else if (data. Error) {
ResultBox. İnnerText = "Hata: " + data. Error. Message;
} Else {
ResultBox. İnnerText = "Cevap bulunamadı.";
}
})
.Catch(err => {
ResultBox. İnnerText = "Bağlantı hatası.";
});
}
Let apiKey = result. GeminiApiKey;
İf (!apiKey) {
ApiKey = prompt("Lütfen Gemini API anahtarınızı girin:");
İf (apiKey) {
Chrome. Storage. Local. Set({geminiApiKey: ApiKey});
} Else {
Return;
}
}
FindAnswer(apiKey);
});
Function findAnswer(apiKey) {
Let resultBox = document. GetElementById('Gemini-result-box');
İf (!resultBox) {
ResultBox = document. CreateElement('div');
ResultBox. ID = 'Gemini-result-box';
ResultBox. Style. CssText = 'position: Fixed; bottom: 20px; right: 20px; Z-index: 999999; padding: 15px; background:#333; color:#fff; border-radius: 8px; Max-width: 300px; box-Shadow: 0 4px 6px rgba(0, 0, 0,0.3);font-family: Sans-serif; font-size: 14px;';
Document. Body. AppendChild(resultBox);
ResultBox. AddEventListener('Click', () => resultBox.remove());
}
ResultBox. İnnerText = 'Okunuyor ve düşünülüyor...';
Let titleNode = document. QuerySelector('H1');
Let titleText = titleNode? TitleNode. İnnerText: Document. Title;
Let paragraphs = document. QuerySelectorAll('p');
Let bodyText = "";
Paragraphs. ForEach(p => { bodyText += p. İnnerText + "\n"; });
Let fullContent = "Başlık: " + titleText + "\n\nMetin: " + bodyText;
İf (fullContent. Length > 30000) {
FullContent = fullContent. Substring(0, 30000);
}
Const URL =
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey};Const requestData = {
System_instruction: { parts: [{ text: "Sen bir sonuç bulucusun. Kullanıcı sana uzun bir haber metni verecek. Haberin başlığındaki asıl soruyu anla. Metin içinden bu sorunun cevabını bul. Eğer kesin bir bilgi yoksa, 'beklenen', 'planlanan' veya 'tahmin edilen' durumu cevap olarak kabul et (örneğin: 'Kesin tarih yok ama 1 Nisan'a kadar bitmesi bekleniyor'). Sadece sonucu çok kısa ve net şekilde söyle. Merhaba deme, uzun cümleler kurma." }] },
Contents: [{ parts: [{ text: fullContent }] }]
};
Fetch(URL, {
Method: "POST",
Headers: { "Content-Type": "application/json" },
Body: JSON. Stringify(requestData)
})
.Then(response => response.json())
.Then(data => {
İf (data. Candidates && data. Candidates. Length > 0) {
ResultBox. İnnerText = data. Candidates[0].content. Parts[0].text;
} Else if (data. Error) {
ResultBox. İnnerText = "Hata: " + data. Error. Message;
} Else {
ResultBox. İnnerText = "Cevap bulunamadı.";
}
})
.Catch(err => {
ResultBox. İnnerText = "Bağlantı hatası.";
});
}
ADIM 2:
Ardından Bedava Gemini API bağlantısına gidin ve "Create API key" butonuna basarak bir API oluşturun.
Gemini Flash 2.5 API'si olması gerekiyor.
API için hiçbir ücret ödemiyorsunuz
ADIM 3:
Herhangi bir sayfaya sağ tıklayın ve "Sonucu Bul" seçeneğine tıklayın. İlk defa yaptığınızda sizden API kodu isteyecek. Gemini'den aldığımız beleş API kodunu yapıştırın ve eklentinin keyfini çıkarın.
BİLMENİZ GEREKENLER
- Zaten elinizde parasını verip aldığınız sağlam bir Yapay Zeka API'si varsa kodlarda ufak değişiklik yaparak onu kullanabilirsiniz.
- Rehberde anlattığım ücretsiz API kullanırsanız günlük 20 hakkınız falan oluyor. Zaten 1 günde 20'den fazla kullanacağınızı sanmıyorum.