Php bot yapımı konusunda ayrıntılı bir yazı okumaktasınız. Bu yazıdaki amaç okuyucu yazıyı okuduğunda php bot scriptlerinin nasıl yazıldığını anlamak ve bu işte kullanılan php sınıflarını ve kütüphaneleri tanımaktır.

Php bot nedir ?

Php bot scriptleri programlandıkları amaç üzerine başka kaynaklardan veri çekebilen bu veriler üzerinde işlemler yapıp istenilen hedeflere bu verileri yazabilen araç scriptleridir.

Php’de bot scripti yazmak gayet basit, hızlı ve eğlencelidir. Bu yazımızda php bot yapımında nasıl yöntemler izleyerek bot yazabiliriz hangi araçları kullanabiliriz. Bununla ilgili hangi kütüphaneler var bunları inceleyeceğiz. Bu yazıyı dikkatli bir şekilde okuduğunuzda php bot yapımı hakkında bir çok şeyi öğrenmiş olacaksınız.

Hedef Sitenin Analizi Nasıl Yapılır?

Php bot yapımına başlamadan önce botumuzun hedef site içeriklerini nasıl çekmesini istiyoruz ona karar vermeliyiz. Php bot scriptimiz çalışmaya başladıktan sonra hedef site içeriğini otomatik bir şekilde mi çekecek yoksa bir panelden ayarlanabilir bir şekilde sadece belirtilen sayfalardaki içerikler mi çekecek ona karar vermeliyiz.

Otomatik Bir Şekilde Bütün İçeriği Çeken Php Bot Yapımı

Eğer bot scriptimiz hedef sitedeki içeriği otomatik olarak hepsini çekmesini istiyorsak hedef sitedeki bütün sayfaları otomatik dolaşmasını sağlamamız gerekmektedir. Bu sayfaları bir şekilde elde etmeliyiz. Bunun için kullanılabilecek bazı yöntemler şunlardır.

  1. Hedef sitenin sitemapını kullanarak bütün sayfaları bulmak.
    ( Sitemap ile bütün sayfaları kolay bir şekilde elde edebiliriz )
  2. Hedef sitenin url yapısını kullanarak bütün sayfalara erişmek.
    ( Örneğin sitedeki bir yazının adresi şöyle olsun “www.site.com/123-yazı-adı.html” bu adreste dikkatimizi çekmesi gereken kısım kalın harflerle belirtilen ‘123’ kısmıdır. Bu numara muhtemelen yazımızın idsini verir yani bu id yi değiştirerek bütün kayıtlı yazılara ulaşabiliriz. Botumuz sırasıyla bütün idlere girecek şekilde ayarlanmalıdır. Bunun yanında id yi değiştirttiğimizde yanında yazan yazı isminin çoğunlukla bir önemi kalmaz orada ne yazdığının bir önemi yoktur. Örneğin 1. idli yazının linki şu şekilde olsun “www.site.com/1-ilk-yazi.html” bu url ile “www.site.com/1-yazı-adı.html” bu url arasında hiç bir fark yoktur. Botumuz sırasıyla idleri arttırarak sitedeki bütün sayfaları dolaşabilir. )
  3. Site içi menüleri kullanarak bütün sayfalara erişmek.
    ( Botumuz ilk olarak site içerisindeki menülere bakarak linkleri toplayabilir bu topladığı linkler ile sitedeki yazılara ulaşabilir. Çoğu zaman bu yöntemi kullanmayız. Bu yöntem hem zamanınızı alır hemde yavaş çalışır. )

Belirtilen Sayfalardaki İçerikleri Çeken

Eğer php botumuz kullanıcının belirlediği sayfalardan içerik çekecekse artık bunda sadece içeriği nasıl çekeceğimize bakmalıyız. Onun haricinde başka bir şeye gerek kalmadan hedef sitedeki sayfaları kullanıcı verecektir. Botumuz sadece bu sayfaları işlemekle yükümlüdür.

Veriler Nasıl Çekilir?

Php scriptimiz ilk olarak istediğimiz sitenin kaynak kodlarını bize çekmesi gerekir. Bunu yaparken bir çok yöntem izleyebiliriz. Veya bizim adımıza bu işi kolaylaştıran kütüphaneler kullanabiliriz. Kütüphanelere değinmeden önce herhangi bir kütüphane kullanmadan nasıl verileri çekeriz onu inceleyelim.
İlk olarak file_get_contents() fonksiyonunun inceleyelim.

Örnekte de görüldüğü üzere basit bir şekilde php.net sitesinin kaynak kodlarını alabiliriz. İkinci seçenek olarak Curl sınıfını kullanabiliriz. Bu sınıf için hazırlanmış benimde uzun zamandır kullandığım bir curl kütüphanesini sizlerle paylaşıyım.

Kütüphaneye girmek için tıklayın

Bu kütüphanenin örneklerine buradan ulaşabilirsiniz. Kullanımı ve kurulumu gayet basit olan bu kütüphaneye örnek bir kod yazalım. Yapacağımız işlem yine yukarıdaki gibi php.net sitesinin kaynak kodlarını almak.

ilk olarak kütüphaneyi projemize dahil etmemiz gerekiyor onun için projenin olduğu dosyanın içerisindeyken

komutunu çalıştırmak. Bundan sonra kütüphanemiz projemize yani botumuza eklenmiş olacak. Kaynak kodunu çekmek içinse

kodunu kullanabilirsiniz. Örnekleri inceleyerek post metoduyla nasıl işlem yapabileceğinizi veya diğer parametreler ekleyerek header verilerini değiştirerek site verileri nasıl elde edeceğinizi öğrenebilirsiniz. Bunların dışında php bot yapımı konusunda pek kullanmasam da şu şekilde de hedef site verilerini çekebilirsiniz.

şimdiye kadar php bot yapımında üç farklı yöntemle diğer sitelerden veri çekmeyi gösterdim. Şimdi sıra çektiğimiz bu verileri nasıl düzenleyeceğiz ona geldi.

Veriler Nasıl Düzenlenir / Parçalanır?

Php bot yapımında en önemli yere geldik kaynak kodlarını aldık. Şimdi bu kodlardan bize gereken yerleri parçalamamız gerek. Parçalama işlerinde de bir çok yöntem izleyebiliriz. Bizim işimizi kolaylaştıran bir çok kütüphane var. İlk önce kütüphane kullanmadan php fonksiyonlarını kullanarak verileri nasıl parçalayabiliriz ona bakalım.

ilk olarak inceleyeceğimiz fonksiyon explode() fonksiyonu. Bu fonksiyon metinleri basit bir şekilde parçalamamıza yarıyor. Bir örnek vermek gerekirse

Bu kodun çıktısı şu şekilde olacaktır.

php bot yapımı konusunda veri parçalama işlerinde kullanılan en popüler fonksiyonlardan olan preg_match() veya preg_match_all() fonksiyonlarını inceleyelim bu iki fonksiyon arasındaki tek fark adından da anlaşılacağı gibi preg_match() bir eşleşmeden sonra durur ve yanlızca bir sonuç döndürür. Ama preg_match_all() eşleşmeye uyan bütün sonuçları size verecektir. Bir örnek vermek gerekirse.

bu kodun çıktısı şu şekilde olacaktır.

fakat aynı kodu preg_match_all() fonksiyonu ile kullandığımızda çıktı şuna dönüşecektir.

bu kodun çıktısı ise şu şekilde

Görüldüğü gibi preg_match_all() fonksiyonu bütün eşleşmeleri verdi. Peki bu fonksiyonun ilk parametresi olan ‘#istenilen (.*?) #’ ifadesi nedir? bu ifadeler Regex ifadeleridir. Bunlara başka bir yazıda ayrıntısıyla inceleyeceğiz. Burada sadece bir kullanımı göstereceğim ve php bot yapımında sizin işinizi çoğunlukla görecektir.

Mesela hedef sitenin kaynak kodlarını aldık ve sitenin başlığını çekmek istiyoruz o zaman ifademiz ‘#<title>(.*?)</title>#’ şeklinde olmalıdır. Kod parçalarının istediğimiz parçasına (.*?) ifadesini yerleştirmeliyiz. Önündeki ve arkasındaki ifadelerin uzunlukları fark etmez fakat belirleyici olmasına dikkat edin mesela bu parametreyi ‘#le>(.*?)</titl#’ şekilde yazarsakta çalışacaktır. Yani istediğimiz bir ifade var iki kod parçacığı veya metnin arasında biz oraya (.*?) kodunu ekleyerek o kısmı istediğimizi belirtiyoruz.

Parçalama Yaparken Hangi Kütüphaneleri Kullanabiliriz?

Benim ara ara kullandığım bazı kütüphaneler şunlar.

Düzenlenmiş Verileri Nasıl Veritabanına veya Dosyaya Yazdırabiliriz.

php bot yapımı konusunda başka en önemli taraf ise düzenlenmiş veriyi veya sayfalar arası geçişte kullandığımız id leri bir yerlerde saklamamız gerek. İster veritabanında olsun ister bir dosyada olsun. Veritabanına yazdırmada kullanmanızı önerdiğim sınıf PDO sınıfıdır. Bu sınıfı php nin kendi sitesinden yani bu linkten inceleyebilirsiniz. Ayrıyeten örneklerle birlikte başka bir yazıda PDO sınıfını inceleyebiliriz. Bot scriptimizin sayfalar arasında gezinirken idleri saymasını yine bir veritabanı kullanarak pdo sınıfı veya başka sınıflarla yapabiliriz. Fakat size şimdi vereceğim bir kaç fonksiyonla çok daha rahat bir şekilde belirttiğiniz dosya içerisinde saklayabilir veya saydırabilirsiniz.

bu basit sınıfla php bot yapımı meselesinde bir çok işinizi rahatlıkla görecektir.

Php İle Basit Bir Bot Yapımı

Şimdi basit bir bot yaparak yazıyı bitirelim. Hedefimiz

http://dolar.tlkur.com/ adresinden bir tl nin kaç dolar olduğunu çektirmek

ilk olarak sitenin kaynak kodunu çektiriyoruz.

sitenin kaynak kodlarını bir değişkene aktardık şimdi kaynak kodlarına bakarak istediğimiz yeri bir bulalım.

Örnek Kaynak Kodu ( Php Bot Yapımı )
Örnek Kaynak Kodu ( Php Bot Yapımı )

Görüldüğü üzere istediğimiz metin nerede bulduk buna göre kodumuzu oluşturalım. Kodumuzun son halide aşşağıdaki gibi olacaktır.

php bot yapımı konusunda bir çok konuya değindik daha profesyonel php bot scriptlerini başka yazılarda yayınlayacağım anlatmamı istediğiniz veya örnek olarak yapılmasını istediğiniz php botları varsa eğer yorumlarda belirtmeyi unutmayın. Diğer php bot ile ilgili veya direk php programlama dili ile ilgili yazılara buradan ulaşabilirsiniz.

Diğer Php Bot Örnekleri

  1. Youtube php bot örneği (PHP Simple HTML DOM Parser)

Yazar Hakkında

Yorumlar

  1. ozgur

    hocam benim bir sorum var yukarıda verdiğiniz örnekte USDTRY verisini çektik
    fakat verinin yanında örneğin (2017) diye bir bilgi daha varsa onuda cekiiyor. yani (2017) verisini alma diye bir komut varmı (.*?)

  2. tolga

    Hocam selam, Elimde bir sitenin yaklaşık 500 adet linki var ama hepsinin url’si farklı sıralı değil. Tük url’leri aynı yere peş peşe yapabilir miyim yoksa ayrı ayrı mı uğraşmak gerek ?

  3. Burak

    Öncelikle merhaba, yazınızı okudum ve çok beğendim. Bot örneklerini genişletebilir misiniz?

    Örneğin nöbetçi eczaneleri çekebilirsiniz.

    Son olarak mesela 1 den fazla şeyi çekmek istediğimizde çekeceğimiz sitede 3 tane var ise bunu 3 e kadar otomatik nasıl çektirebiliriz, umarım anlatabilmişimdir.

    Başarılarınızın devamını dilerim.

    1. Admin Yazar

      Bot örnekleri ara ara siteye eklenecek. Bir sonraki örnek nöbetci eczaneler ile ilgili olabilir tabiki. Birden çok eşleşen verileri çekmek istediğinizde php’nin preg_match_all komutunu kullanabilirsiniz. Diğer kütüphanelerle diğer örnekler üzerinden zamanla anlatım yapacağım. Yorumunuz için teşekkür ederim iyi çalışmalar.

  4. sukrudal

    Merhaba hocam,

    Aşağıda yazdığım örnek de img’de aabbcc.php ile bir rakam oluşuyor, ben bu kodu nasıl okuyabilirim.

      1. sukrudal

        Hocam oluşturulan sayının kontrolünü nasıl yapabilirim ?
        Tşk

        index.php

        aabbcc.php
        $sifre=rand(2321,3000);
        $r=rand(0,0);
        $g=rand(0,0);
        $b=rand(0,0);
        $resim =@imagecreatefrompng(“arkaplan.png”);
        $renk =imagecolorallocate ($resim, $r, $g, $b);
        $font =”segoepr.ttf”;
        $font_boyutu =19;
        $x =5;
        $y =30;
        $egim =10;
        imagettftext($resim, $font_boyutu, $egim, $x, $y, $renk, $font, $sifre);
        header (‘Content-type: image/png’);
        imagepng($resim, NULL, 0);
        imagedestroy($resim);

        1. Kemal BAL Yazar

          Şifreyi oluşturduğunda o şifreyi bir oturum(session) da sakla sonrasında kullanıcı formu gönderdiğinde gönderilen sayı ile oturum(session) dakini karşılaştır.

  5. serhat

    hocam ben yabancı uçak bileti sitelerinden belirli tarihlerde uçak bileti sorgusu yapmasını ve bilet fiyatını göstermesini istiyorum nasıl yapabilirim ?

  6. cengizhan

    merhaba veriyi çekmek istediğim sitede veri satır atlatılmış ve başında bir işaret yok bu veriyi nasıl çekerim?

    örneğin:

    4.837

    burdaki 4.837 verisini çekmek istiyorum nasıl çekebilirim ?

  7. semih

    kod tamamda bunu uygulamak için ben hostumu değilde pc me indirmek istiyorum verileri ne gibi programlara ihtiyacım var artı nasıl çalıştıracağım teşekkürler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir