PHPde bot yapmak gayet basit ve eğlencelidir. Gunumuzde en cok başka sitelerden icerik (c)almak amacıyla kullanılan botlar bir cok işe yarar ve harika fonksiyonları vardır.
Orneğin meteoroloji sitesinden bir PHP botu yardımıyla hava durumu bilgilerini veya borsa sitelerinden doviz kurlarını cekip kendi sitenizde en guncel şekilde yayınlayabilirsiniz.
PHP ile site iceriklerine ulaşmak
Bu işi yapmak icin en basitinden file_get_contents() fonksiyonuna sahibiz. İcerisine yazazacağımız ilk parametredeki adrese girip kaynağı bir değişkene yuklememizi ya da ekrana yazdırmamızı sağlar.
$site = "http://www.phpr.org";
$icerik = file_get_contents($site);
echo $icerik;
Bu orneği calıştırdığımızda file_get_contents() fonksiyonu sayesinde http://www.phpr.org adresine girip sitenin kaynağına ulaşıp o kaynağı ekrana yazdırdık.
Sitelere ulaşmanın bir başka yolu yolu ise curl fonksiyonlarıdır. Curl fonksiyonları sayesinde bir adrese girmekle kalmayıp aynı zamanda girilen adrese form verileri gonderebiliriz ve kullanıcı girişi yapabiliriz. Yani PHPde curl sayesinde sitelere aynı bir gercek kullanıcıymış gibi, bir browserda gezer gibi girebiliriz.
Benim hazırlamış olduğum curl fonksiyonu ile istediğiniz adrese POST metodunda veri gonderebilirsiniz:
function curl($url, $post=false)
Bu fonksiyonu aynı file_get_contents fonksiyonu gibi kullanabilirsiniz. Eğer bir post verisi gonderecekseniz 2. parametreyi kullanici=musa&sifre=123456″ şeklinde kullanmanız gerekecek.
echo curl("http://www.phpr.org/wp-login.php", "user_login=kullanici&user_pass=sifre");
Bu ornek kullanımda kendi sitemizin paneline giriş yapmak icin kullanıcı adı ve şifremizi postlamış olduk. Doğru bilgileri yazdığımızda curl fonksiyonu sayesinde PHP uzerinden panelimize de ulaşabiliriz.
PHP botu ile belirli icerikleri alma
Sitelerin iceriklerine direkt olarak ulaştıktan sonra istediğimiz kısımdaki değeri ve iceriği almak icin oncelikle bir ara belirlemeliyiz. Sitenin kaynak kodunu inceleyip ayırt edici bir aralık bulmalıyız.
Ben ornek bir icerik sunacağım, ve bu ornek icerikten istediğimiz kısmı alacağız. Metereoloji sitesinin İstanbul icin verdiği sonucların bulunduğu kısmın kaynak kodu aşağıdaki gibi:
[TR]
[TH="class: arkaTrh"]20 Haziran Pazar[/TH]
[TD="class: minS"]21[/TD]
[TD="class: maxS"]30[/TD]
[TD]

[TD="class: minN"]59[/TD]
[TD="class: maxN"]93[/TD]
[TD]

[TD]18[/TD]
[TD="class: arkaGcm minSgcm"]11.4[/TD]
[TD="class: arkaGcm maxSgcm"]32.2[/TD]
[TD="class: arkaGcm minSgcm"]16.7[/TD]
[TD="class: arkaGcm maxSgcm"]25.5[/TD]
[/TR]
Cok karışık bir kaynak kodu gibi gorunuyor ama aslında tam bizim aradığımız gibi bir sonuc. Farkettiyseniz tum değerler ayırt edilebilecek belli bazı elementlerin arasında. Orneğin tarih class=arkaTrh> ile arasında.
Bir icerikte istediğimiz aralığı almak icin yine curl gibi hazır bir fonksiyon kullanacağız. Bu fonksiyonu kopyala-yapıştır yaparak sizde kullanabilirsiniz.
function ara($bas, $son, $yazi)
Bu ara fonksiyonuda basit bir şekilde aralık icerisindeki değeri bize verir. Kullanımı icin 3 parametre vardır. İlk parametre aralığın başı, ikinci parametre aralığın sonu, ucuncu parametre ise araştırılacak icerik.
$icerik = file_get_contents("http://www.phpr.org");
$baslik = ara("", "", $icerik);
echo $baslik[0];
Bu ornekte sitemizin kaynak kodlarına ulaşıp arasını yani sitemizin başlığını almış olduk ve ekrana yazdırdık. Değerin yuklendiği değişkene [0] dememizin sebebi ilk yakalanan aralığı almamız. Eğer benzer aralıklardan daha fazla var ise onlarıda dizinin diğer elemanları olarak ekleyecektir. Orneğin birden fazla title aralığı olsaydı diğer sonuclarda [1], [2] şeklinde diğer dizilere sıralanacaktı.
Gelelim bu fonksiyonu bahsettiğimiz meteroloji sitesinde uygulamaya:
$site = "http://www.meteor.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL";
$icerik = file_get_contents($site);
$alt_sicaklik = ara('class="minS">', '', $icerik);
$ust_sicaklik = ara('class="maxS">', '', $icerik);
echo 'İstanbul hava durumu: ' . $ust_sicaklik[0] . '/' . $alt_sicaklik[0];
Sitede alt ve ust sıcaklıkların bulunduğu değerlerin aralığını bulup ara fonksiyonumuz sayesinde aralığı alıp ekrana yazdırdık. Sonuc olarak ekranda İstanbul hava durumu: 21/30 şeklinde bir cıktı alacağız.
Kısaca bot icerik alma mantığı sitelerdeki iceriklerin ayırt edici aralıklarını bulup o kısmı almaya dayanmaktadır. Bunların dışında hayal gucunuzu kullanarak daha bir cok mantık uretebilir ve her turlu iceriğe ulaşıp dilediğiniz botları kodlayabilirsiniz.