/ PHP
  1. PHP
  2. Php bot yapımı

Php bot yapımı

Php ile bot yapmak isteyen ve php bot örnekleri ile kendilerini geliştirmek isteyenler kullanıcılar bu yazıda birçok şeyi öğrenebilirsiniz.

Bot yapımı oldukça basittir bunu aşağıdaki bot yapmak için gerekli adımları inceleyerek görebilirsiniz.Eğer gerçekten bot yapmak istiyorsanız aşaıdaki 3 adımı doğru şekilde uyguladığınız takdirde sizde çok iyi botlar yapabileceksiniz.

Php bot yapmak için gereken adımlar Nelerdir ?

  1. Verinin çekileceği sitenin içeriklerine ulaşmak
  2. Çekilen içeriklerin içerisinde filtreleme yapıp istediğimiz verileri almak.

Bot yapmak gördüğünüz gibi bu kadar basit. Sadece 2 adımda istediğimiz botu yapabiliriz.Açıklamalarımızı yaptığımıza göre artık bot yazmayı öğrenme vaktimiz geldi.İlk adım olan bir siteden nasıl içerik çekeceğimizi görelim.

Php Karşı siteden içerik çekme

Karşı siteden birkaç farklı yöntem içerikleri çekebiliriz fakat ben sadece 2 yöntem ile içerikleri çekmeyi göstereceğim.İlk göreceğimiz fonksiyon file_get_contents her ne kadar sağlıklı bir fonksiyon olmasada sadece tek satır ile site içeriklerini çekebilirsiniz fakat her sitede çalışmayabilir.Diğer yöntem ise curl fonksiyonudur ve diğer fonksiyona göre uzun ve biraz karmaşıktır fakat en sağlam veri çekme yöntemlerinden biridir.Botların büyük çoğunluğu curl fonksiyonları kullanılarak yapılmaktadır.

file_get_contents Kullanımı

file_get_contents birçok parametre almaktadır.Ben sizlere sadece ilk parametresi ve bizim ihtiyacımız olan kısımdan devam edeceğim.İlk parametresi site urlsi yani verinin çekileceği sayfanın linkini parametre olarak veririz.Bunu hemen birkaç örnek ile test edelim.

1
2
3
4
5
6
7
8
9
<?php 

// hangi siteden içerikleri çekiyor ise sayfanın linkini girdik
$kaynak = file_get_contents('https://www.botbenson.com');

// siteyi içerikleri çekip ekrana bastırdık
echo $kaynak;

?>

Yukarıdaki örnek de www.botbenson.com sitesindeki ana sayfadaki bütün içeriklei çekerek ekrana bastırdık.Bunu birde Curl Kullanarak yapalım.Fakat Curl kullanırken biraz uzun kodları olduğundan bunu daha düzenli ve her yerde kullanabilmek için açısından bir fonksiyon olarak yazalım.

Curl Fonksiyonu Kullanımı

Curl fonksiyonu ile aynı bir kullanıcı gibi siteyi ziyaret edebiliriz.Girdiğimiz websitesine istediğimiz tarayıcı bilgileri gönderebilir.Sanki gerçek bir kullanıcıymış havası verebiliriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php 

function startBot($site_url , $timeout = 5)
{

    $ch = curl_init();

    $tarayici = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0';

    curl_setopt($ch, CURLOPT_URL,$site_url);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
    curl_setopt($ch, CURLOPT_HEADER         , 0);
    curl_setopt($ch, CURLOPT_TIMEOUT        , $timeout);
    curl_setopt($ch, CURLOPT_USERAGENT      , $tarayici);

    $result = curl_exec($ch);
    curl_close($ch);

    return $result;

}

// siteden 5 sn cevap gelmezse bağlantı kesilecek.
echo startBot('https://www.botbenson.com');

// siteden 2 sn cevap gelmezse bağlantı kesilecek.
echo startBot('https://www.botbenson.com',2);

?>

Yukarıdaki örnekte startBot adında fonksiyonumuzu oluşturduk 2 parametre belirledik.İlk parametre hedef sitenin linki ikinci parametre ise isteğe bağlı olarak kullanabiliriz ve ikinci parametremiz karşı siteye attığımız istek den kaç saniye cevap gelmezse bağlantı kesilsin şeklindedir.Bu süre varsayılan 5 olarak ayarladım ve isterseniz start bot fonksiyonuna ikinci parametre olarak istediğiniz süreyi girebilirsiniz.

Veri çekme işimiz burada sona eriyor eğer buraya kadar başarılı bir şekilde kodlarda hata almıyor ve çekilen veriyi ekrana bastığınızda beyaz sayfa yerine çıktı veiyorsa bu demektirki ilk adımı başarılı bir şekilde tamamlamışsınızdır.Artık ikinci adım olan istediğimiz verileri filtreleme kısmına geçebiliriz.

Php Çekilen sayfanın belirli içeriklerini alma

Geldik 2. adımımıza ve en önemli olana eğer bir websitesinin istediğiniz bir sayfasını çekebiliyorsanız artık bu adıma geçebiliriz.Çektiğimiz verinin içerisinde istediğimiz kısımları alabilmek için php regex komutlarını preg_match ve preg_match_all fonksiyonlarını birlikte kullanacağız.Aşağıda sitemizdeki belirleri alanları çekmek için bir örnek oluşturalım.

1
2
3
4
5
6
7
8
9
10
11
12
<?php 

// üst tarafta oluşturduğumuz startbot adındaki fonsksiyonumuzu kullanıyoruz.
$kaynak = startBot('https://www.botbenson.com');

preg_match_all('@<title>(.*?)</title>@si' , $kaynak , $cikti);

echo "<pre>";
print_r($cikti);
echo "</pre>";

?>

Yukarıdaki örneğimizde startbot fonksiyonumuz ile verileri filtreleyeceğimiz sayfayı çektik.preg_match_all fonksiyonu aldığı veri içerisinde regex pattern kullanılarak arama yapmaktadır.preg_match_all fonksiyonumuza ilk parametre olarak düzenli ifademiz yani <title>(.*?)</title> olan bu kısımda title tagları arasında ne yazıyor ise onu bana getir şeklinde bir sözdizimi yazdık ve 2. parametremiz çektiğimiz sitenin verileriydi.

Son parametremiz ise filtrelenen verilerin en son bize getirilmesidir.Gelen verileri print_r fonksiyonu ile ekrana bastık ve bu şekilde bize ne verileri döndürdüğünü güzelce inceleyebiliriz.Biraz daha karmaşık bir bot yapmaya çalışalım.Sitemizin title, meta description ve meta copyright kısımlarını çekelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php 

// üst tarafta oluşturduğumuz startbot adındaki fonsksiyonumuzu kullanıyoruz.
$kaynak = startBot('https://www.botbenson.com');

preg_match_all('@<title>(.*?)</title>@si' , $kaynak , $title_cikti);

echo "<pre>";
print_r($title_cikti);
echo "</pre>";

preg_match_all('@<meta name="description" content="(.*?)">@si' , $kaynak , $meta_desc_cikti);

echo "<pre>";
print_r($meta_desc_cikti);
echo "</pre>";

preg_match_all('@<meta name="copyright" content= "(.*?)">@si' , $kaynak , $meta_copy_cikti);

echo "<pre>";
print_r($meta_copy_cikti);
echo "</pre>";

?>

Yukarıdaki örneğimizde ise yine sitemizi startbot adındaki fonksiyon ile içerikleri çektik.Daha sonra preg_match_all fonksiyonu ile title arasında ne yazıyorsa onu bana getir dedik ve title_cikti adındaki değişkenimize aktardık.Onuda ekrana bastık.Ardından meta name description olan ve content kısmında ne yazıyorsa onu bana getir dedik ve onuda meta_desc_cikti adındaki değişkene aktardık.Onuda aynı şekil ekrana bastırdık.En son olarak da meta copyright olan ve yine content kısmında ne yazıyorsa onu bana getir dedik.Onuda ekrana basarak bütün istediğimiz verileri elde etmiş olduk.

Regex Pattern’i ne kadar iyi bilirseniz içerikler arasından istediğiniz verileri okadar kolay bir şekilde alırsınız.