Gemini ile Borsa Chatbot’u Geliştirme

Tayyip Bölük Mart 15, 2025 Yapay Zeka
PHP ve Gemini ile borsa chatbot

Bu yazıda, PHP ile Google’ın Gemini API’sini entegre ederek nasıl bir borsa bilgi chatbot’u geliştirebileceğimizi en ince ayrıntısına kadar ele alacağız. Amaç, kodun temeline inerek her satırın ne anlama geldiğini anlamanızı sağlamak ve size sağlam bir temel oluşturmaktır. Hazırsanız, kodun derinliklerine dalalım!

Chatbot Temel Mantık:

Chatbot’umuzun temel çalışma prensibi şu şekilde olacak:

  1. Kullanıcıdan Girdi Alma: HTML formu aracılığıyla kullanıcıdan bir soru alacağız.
  2. Gemini API’ye İstek Gönderme: Kullanıcının sorusunu Gemini API’ye ileteceğiz. Bu istek, borsa bilgisiyle ilgili olup olmadığını anlamlandırma ve uygun cevabı oluşturma görevini Gemini’ye bırakacak.
  3. Borsa Bilgisini Kontrol Etme: Kullanıcının sorusunda bir borsa sembolü (örneğin, $AAPL) olup olmadığını kontrol edeceğiz. Varsa, ilgili borsa bilgisini bir borsa API’sinden alacağız.
  4. Cevabı Birleştirme ve Gösterme: Gemini API’den gelen cevabı ve (eğer varsa) borsa bilgisini birleştirerek kullanıcıya göstereceğiz.

Adım Adım Kodlama:

  1. API Anahtarlarını Yönetme (.env Dosyası Olmadan):Vanilla PHP kullandığımız için, .env dosyası ve symfony/dotenv kütüphanesini kullanmayacağız. Bunun yerine, API anahtarlarını doğrudan kodumuzda tanımlayacağız. Ancak, bu yöntemin güvenli olmadığını ve canlı ortamlarda kullanılmaması gerektiğini unutmayın! Güvenlik için, anahtarları sunucu ortam değişkenlerinde saklamak ve getenv() fonksiyonuyla almak daha iyi bir yaklaşımdır.
<?php
$geminiApiKey = "YOUR_GEMINI_API_KEY";
$borsaApiKey = "YOUR_BORSA_API_KEY";

YOUR_GEMINI_API_KEY ve YOUR_BORSA_API_KEY yerine kendi API anahtarlarınızı girmeyi unutmayın!

Borsa Bilgisi Alma Fonksiyonu:

Bu fonksiyon, belirtilen sembol için borsa bilgilerini bir borsa API’sinden alacak. Burada, Alpha Vantage API’sini kullanacağız. Diğer API’leri kullanmak isterseniz, bu fonksiyonu API’nin dokümantasyonuna göre uyarlamanız gerekecektir.

function getBorsaBilgisi($sembol) {
    global $borsaApiKey;
    $url = "https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=$sembol&apikey=$borsaApiKey";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        return "Borsa bilgisi alınamadı: " . curl_error($ch);
    }

    curl_close($ch);

    $body = json_decode($response, true);

    if (isset($body['Global Quote'])) {
        $data = $body['Global Quote'];
        $fiyat = $data['price'];
        $degisim = $data['change'];
        return "$sembol sembolünün güncel fiyatı: $fiyat, Değişim: $degisim";
    } else {
        return "Borsa bilgisi alınamadı.";
    }
}

Kod Açıklaması:

  • curl_init() ile bir cURL oturumu başlatılır.
  • curl_setopt() fonksiyonu ile çeşitli seçenekler ayarlanır:
    • CURLOPT_URL: API’nin adresi belirtilir.
    • CURLOPT_RETURNTRANSFER: Cevabın doğrudan ekrana yazdırılmaması, bir değişkene atanması sağlanır.
  • curl_exec() ile istek gönderilir ve cevap alınır.
  • curl_errno() ve curl_error() ile hatalar kontrol edilir.
  • curl_close() ile oturum kapatılır.
  • json_decode() ile JSON formatındaki cevap PHP dizisine dönüştürülür.
  • Cevap başarılı ise, ilgili veriler alınarak bir string oluşturulur ve döndürülür. Aksi takdirde, hata mesajı döndürülür.

Gemini API’ye İstek Gönderme Fonksiyonu:

Bu fonksiyon, Gemini API’ye istek gönderecek ve cevabı alacak.

function getGeminiResponse($prompt) {
    global $geminiApiKey;
    $url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$geminiApiKey";

    $payload = [
        'contents' => [
            [
                'parts' => [
                    ['text' => $prompt]
                ]
            ]
        ]
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json'
    ]);

    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        return "Gemini API'den cevap alınamadı: " . curl_error($ch);
    }

    curl_close($ch);

    $body = json_decode($response, true);

    if (isset($body['candidates'][0]['content']['parts'][0]['text'])) {
        return $body['candidates'][0]['content']['parts'][0]['text'];
    } else {
        return "Gemini API'den cevap alınamadı.";
    }
}

Kod Açıklaması:

  • Önceki fonksiyona benzer şekilde, curl_init(), curl_setopt() ve curl_exec() fonksiyonları kullanılarak API’ye istek gönderilir.
  • CURLOPT_POST seçeneği true olarak ayarlanarak POST isteği gönderileceği belirtilir.
  • CURLOPT_POSTFIELDS seçeneği ile JSON formatındaki payload (istek verisi) gönderilir.
  • CURLOPT_HTTPHEADER seçeneği ile Content-Type başlığı application/json olarak ayarlanır.
  • Gelen cevap JSON formatından PHP dizisine dönüştürülür ve Gemini API’den gelen cevap döndürülür.

Ana Kod (index.php):

Bu kod, kullanıcıdan girdi alacak, Gemini API’ye ve (gerekirse) borsa API’sine istek gönderecek ve cevabı ekrana yazdıracak.

<?php

$geminiApiKey = "YOUR_GEMINI_API_KEY";
$borsaApiKey = "YOUR_BORSA_API_KEY";

function getBorsaBilgisi($sembol) {
    // ... (Yukarıdaki kod) ...
}

function getGeminiResponse($prompt) {
    // ... (Yukarıdaki kod) ...
}

$user_input = $_POST['user_input'] ?? '';
$response = '';

if ($user_input) {
    // Kullanıcının girdisini Gemini API'ye gönder
    $geminiPrompt = "Kullanıcı sorusu: $user_input.  Borsa bilgisi ile ilgili ise borsa bilgisini al ve cevap ver. Değilse normal cevap ver.";
    $response = getGeminiResponse($geminiPrompt);

    // Borsadaki sembol bilgisini al
    preg_match('/\$([A-Za-z]+)/', $user_input, $matches);
    if (isset($matches[1])) {
        $sembol = strtoupper($matches[1]); // Sembolü büyük harfe çevir
        $borsaBilgisi = getBorsaBilgisi($sembol);
        $response .= "<br><br>" . $borsaBilgisi;
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Borsa Bilgi Chatbot</title>
</head>
<body>
    <h1>Borsa Bilgi Chatbot</h1>
    <form method="POST">
        <label for="user_input">Soru:</label><br>
        <input type="text" id="user_input" name="user_input"><br><br>
        <input type="submit" value="Gönder">
    </form>

    <?php if ($user_input): ?>
        <p><b>Soru:</b> <?php echo htmlspecialchars($user_input); ?></p>
        <p><b>Cevap:</b> <?php echo $response; ?></p>
    <?php endif; ?>
</body>
</html>

Kod Açıklaması:

  • $_POST['user_input'] ?? ” ifadesi, kullanıcının formdan gönderdiği girdiyi alır. Eğer bir girdi gönderilmemişse, boş bir string atanır.
  • if ($user_input) bloğu, kullanıcı bir girdi gönderdiyse çalışır.
  • preg_match('/\$([A-Za-z]+)/', $user_input, $matches) ifadesi, kullanıcının girdisinde $AAPL gibi bir borsa sembolü olup olmadığını kontrol eder. Eğer bir sembol bulunursa, $matches dizisine kaydedilir.
  • htmlspecialchars($user_input) fonksiyonu, kullanıcının girdisindeki HTML etiketlerini temizleyerek XSS saldırılarını önler.

Özet:

Bu rehberde, Vanilla PHP kullanarak Gemini API ile nasıl bir borsa bilgi chatbot’u geliştirebileceğinizi en ince ayrıntısına kadar anlattık. Her fonksiyonun ne işe yaradığını, cURL ile API’lere nasıl istek gönderileceğini ve verilerin nasıl işleneceğini detaylı bir şekilde açıkladık. Bu bilgiler ışığında, kendi chatbot’unuzu geliştirebilir ve daha karmaşık projeler için sağlam bir temel oluşturabilirsiniz. Unutmayın, sürekli pratik yapmak ve kodun temeline inmek, başarılı bir PHP geliştiricisi olmanın en önemli adımlarından biridir. API bilgilerine Google Gemini API Alpha Vantaga API ulaşabilirsin. Daha fazlası için “Yapay Zeka” kategorisine bakabilrsin.

  1. PHP ile Gemini API’sini nasıl entegre edebilirim?

    PHP kullanarak Gemini API’sini entegre etmek için, API anahtarlarını doğrudan kodda tanımlayabilir ve cURL ile API istekleri gönderebilirsiniz. API’den alınan yanıtı işleyerek kullanıcıya doğru bilgi sunabilirsiniz.

  2. Borsa bilgilerini hangi API’den alabiliriz?

    Borsa bilgilerini almak için Alpha Vantage API’si kullanılabilir. Bu API, borsa sembollerine ilişkin güncel fiyatları ve değişimleri sağlar.

  3. Chatbot kullanıcının borsa bilgisi sorusunu nasıl algılar?

    Chatbot, kullanıcının sorusunu analiz ederek, borsa sembolünü (örneğin, $AAPL) arar. Eğer sembol bulunursa, borsa bilgisi API’si kullanılarak ilgili borsa verisi alınır ve kullanıcıya sunulur.

  4. Borsa sembolü nasıl tespit edilir?

    Kullanıcı tarafından girilen soruda, borsa sembolü genellikle “$” ile başlar (örneğin, $AAPL). PHP’de bu sembolü tespit etmek için bir regex kullanabilirsiniz.

  5. Gemini API’si nasıl çalışır?

    Gemini API’si, kullanıcı tarafından sağlanan bir soru veya talep üzerine içerik oluşturmak için kullanılır. API’ye gönderilen istek, kullanıcının sorusuna göre cevap oluşturur.

  6. PHP ile API entegrasyonunda güvenlik nasıl sağlanır?

    API anahtarları, güvenlik amacıyla doğrudan kodda değil, sunucu ortam değişkenlerinde saklanmalıdır. getenv() fonksiyonu ile anahtarlar güvenli bir şekilde alınabilir.

  7. cURL nedir ve neden kullanılır?

    cURL, PHP’de dış API’lere HTTP istekleri göndermek için kullanılan bir kütüphanedir. Bu, chatbot’unuza dış kaynaklardan veri çekmesini sağlar.

  8. Chatbot’u nasıl test edebilirim?

    Chatbot’u test etmek için, farklı kullanıcı soruları girerek, sistemin borsa sembollerini doğru bir şekilde algılayıp verileri doğru şekilde getirdiğini kontrol edebilirsiniz.

Etiketler: chatbot gemini php
Paylaş:
Tayyip Bölük

Merhaba! Ben Tayyip Bölük, yazılım geliştirme alanında uzmanlaşmış bir geliştiriciyim. Teknoloji ve yazılım dünyasına olan ilgim, beni bu blogu oluşturmaya yönlendirdi. Amacım, yazılım geliştirme sürecindeki deneyimlerimi, öğrendiklerimi ve sektördeki yenilikleri okuyucularımla paylaşmak. Yazılım geliştirme sürecindeki yenilikçi yaklaşımlar, uygulama geliştirme ipuçları ve teknoloji trendleri üzerine içerikler üretiyorum. Blogumda ayrıca kendi projelerimden ve sektördeki ilham verici hikayelerden de bahsediyorum. Bu blog, hem yazılım meraklıları hem de sektöre adım atmak isteyenler için bir bilgi ve ilham kaynağı olmayı hedefliyor.

0 Yorum

Henüz yorum yapılmamış. İlk yorumu siz yapabilirsiniz!

Yorum Yap

Bir Yorum Yazın

E-posta adresiniz paylaşılmayacak. Gerekli alanlar * ile işaretlenmiştir.