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
Teşekkürler, elinize sağlık
Rica ederim 🙂
Eline sağlık Ramazan, öğrenmek isteyenler için faydalı içerik olmuş.
Rica ederim 🙂
Allah razı olsun çok yararı oldu.
Rica Ederim 🙂
Teşekkürler,elinize sağlık efendim ?
Rica Ederim 🙂
Hocam, Kod çalışmamaktadır. Bilginize…
Merhaba, kontrol ettiğimde kodda hiçbir değişiklik yapmadığım halde PHP 8 ‘de sorunsuz çalışmaktadır.
Sizde buradan kontrol edebilirsiniz: https://blog.ramazansancar.com.tr/demolar/kur.php