İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

PHP Bot Yapımı Anlatımı

Filmatinesi

0
Onaylı Üye
Katılım
20 Eylül 2010
Mesajlar
205
Reaction score
22
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.

Kod:
<?php
$veri = file_get_contents("http://php.net/");
echo $veri;
?>

Ö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

Kod:
composer require php-curl-class/php-curl-class

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


Kod:
<?php
require __DIR__ . '/vendor/autoload.php';
use \Curl\Curl;
$curl = new Curl();
$curl->get('http://php.net/');
if ($curl->error) {
echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage . "\n";
} else {
echo 'Response:' . "\n";
var_dump($curl->response);
}
?>

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.


Kod:
<?php
$file = fopen ("http://php.net/", "r");
$veri = "";
while (!feof ($file)) {
$line = fgets ($file, 1024);
// Verileri Satır Satır Çekiyoruz.
$veri .= $line;
}
fclose($file);
echo $veri;
?>

ş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

Kod:
<?php
$metin = "bellenti.com örnek yazısı";
$parcalanmis = explode("örnek",$metin);
print_r($parcalanmis);
?>

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


Kod:
Array
(
  [0] => bellenti.com
  [1] => yazısı
)

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.


Kod:
<?php
$metin = "bellenti.com örnek yazısı. istenilen içerik1 bu bir örnek yazıdır istenilen içerik2 yazının devamı";
preg_match('#istenilen (.*?) #', $metin,$cikti);
print_r($cikti);
?>

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


Kod:
Array
(
    [0] => istenilen içerik1
    [1] => içerik1
)

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


Kod:
<?php
$metin = "bellenti.com örnek yazısı. istenilen içerik1 bu bir örnek yazıdır istenilen içerik2 yazının devamı";
preg_match_all('#istenilen (.*?) #', $metin,$cikti);
print_r($cikti);
?>

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


Kod:
Array
(
    [0] => Array
        (
            [0] => istenilen içerik1
            [1] => istenilen içerik2
        )

    [1] => Array
        (
            [0] => içerik1
            [1] => içerik2
        )

)

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.

Kod:
<?php
class botDosya
{
private $dosya;
function sec($dosyaAdi)
{
$this->dosya = $dosyaAdi;
return $this;
}
function yaz($veri)
{
file_put_contents($this->dosya, $veri);
return $veri;
}
function oku()
{
$dosya = file_get_contents($this->dosya);
return $dosya;
}
function say($ileri = true)
{
$sayi = $this->oku();
if($ileri)
{
$yeniSayi = (int)$sayi;
$yeniSayi++;
$this->yaz($yeniSayi);
}else{
$yeniSayi = (int)$sayi;
$yeniSayi--;
$this->yaz($yeniSayi);
}
return $this;
}
}
$f = new botDosya();
$f->sec("text.txt")->yaz("1");
echo $f->sec("text.txt")->oku();
$f->sec("text.txt")->say();
// say() fonksiyonundan sonra oku() fonksiyonu kullanılabilir
echo $f->sec("text.txt")->say()->oku();

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.


Kod:
<?php
$siteVerisi = file_get_contents("http://dolar.tlkur.com/");

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


kaynakKodu_o.jpg


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.

Kod:
<?php
$siteVerisi = file_get_contents("http://dolar.tlkur.com/");
preg_match('#<span class="rate" id="USDTRY">(.*?)</span>#', $siteVerisi,$cikti);
echo $cikti[1];
?>

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.

Kaynak: bellenti.com
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst