Web Tasarım

PHP İle Bot Yazmak

Merhaba, web işleri ile uğraşan ve internette sürekli duyduğunuz bot olayına değineceğim, kısaca botun ne olduğunu kısaca anlatıp, bir kaç örnek kod göstererek aşamalardan bahsedeceğim.

Bot Nedir

Sizin yerinize istediğiniz bir web sayfasından istediğiniz verileri çekerek php içinde herhangi bir değişkene kaydetmenizi sağlar, sizde bu değişkendeki değeri db nize kayıt yapar yada direk ekrana basabilirsiniz. Örneğin, spor ile ilgili bir web siteniz var ve siz sürekli güncel puan durumunu çekmek istiyorsunuz, bot ile bunu kolaylıkla yapabilirsiniz, sürekli haber girmek yerine belirli sitelerden bot yazarak sadece adresi girip haberleri çekebilirsiniz, güncel döviz bilgilerini çekebilirsiniz ve daha bir çok özellik de ekleyebiliriz buna,

PHP Bot Yazımı

Küçük bir örnekle yazmaya başlayalım, örnek sayfamı ve kodları şu şekilde,

Gördüğünüz gibi bir tablomuz var ve yanında da kodları görüyorsunuz


<table>

<tr>

<th>Ad</th>

<th>Soyad</th>

<th>İl</th>

</tr>

<tr>

<td class="text-center">Mehmet</td>

<td class="text-center">Çifçi</td>

<td class="text-center">Diyarbakır</td>

</tr>

<tr>

<td class="text-center">Ahmet</td>

<td class="text-center">Çifçi</td>

<td class="text-center">Mersin</td>

</tr>

<tr>

<td class="text-center">Bektaş</td>

<td class="text-center">Baba</td>

<td class="text-center">Adana</td>

</tr>

<tr>

<td class="text-center">Fahmi</td>

<td class="text-center">Koru</td>

<td class="text-center">İzmir</td>

</tr>

<tr>

<td class="text-center">Bülent</td>

<td class="text-center">Ecevit</td>

<td class="text-center">istanbul</td>

</tr>

<tr>

<td class="text-center">Süleyman</td>

<td class="text-center">Demirel</td>

<td class="text-center">Isparta</td>

</tr>

</table>

Yukarıda ki kodlarımız şu şekilde bizim veri çekeceğimiz kod şu şekilde olacak:

<td class="text-center"> ---- bu aradaki değeri çekeceğiz -----</td>

Yani tablonun içindeki değeri çekeceğiz, şansımıza tablolarun hepsi aynı class değerine sahip, böyle işimiz daha kolay olacak, hemen açıklamalı kodlara geçelim,

<?php
$cekilecekadres = 'http://localhost/bot/list.php'; // bot cekecegimiz site adresi ve sayfasi
$site = file_get_contents($cekilecekadres); // veriyi cektik
preg_match_all('@
<td class="text-center">(.*?)</td>

@si',$site,$veri); //sayfanin neresinden veriyi cekmek istedigimizi belirtik ve veri diye bir degiskene atatik
print_r ($veri); // bu sekilde de degiskenin icindeki tum degerleri gormus olacagiz
?>

Fazla söze gerek yok zaten kodların içinde ne işe yaradıklarını anlattım, hemen çıktımıza bakalım:

Array da gördüğünüz gibi değerlerimiz bu şekilde, şimdi bize lazım olanları içinden seçelim; örneğin Süleyman Demirel Isparta değerlerini çekelim;

Burda dikkat edeceğiniz olaydan bahsedeyim, array da çektiğimiz değerlerde [0]=> değeri diye uzayıp gidiyor biz Süleyman ismini çekmemiz için arraydaki 15 değeri çağırdık 0 başlatıp 15 değeri al dedik.

Örneğin Bektaş yazısını almak isteseydik [0][7] dediğimiz zaman bektaş yazısını almış olacaktık



Örnek kod:


<?php
$cekilecekadres = 'http://localhost/bot/list.php'; // bot cekecegimiz site adresi ve sayfasi
$site = file_get_contents($cekilecekadres); // veriyi cektik
preg_match_all('@
<td class="text-center">(.*?)</td>

@si',$site,$veri); //sayfanin neresinden veriyi cekmek istedigimizi belirtik ve veri diye bir degiskene atatik

$istenenveriadi = $veri[0][15]; //adini cektik
$istenenverisoy = $veri[0][16]; //soyadini cektik
$istenenveriili = $veri[0][17]; //ilini cektik
Echo "Adı ".$istenenveriadi." Soyadı ".$istenenverisoy." İli ".$istenenveriili;

?>

Bu şekilde istediğimiz verileri aldık ve bunları nerde kullanmak istiyorsanız kullanabileceksiniz artık, ister bunları db kaydeder, isterseniz ekran çıktısı olarak verebilirsiniz.

Notlara değinelim: Şimdi tablomuzda ki verilerin hepsi aynı kodlara sahip olduğu için ayrı ayrı çekmeye gerek kalmadı, mesela

<td class=”text-center1″>Bülent</td>
<td class=”text-center2″>Ecevit</td>
<td class=”text-center3″>istanbul</td>

Gibi koda sahip olsaydı tablo bu sefer her tablo için ayrı değer çekmek zorunda kalacaktık.

PHP Bot İle Resim Çekme Sunucuya Yükleme

Php ile bot işlemini nasıl gerçekleştirdiğimizi gördünüz, şimdi bir resim çekelim ve sunucumuza kaydedelim, örnek kodmumuz:



&lt;?php
$cekilecekadres = 'http://localhost/bot/resim.php'; // bot cekecegimiz site adresi ve sayfasi
$site = file_get_contents($cekilecekadres); // veriyi cektik
preg_match_all('#
&lt;div class="baslikresim"&gt;&lt;img src="(.*?)"&gt;&lt;/div&gt;

#',$site,$resim); //sayfanin neresinden veriyi cekmek istedigimizi belirtik ve veri diye bir degiskene atatik
print_r($resim); // araydaki degerleri cekelim
$gelenresim = $resim[1][0]; //dosya adini degiskene atayalim
echo "
".$gelenresim."
"; //hangi veriyi cekecegimizi bulalim ekrana yazdirdik
//sunucuya yukleyelim
$url='http://localhost/bot/'.$gelenresim; // resmin url olusturalim
$link=$url; // İndirmek istediğimiz dosyanın linki
function file_download($link,$name=null) //fonkisyonumuz
{
$link_info = pathinfo($link);
$uzanti = strtolower($link_info['extension']);
$file = ($name) ? $name.'.'.$uzanti : $link_info['basename'];
$yol = "C:/xampp/htdocs/bot/gelenresim/".$file; // dosyanin nereye kaydedilecegini belirleyelim
$curl = curl_init($link);
$fopen = fopen($yol,'w');
curl_setopt($curl, CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
curl_setopt($curl, CURLOPT_FILE, $fopen);
curl_exec($curl);
curl_close($curl);
fclose($fopen);

}
$random=rand(1,10000); //rastgele kod uretiyoruz isimde kullanmak icin
$rasgele_isim = $random."".$gelenresim; // Rastegele bir isim veriyoruz.
file_download($link,$rasgele_sayi);
echo "Cekilen dosya baglantisi: ".$link; //adresimiz
echo "
Yeni dosya ismi: ".$rasgele_isim; //yani dosya adi
?&gt;

Gerekli açıklamalar kod içinde mevcuttur, dikkat edeceğimiz olaya bakalım, burda biz array ile veriyi çektik bizim burda alacağımız isim dosya adı, dosya adı içinde çekeceğimiz değer şu şekilde,

Dosyamız yüklendi, arraya baktımızda dosya adını [1][0] olarak çekmemiz gerekiyor, en sonda rastgele_isim adında bir değişkenle sunucuya kaydediyoruz, bu değişkeni ister ekrana basarsınız yada db kaydedebilirsiniz,

Örnek uygulamayı indirmek için aşağıdaki butona tıklayabilirsiniz.

Anlatacaklarım bu kadar, takıldığınız yerlerde sorabilirsiniz, takıldığınız yerlerde yorum kısmına yazabilirsiniz.

4 Yorumlar
  1. mura 2 yıl önce
    Cevapla

    Merhaba,

    verileri anlık olarak alabilir miyiz ? mesela her saniye

  2. eko bilet 10 ay önce
    Cevapla

    merhaba çekilen veriyi nasıl tablolar haline getirip düzenleyebilirim.

Yorum Yaz

*E-mail adresiniz gizli kalacaktır.

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

Öneriler

Yeni Makaleler