İçeriğe geç

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

Last updated on 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

Kategori:BotFonksiyonPhpYazı

8 Yorum

Ramazan Sancar için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.