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?
- Veriler Nasıl Çekilir?
- Veriler Nasıl Düzenlenir / Parçalanır?
- Parçalama Yaparken Hangi Kütüphaneleri Kullanabiliriz?
- Düzenlenmiş Verileri Nasıl Veritabanına Veya Dosyaya Yazdırabiliriz.
- Php İle Basit Bir Bot Yapımı
- Diğer Php Bot Örnekleri
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.
- Hedef sitenin sitemapını kullanarak bütün sayfaları bulmak.
( Sitemap ile bütün sayfaları kolay bir şekilde elde edebiliriz ) - 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. ) - 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.
<?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
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
<?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.
<?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
<?php $metin = "bellenti.com örnek yazısı"; $parcalanmis = explode("örnek",$metin); print_r($parcalanmis); ?>
Bu kodun çıktısı şu şekilde olacaktır.
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.
<?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.
Array ( [0] => istenilen içerik1 [1] => içerik1 )
fakat aynı kodu preg_match_all() fonksiyonu ile kullandığımızda çıktı şuna dönüşecektir.
<?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
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.
- PHP Simple HTML DOM Parser
- PHP Html Parser
- PHP Fast Simple HTML DOM Parser
- DiDOM
- Pharse
- DOMXPath ( php sınıfı harici bir kütüphane değil )
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.
<?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
ilk olarak sitenin kaynak kodunu çektiriyoruz.
<?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.

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 $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.
Diğer Php Bot Örnekleri
- Youtube php bot örneği (PHP Simple HTML DOM Parser)
- Nöbetçi eczane bilgileri php bot örneği (preg_match_all, Xpath, explode)
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ı (.*?)
echo str_replace(“(2017)”,null,$cikti[1]);
Şeklinde yapabilirsin
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 ?
Görmeden bir şey diyemeyeceğim.
Ö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.
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.
Merhabalar, veri çekerken http://www.site.com yazan yerleri http://www.sitesi.com olarak nasıl değiştirebilirim
Merhaba hocam,
Aşağıda yazdığım örnek de img’de aabbcc.php ile bir rakam oluşuyor, ben bu kodu nasıl okuyabilirim.
Örneği göremedim img etiketi içerisindeki dosya ismini mi almaya çalışıyorsun?
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);
Ş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.
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 ?
Yapım aşaması sitenin yapısına göre değişkenlik gösterecektir. İsterseniz iletişim bölümünden bana ulaşabilirsiniz.
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 ?
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
xampp kullanabilirsin
Kolay gelsin hocam. Php bot ile siteme kim ne yazıp girmiş. Mobildenmi gelmiş yoksa masaüstü bilgisayardanmı google analtizy gibi onu nasıl yapabilirim.
Site dönen $_SERVER[‘HTTP_USER_AGENT’] ve $_SERVER[‘HTTP_REFERER’] bilgileri ile algoritmanızı geliştirebilirsiniz.
Merhaba veri çektiğimiz site ip ve cookie bazlı engel koymuş. 50 çekmeden sonra sayfs boş ve uyarı geliyor. Bu durumu nasıl aşabiliriz? Cookie olayını tarayıcı ayarlarından çözdüm, ip olayını da ultrasurf ile denedim. Ultrasurf açınca siteye tarayıcıdan manuel giriyorum ancak local ya da sitede botu çalıştırdığımda engel kalmıyor. Yardımcı olursanız sevinirim. Teşekkürler.
iletişim sayfasındaki adrese siteyi ve ayrıntılı bilgiyi gönderebilirseniz daha rahat yardımcı olabilirim. Belki ücretsiz proxy’leri kullanarak çözülebilir.
siz sadece çekeceğiniz veriyi içerikte bir tane var ise bot olarak çekimini belirtmissiniz.
preg_match(‘#(.*?)#’, $siteVerisi,$cikti);
bu içerikten ilgili sayfada 10 tane var ise hepsinin nasıl çıktısını alabiliriz ?
preg_match_all fonksiyonunu kullanabilirsin.
hocam ben son dakika haberleri çekmek istiyorum ama veriler sürekli değişiyor yani a haberi varken 3 sn sonra b haberi geliyor slider değil ama alt yazı onu nasıl alablirim
resmi bir eğitim kurumu ofis memuruyum php tecrubemde var. yapmak istediğim tam olarak şu her ay 100 e yakın öğrenci için ofiste kullandığımız bir programa kaydediyorum bu bilgileri daha sonra milli eğitimin sitesine kaydediyorum yapmak istediğim şu tc ve doğum tarihiyle bilgileri sorgulatıp diğer bilgileri masa ustu programıma kaydetmek daha sonra başka bir sayfada milli eğitimin sayfasına girip masaustu programına notlar giriyorum ve bu bilgileri tekrar milli eğitimin sayfasına otomatik olarak eklemek istiyorum, yani tc ve doğum tarihi gireceğim bilgileri getir diye tıklayıp masa ustu programıma ekleyeceğim öğrncilerle ilgili bilgileri girdikten sonra öğrenci bilgilerini yolla diyecek ve milli eğitimin sitesine yollayacağım. hangi servisleri kullanabilirim acaba
Selamlar, PHP bot ile iletişim formu gibi sayfaları çektirmek mümkün mü? Mümkünse, anlatabilme şansınız olur mu? Çok teşekkür ederim.
İletiim bölümlerinden ne gibi veriler elde etmek istediğinize bağlı.
Hocam merhaba yazdığınz ikinci url yapılı botu anlatır mısınız?
Hocam linkedin profilinden veri çekmek için nasıl bir yol izlemeliyim.mesela birinin profilinden deneyimleri nasıl çekebiliriz ? linkedin in anasayfasından istediğm veriyi çekiyorum ama profilde değer boş geliyor.. link alanına manuel yazıldığında oturum açmadan görüntüleniyor bu bilgiler normalde..ama bot ile boş değer dönüyor.