Php Programlama

PHP Bot Yapımı – Uzak Siteden Veri Çekmek

Yazan serkan

Php ile bot yazarken iki yöntem kullanılır bunlardan biri file_get_contents() yöntemi, bir diğeri ise Php CURL yöntemidir. İlk yöntem local ortamda çalışır ancak bazen sunucuya attığınızda çalışmayabilir o buy essay online yuzden en sağlıklı yöntem CURL yöntemidir. Bu makalede CURL ile php bot nasıl yazılır ? bundan bahsetmek istiyorum.

Php ile bot yazmak nedir, neden ve nerelerde kullanırız bundan bahsedelim biraz; sitenizde kullanmak istediğiniz bir veriyi başka bir siteden, sayfadan dinamik olarak çekebiliriz. Örneğin film sitelerinin birçoğo bu iş için kendi veri online essay writer tabanını kullanmaz ve başka bir siteden kaynak alarak sayfasını doldurur ve bu işlem sadece metin türü veriler için değil resim dosyalarına varana kadar çekebilirsiniz.

Şimdi CURL yöntemiyle php bot nasıl yazılır buna bakalım.

Öncelikle kendimize Curl fonksiyonu oluşturalım.

function curl($url, $post=false)
{
    $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, $post ? true : false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post ? $post : false);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    $icerik = curl_exec($ch);
    curl_close($ch);
    return $icerik;
}

Eğer bir post verisi gönderecekseniz 2. parametreyi “kullanici=bilisim34&sifre=123456” şeklinde kullanmanız gerekecek.

Örneğin :

echo curl("http://www.bilisim34.com/wp-login.php", "user_login=kullanici&user_pass=sifre");

Bu örnek kullanımda kendi sitemizin paneline giriş yapmak için kullanıcı adı ve şifremizi postlamış olduk. Doğru bilgileri yazdığımızda curl fonksiyonu sayesinde PHP üzerinden panelimize de ulaşabiliriz.

PHP botu ile belirli içerikleri alma

Sitelerin içeriklerine direkt olarak ulaştıktan sonra istediğimiz kısımdaki değeri ve içeriği almak için öncelikle bir ara belirlemeliyiz. Sitenin kaynak kodunu inceleyip ayırt edici bir aralık bulmalıyız.

Ben örnek bir içerik sunacağım, ve bu örnek içerikten istediğimiz kısmı alacağız. Metereoloji sitesinin İstanbul için verdiği sonuçların bulunduğu kısmın kaynak kodu aşağıdaki gibi:

//http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL
<div id="divSonDurum">
<table class="tbl_sond">
<tr>
    <th>Son Durum <sup>*</sup></th>
    <th>Sıcaklık</th>
    <td title = "AZ BULUTLU" rowspan="2"><img src="../FILES/imgIcon/99/e_72x72t_png/-28.png" alt="AZ BULUTLU" /> </td>
    <th>Nem</th>
    <th>Rüzgar</th>
    <th>Basınç</th>
    <th>Görüş</th>
</tr>
<tr>
    <td id="sondrm" class="sond_zaman">11 Kasım Çarşamba<br .>16:50</td>
    <td><em class="renkMax">16,5&#176;C</em></td>
    <td><em>%75</em></td>
    <td title="Güneybatıdan"><img src="../FILES/imgIcon/ruzgar/1/5.gif" alt="Güneybatıdan" /> <br /><em>10 km/sa</em></td>
    <td><em>1020,4 hPa</em></td>
    <td><em>10 km</em></td>
</tr>
</table>
</div>

Çok karışık bir kaynak kodu gibi görünüyor ama aslında tam bizim aradığımız gibi bir sonuç. Farkettiyseniz tüm değerler write my essays online ayırt edilebilecek belli bazı elementlerin arasında. Örneğin tarih class=”sond_zaman”></td> arasında.

Bir içerikte istediğimiz aralığı almak için yine curl gibi hazır bir fonksiyon kullanacağız. Bu fonksiyonu kopyala-yapıştır yaparak sizde kullanabilirsiniz.

function parcala_ve_al($bas, $son, $yazi)
{
    @preg_match_all('/' . preg_quote($bas, '/') .
    '(.*?)'. preg_quote($son, '/').'/i', $yazi, $m);
    return @$m[1];
}

Bu parcala_ve_al  fonksiyonuda basit bir şekilde aralık içerisindeki değeri bize verir. Kullanımı için 3 parametre vardır. İlk parametre aralığın başı, ikinci parametre aralığın sonu, üçüncü parametre ise araştırılacak içerik.

$icerik = curl("http://www.bilisim34.com");
$baslik = parcala_ve_al("<title>", "</title>", $icerik);
echo $baslik[0];

Bu örnekte sitemizin kaynak kodlarına ulaşıp <title>…</title> arasını yani sitemizin başlığını almış olduk ve ekrana yazdırdık. Değerin yüklendiği değişkene [0] dememizin sebebi ilk yakalanan aralığı almamız. Eğer benzer aralıklardan daha fazla var ise onlarıda dizinin diğer elemanları custom writings olarak ekleyecektir. Örneğin birden fazla title aralığı olsaydı diğer sonuçlarda [1], [2] şeklinde diğer dizilere sıralanacaktı.

Gelelim bu fonksiyonu bahsettiğimiz meteroloji sitesinde uygulamaya:

$site = "http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL";
$icerik = curl($site);
$tarih = parcala_ve_al('class="sond_zaman">', '<br .>', $icerik);
$sicaklik = parcala_ve_al('<td><em class="renkMax">', '</em></td>', $icerik);
echo 'İstanbul hava durumu: ' . $tarih[0] . 'içi tahmini sıcaklık:' . $sicaklik[0];

Sitede alt ve üst sıcaklıkların bulunduğu değerlerin aralığını bulup ara fonksiyonumuz sayesinde aralığı alıp ekrana yazdırdık. Sonuç olarak ekranda İstanbul da 11 Kasım Çarşamba için tahmini sıcaklık:16,5°C  şeklinde bir çıktı alacağız.

Kısaca bot içerik alma mantığı sitelerdeki içeriklerin ayırt edici aralıklarını bulup o kısmı almaya dayanmaktadır. Bunların dışında hayal gücünüzü kullanarak daha bir çok mantık üretebilir ve her türlü içeriğe ulaşıp dilediğiniz botları kodlayabilirsiniz.

Yazar Hakkında

serkan

Leave a Comment