İçeriğe geç

Döviz Botu Yazmak ve Bot Yazmak için Gerekliler – Fonksiyonlar ile PHP #1

Son güncelleme tarihi : 19/05/2020, Salı

Bu makalemizde bir siteden veri çekmek için kullanılan botları yapmamızı kolaylaştıracak birkaç fonksiyon paylaşımı yapıcam.

Curl Bağlantısı Kurma (Siteden Veriyi alma)

function curl_connect($url){ // curl bağlantı fonksiyonu
    $agent = $_SERVER["HTTP_USER_AGENT"]; // Buraya istersek kendimiz de tarayıcı bilgisi girebiliriz. (Ör. Android, İos, Ipad vs.)

    $curl = curl_init(); // Curl oturumu başlat
    curl_setopt($curl, CURLOPT_URL, $url); // url'ye bağlan
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Veriyi ekrana yazma. Değişkene aktarıp ayıklayacağım
    curl_setopt($curl, CURLOPT_USERAGENT, $agent); // Siteye tarayıcı bilgisi gönder, uyanmasın.
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // SSL kontrolünü iptal ettik. Bu sayede site botumuzu engelleyemez.
    $content = curl_exec($curl); // Curl oturumunu çalıştır ve gelen sonucu değişkene aktar.
    curl_close($curl); // İşimiz bitti, oturumu sonlandır.

    $content = preg_replace("/\s+/", " ", $content); // boşlukları temizle
    $content = preg_replace("/\r|\n/", " ", $content); // yeni satırları temizle
    $content = preg_replace("/\t+/", "", $content); // tabları temizle
    $content = preg_replace("/<script\b[^>]*>(.*?)<\/script>/is", "", $content); // javascript kodlarını temizle
    $content = trim($content); // başta ve sonda kalan boşlukları temizle

    return $content; // Sonuç döndür
}

Çekmek istediğimiz verinin konumu belirtme

function curl_search($first, $last, $content){ // $content parametresi içinde, $first ve $last parametreleri ile gelen değerler arasındaki veriyi bulup sonuç döndürür.
        @preg_match_all('/' . preg_quote($first, '/').'(.*?)'. preg_quote($last, '/').'/i', $content, $m);
        return @$m[1];
    }

Şimdi Gerekli kodları verdiğimize göre deneme yapma zamanı 🙂

Biz şimdi deneme amaçlı Merkez Bankası kur verisini çekmeye çalışacaz. Öncelikle Google dan bir ön araştırma yapıp Merkez bankası günlük kur sitesini bulalım.

Araştırmamızın sonucunda bu siteyi bulduk.
https://www.tcmb.gov.tr/kurlar/today.xml
XML olması bizim işimiz daha da kolaylaştıracak. Sayfa kaynağına (Chrome için Ctrl+U) bakarak botumuzu yazmaya başlayalım.

Üstteki resimde de görüldüğü gibi istediğimiz veriler mevcut. Şimdi bunları Çekmek için üstte yazdığımız fonksiyondan yararlanıcaz.

$site_adresimiz = curl_connect("https://www.tcmb.gov.tr/kurlar/today.xml"); 
$kur_adi = curl_search('<Isim>', '</Isim>', $site_adresimiz);

$kur_adi ‘nı for döngüsüne koyup tüm kurları istediğimiz gibi çıktı alabiliriz.
Şimdi diğer değerleri de çekelim ve en son for döngüsü ile istediğimiz çıktıyı elde edelim.

$kur_birim = curl_search('<Unit>', '</Unit>', $site_adresimiz);
$kur_alis = curl_search('<ForexBuying>', '</ForexBuying>', $site_adresimiz);
$kur_satis = curl_search('<ForexSelling>', '</ForexSelling>', $site_adresimiz);
$kur_kisa_kod = curl_search('CurrencyCode="', '"', $site_adresimiz);

Şimdi For döngüsüne koyalım.
Bunun için daha temiz görüntü için ben tablo kullanacam. İsteyen kişiler css ile istediği gibi div ile vs. düzenleyebilir.

echo '<table>
   <tr>
	<td id="kur_adi"><b>Kur Adı</b></td>
	<td id="kur_alis"><b>Alış</b></td>
    	<td id="kur_satis"><b>Satış</b></td>
   </tr>
';

for($sayi = 0; $sayi < 19; $sayi++) {
   echo '
   <tr>
   	<td id="kur_adi">'.$kur_adi[$sayi].' ( '.$kur_kisa_kod[$sayi].' )</td>
	<td id="kur_alis">'.($kur_alis[$sayi]/$kur_birim[$sayi]).'</td>
	<td id="kur_satis">'.($kur_satis[$sayi]/$kur_birim[$sayi]).'</td>
    </tr>
';
}
echo '</table>';

Çıktı olarak ise böyle bir görüntü elde ettik.

Böylece bu botumuzu da tamamlamış olduk.
İsteyen kişiler buradan tıklayarak da bakabilirler. Buraya da canlı demo ekliyorum.

Güncelleme
Bunu sitenizde bir yere eklemek ister iseniz direk iframe olarak ekleyebilirsiniz. Tabi mesai saatleri (Merkez Bankası için) içinde güncellenmesini isterseniz

Yayınlandığı kategoriBotFonksiyonPhpYazı

8 Yorum

  1. Eline sağlık Ramazan, öğrenmek isteyenler için faydalı içerik olmuş.

  2. Batuhan Batuhan

    Allah razı olsun çok yararı oldu.

  3. Emirhan mert Emirhan mert

    Teşekkürler,elinize sağlık efendim 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.