PHP Bot Yapımı – Uzak Siteden Veri Çekmek

Php ile bot yazarken iki yöntem kullanılır bunlardan biri file_get_contents() yöntemi, bir diğeri ise Php CURL yöntemidir. İlk yöntem local ortamda çalışır ancak bazen sunucuya attığınızda çalışmayabilir o yuzden en sağlıklı yöntem CURL yöntemidir. Bu makalede CURL ile php bot nasıl yazılır ? bundan bahsetmek istiyorum.

Php ile bot yazmak nedir, neden ve nerelerde kullanırız bundan bahsedelim biraz; sitenizde kullanmak istediğiniz bir veriyi başka bir siteden, sayfadan dinamik olarak çekebiliriz. Örneğin film sitelerinin birçoğo bu iş için kendi veri tabanını kullanmaz ve başka bir siteden kaynak alarak sayfasını doldurur ve bu işlem sadece metin türü veriler için değil resim dosyalarına varana kadar çekebilirsiniz.

Şimdi CURL yöntemiyle php bot nasıl yazılır buna bakalım.

Öncelikle kendimize Curl fonksiyonu oluşturalım.

Eğer bir post verisi gönderecekseniz 2. parametreyi “kullanici=bilisim34&sifre=123456” şeklinde kullanmanız gerekecek.

Örneğin :

Bu örnek kullanımda kendi sitemizin paneline giriş yapmak için kullanıcı adı ve şifremizi postlamış olduk. Doğru bilgileri yazdığımızda curl fonksiyonu sayesinde PHP üzerinden panelimize de ulaşabiliriz.

PHP botu ile belirli içerikleri alma

Sitelerin içeriklerine direkt olarak ulaştıktan sonra istediğimiz kısımdaki değeri ve içeriği almak için öncelikle bir ara belirlemeliyiz. Sitenin kaynak kodunu inceleyip ayırt edici bir aralık bulmalıyız.

Ben örnek bir içerik sunacağım, ve bu örnek içerikten istediğimiz kısmı alacağız. Metereoloji sitesinin İstanbul için verdiği sonuçların bulunduğu kısmın kaynak kodu aşağıdaki gibi:

Çok karışık bir kaynak kodu gibi görünüyor ama aslında tam bizim aradığımız gibi bir sonuç. Farkettiyseniz tüm değerler ayırt edilebilecek belli bazı elementlerin arasında. Örneğin tarih class=”sond_zaman”> ile </td> arasında.

Bir içerikte istediğimiz aralığı almak için yine curl gibi hazır bir fonksiyon kullanacağız. Bu fonksiyonu kopyala-yapıştır yaparak sizde kullanabilirsiniz.

Bu parcala_ve_al  fonksiyonuda basit bir şekilde aralık içerisindeki değeri bize verir. Kullanımı için 3 parametre vardır. İlk parametre aralığın başı, ikinci parametre aralığın sonu, üçüncü parametre ise araştırılacak içerik.

Bu örnekte sitemizin kaynak kodlarına ulaşıp <title>…</title> arasını yani sitemizin başlığını almış olduk ve ekrana yazdırdık. Değerin yüklendiğ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. Örneğin birden fazla title aralığı olsaydı diğer sonuçlarda [1], [2] şeklinde diğer dizilere sıralanacaktı.

Gelelim bu fonksiyonu bahsettiğimiz meteroloji sitesinde uygulamaya:

Sitede alt ve üst sıcaklıkların bulunduğu değerlerin aralığını bulup ara fonksiyonumuz sayesinde aralığı alıp ekrana yazdırdık. Sonuç olarak ekranda İstanbul da 11 Kasım Çarşamba için tahmini sıcaklık:16,5°C  şeklinde bir çıktı alacağız.

Kısaca bot içerik alma mantığı sitelerdeki içeriklerin ayırt edici aralıklarını bulup o kısmı almaya dayanmaktadır. Bunların dışında hayal gücünüzü kullanarak daha bir çok mantık üretebilir ve her türlü içeriğe ulaşıp dilediğiniz botları kodlayabilirsiniz.

PHP ile gerçek ip adresini almak

Aşağıdaki basit fonksiyonu projelerinize dahil ederek kullanıcının gerçek ip adresini alabilirsiniz .

Sürekli kullandığım fonksiyonlardan biridir.

 

 

Smarty içerisinde ezSql sınıfı kullanımı

önceki yazılarda smarty ve ezSql ile alakalı bilgiler verip nasıl kurulduğunu ve kullanım örneklerini yaptık . Bu yazımda ise smarty tema moturu içerisinde ezSql veritabanı sınıfının nasıl kullanılacağına bakacağız .

Smarty Nedir ?

Smarty Kurulumu Nasıl Gerçekleştirilir ?

ezSql nedir ?

 

Önceki yazılarımda smarty ve ezSql classlarını ayrı ayrı anlattığım için kurulumu yapacağınızı varsayıyorum .

 

PHP smarty kurulumu

Önceki yazımda smarty framework’ün ne olduğunu açıklamıştım . Bu yazımda ise smarty framework kurulumu ve ilk örneğimizi yapacağız .

Buradaki linkten smarty framework son sürümünü indirelim ve zip içerisinden web sunucumuza yada localhosta sadece libs klasörünü çıkartalım .

Ardından aşağıdaki gibi klasör ve dosya yapımızı oluşturalım .

cache
config
libs
templates
templates_c
index.php

Uyarı : Templates ve cache klasörleri yazma iznine sahip olmalıdır .

Ardından index.php sayfamızı açalım ve kodumuzu yazalım

 

Tema dosyamızı oluşturmamız gerekiyor . Bunun için templates klasörü altına index.tpl isimli bir dosya oluşturalım ve içerisine html ve smarty kodumuzu yazalım

Smarty ile ilk örneğimiz bu şekildedir . Kısaca açıklamak gerekirse ;

index.php dosyamızda smarty template ve cache klasörleri yollarını belirledir .
Ardından merhaba_dunya adında bir değişken tanımladık ve bu değişkene Merhaba Dünya yazısını atadık .
display fonksiyonu ile de değişkenimizi templates/index.tpl dosyamıza gönderdik . İlk örneğimiz burada son buldu .

Bundan sonraki yazımda php smarty ile veritabanı işlemlerine gözatacağız .

PHP smarty framework nedir ?

PHP ile kullanabileceğimiz birçok framework mevcuttur . Bir çoğu MVC mimarisine sahip framework’ lerdir . MVC ( model – view – controller ) mimarisi yazılımı html taglarını ve veritabanı işlemleri birbirinden ayıran yapıya sahiptir . Smarty ise sadece yazılımı html taglarından ayıran yapıdadır . Bu tip yapılara sahip framework’ lere tamplate engine denir .

MVC yapısına ait resmi aşağıda inceleyebilirsiniz .

mvc

Smarty açık kaynak kodlu php template motorudur . Ön tanımlı olarak hemen hemen tüm php hazır sistem fonksiyonlarını içerisinde barındırır . Öne çıkan birkaç özelliğini aşağıdaki gibi sıralayabiliriz .

  • Control flow, foreach
  • if, elseif, else gibi koşullu ifadeleri kullanabilme
  • Değişken oluşturabilme ve özelleştirme – Örnek {$variable|nl2br}
  • Hazır fonksiyonlar – Örnekler {html_select_date start_year=’-5′ end_year=’+5′}
  • Fonksiyonları kendi düzenleyecileri ile oluşturabilme imkanı / fonksiyonlar / çıkış filtreleri
  • Sayfaları önbelleğe alabilme

Sayfa önbellekleme yani cache özelliği kullanışlı ve kolaydır . Küçük bir kod ile kolayca cache özelliğini aktif edebiliriz .

Smarty yapısına ait kod aşağıdaki gibidir .

 


HTML yapısında kullanımı :

 

ezSQL | Veritabanı Sınıfı

Neden ezSQL?

Bu bana sorulduğunda her zaman verdiğim cevap pratikliği ve wordpress gibi bir devin kullanması. Yapımcısı Justin Vincent ise şöyle cevaplamış;

  • PHP sistemlerinizde veritabanınızı hızlı ve kolay bir şekilde yönetmek. ( mySQL / Oracle8/9 / InterBase/FireBird / PostgreSQL / MS-SQL / SQLite / SQLite c++)
  • Scriptinizin üstüne eklediğiniz tek bir php dosyasından oluşur ve standart veritabanı fonksiyonlarını hızlı ve kolay birşekilde kullanmanızı sağlar.
  • Sunucu ekstra yük bindirmemek için sorguları otomatik olarak önbelleğe alır ve kullanmanıza izin verir.
  • Çok rahat bir şekilde sorgularınızı debug etme imkanı sunar.
  • Çoğu ezSQL fonksiyonu Objects, Associative Arrays, veya Numerical Arrays olarak sonuç döndürür.
  • Proje geliştirme sürenize katlı sağlar, kodlarınızı hızlandırır ve optimizasyon sağlar.
  • Küçük bir sınıftır ve sisteminize yük bindirmez.

Kurulumu

  1. ezSQL sınıfının en son sürümünü buradan indirin
  2. Betiğinizin ana dizinine bir klasör oluşturun ve adını ezSQL yapın (Opsiyonel)
  3. İndirdiğiniz ezSQL klasörünün içindeki shared klasörüne girin ve ez_sql_core.php dosyasını 2. adımda oluşturduğunuz klasör içine atın.
  4. mySQL için ana dizinden mysql klasörüne girin ve içindeki ez_sql_mysql.php dosyasını 2.adımda oluşturduğunuz klasör içine atın.
  5. Bu iki dosyayı include ederek veritabanı bağlantınızı yapın (Aşağıdaki kodu inceleyin)

Yukarıdaki kodları mysqlBaglan.php olarak kayıt ederek veritabanı işlemi yapacağınız sayfalara dahil ederek kullanabilirsiniz.

ezSQL fonksiyonları

  1. $db->get_results — birden fazla satırdan oluşan sonuç kümesi döndürür
  2. $db->get_row — tek bir satır için sonuç kümesi getirir
  3. $db->get_col — tek bir sutündaki değeri getirir
  4. $db->get_var — tek bir satırdaki tek bir değeri getirir
  5. $db->query — veritabanına sorgu gönderir (INSERT, UPDATE, DELETE vb işlemler için)
  6. $db->debug — son sorguyu ve sonuç kümesini yazdırır
  7. $db->vardump — sonucu ve yapısını yazdırır
  8. $db->select — yeni bir veritabanı seçer
  9. $db->get_col_info — sutünların bilgilerini getirir
  10. $db->hide_errors — ezSQL hatalarını deaktif eder
  11. $db->show_errors — ezSQL hatalarını aktif eder
  12. $db->escape — Zararlı karakterleri temizler (addslashes gibi)
  13. $db = new db — Yeni veritabanı nesnesi oluşturur.

ezSQL değişkenleri

  1. $db->num_rows – Eğer varsa son sorgudaki dönen satır sayısını verir.
  2. $db->insert_id — INSERT sql sorgusu kullanıldığında oluşan AUTO_INCRIMENT değerini verir
  3. $db->rows_affected – Son yapılan INSERT, UPDATE veya DELETE sql sorgularında etkilenen satır sayısını verir.
  4. $db->num_queries – Scriptte çalıştırılan gerçek (önbellekte olmayan) sorgu sayısını verir.
  5. $db->debug_all – Eğer true değer alırsa (Bknz: $db->debug_all = true;) Scriptteki TÜM sorguları ve TÜM sonuçları verir.
  6. $db->cache_dir – Önbellekleme dosyalarının dizini.
  7. $db->cache_queries – Sorgu sonuçlarını önbelleğe almayı sağlar (Bknz: mysql/disk_cache_example.php)
  8. $db->cache_inserts – Girişleri önbelleğe alır (Bknz: mysql/disk_cache_example.php)
  9. $db->use_disk_cache – Disk önbellek sistemini kullanmayı sağlar (Bknz: mysql/disk_cache_example.php)
  10. $db->cache_timeout – Önbellek zaman aşım süresi (Bknz: mysql/disk_cache_example.php)

$db->query

Veritabanına sorgu göndermeye yarar, genelde INSERT,DELETE,UPDATE gibi işlemler için kullanılır.

Örnek

$db->get_var

$db->get_row

Veritabanından tek bir satır getirmeye yarar, örneğin bir üye’ye ait bilgileri almak istiyorsunuz.

$db->get_results

Bu kadar bilginin ezSQL’i kullanmaya başlamak için yeterli olacağını düşünüyorum, siz öyle düşünmüyorsanız burdan  bir bakın

PHP 5.6’da Yeni Neler Var?

Constant Scalar Expressions
Const tanımlaması yapılırken numerik veya string işlemleri yapılabilir.

Çıktı :
4
The value of THREE is 3

“…” üç nokta operatörü, Variadic Fonksiyonlar
Fonksiyon tanımında … kullanarak n adet parametre girişi sağlanabilir.
Önceki versionlarda fonksiyona girilen parametrelere func_get_args() fonksiyonu ile ulaşıyorduk.

Çıktı:
$req: 1; $opt: 0; number of params: 0
$req: 1; $opt: 2; number of params: 0
$req: 1; $opt: 2; number of params: 1
$req: 1; $opt: 2; number of params: 2
$req: 1; $opt: 2; number of params: 3

“…” operatorü ile unpack etme işlemi
array ve Traversable objeler “…” ile dışarı çıkartılabilir.
(Ruby’deki splat operatörü)

Çıktı:
6

Çıktı:
string(25) “1, 2, 3, 4, 5, 6, 7, 8, 9”

“**” Üs Alma Operatörü

Çıktı:
2 ** 3 == 8
2 ** 3 ** 2 == 512
a == 8

phpdbg
PHP ‘ de artık interaktif bir debugger var : phpdbg.
http://phpdbg.com/docs

default_charset
php.ini’deki default_charset değeri artık php’deki htmlspecialchars() gibi fonksiyonlar için de varsayılan olarak kullanılacak.

Büyük Dosya Upload Etme
2GB ‘ dan büyük dosyaları upload etmek artık mümkün.

gost-crypto Hash Algoritması
gost-crypto hash algoritması eklendi.
http://www.faqs.org/rfcs/rfc4357.html

GMP Operator Overloading
GMP objeleri operator overloading’i destekliyor.
http://docs.php.net/manual/en/book.gmp.php