16/03/2012 14:49

PHP Robot/Bot yazılımı 2. Kısım, kendi fikirlerim...

PHP Robot/Bot yazılımı 2. Kısım, kendi fikirlerim...

Yücel KAHRAMAN

Merhaba Arkadaşlar,

 

Bu yazının birinci kısmında bir web sayfasına bağlanarak, o sayfa da bulunan bağlantıları ve bağlantı başlıklarını nasıl ayrı ayrı dosyalara kaydedeceğimizi anlatmıştım.

 

Bu yazıda ise bu kaydettiğimiz bağlantıları ve bağlantı başlıklarını nasıl kullanabiliriz bunu anlatıcam, konunun daha iyi anlaşılabilmesi için yine ilk yazımdaki gibi parça parça gidicez.

 

Aslında PHP yazılım dili bizlere bir çok olanak sunmaktadır, PHP bilgimizi ne kadar arttırır isek o kadar işimiz basitleşecektir ve daha yeni fikirler üreterek kodlarımızı daha sade ve analaşılır bir hale getirebiliriz...

 

Lafı fazla uzatmadan başlayalım, ilk aşama da önceki yazım da text dosyalarına kaydettiğimiz bağlantıları ve başlıkları PHP file komutu ile açıyoruz, PHP file komutu kullanmamın sebebi her satırı bir dizi değişken olarak alıgılamasını istediğim içindir, işte kodumuz:

 



PHP KODU

$baslik 
= @file("./adresler/basliklar.txt"FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
$adres = @file("./adresler/linkler.txt"FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);

PHP file komutu ile beraber kullanabileceğimiz bir çok özellik mevcuttur, bunlar aşağıdaki gibidir.

 

İsteğe bağlı bu değiştirgede şu sabitlerden bir veya daha fazlasını belirtebilirsiniz:

 

FILE_USE_INCLUDE_PATH    
Dosya include_path yönergesinde belirtilen yollarda aranır.

FILE_IGNORE_NEW_LINES    
Her dizi elemanının sonuna satırsonu karakteri eklenmez.

FILE_SKIP_EMPTY_LINES    
Boş satırlar atlanır.

FILE_TEXT    
İçerik UTF-8 kodlu döndürülür. Özel bir bağlam oluşturarark farklı bir kodlama belirtebilirsiniz. Bu seçenek FILE_BINARY ile birlikte kullanılamaz.

FILE_BINARY    
İçerik ikil veri olarak okunur. Bu öntanımlıdır ve FILE_TEXT ile birlikte kullanılamaz.


 

 

Evet text dosyalarımızı aktardık, şimdi ise kullanacağımız adresi ve başlığı dizi anahtarı ile belirliyoruz, siz bunu bir for döngüsüne bağlayabilirsiniz veya $_GET değişkenine atayıp her seferinde yeni bir adres ve başlık kullanılmasını isteyebilirsiniz.

 



PHP KODU

$secilen_adres 
= @$adres[1];
$secilen_baslik = @$baslik[1];

 

veya

 



PHP KODU

$secilen_adres 
= @$adres[$_GET['gelen_anahtar']];
$secilen_baslik = @$baslik[$_GET['gelen_anahtar']];

 

Ziyaret edeceğimiz adresi seçtik, şimdi bu bağlantıyı da yine PHP file komutu ile yapıyoruz.

 



PHP KODU
$lines = @file($secilen_adresFILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);

 

Yukarıda da belirttiğim gibi PHP file kullanmamızın sebebi ziyaret ettiğimiz siteyi satır satır okuyabilmek içindir...

Site de bulunan bütün yazıları ve HTML taglarını satır satır $lines dizi değişkenine aktardık.

 

Her ihtimale karşı eğer PHP file komutunda kullandığımız FILE_SKIP_EMPTY_LINES değeri işlev yapmaz ve boş satırlarıda okursa diye, bu aşağıda verdiğim fonksiyon boş satırları silmenize yardımcı olacaktır.

 



PHP KODU

function bosSatirlariSil($satirlar)
{
    
    
$satirlar preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\n\r]+/""\n"$satirlar);

    
$satirlar=array_diff($satirlar,array(""," ","\r"));
    
    
$yeniSatir = array();
    
    for(
$i=0$i count($satirlar); $i++){
        if(isset(
$satirlar[$i]) and $satirlar[$i] != "\n"$yeniSatir[] = $satirlar[$i];
    }
    
    return(
$yeniSatir);
}

$lines bosSatirlariSil($lines);

 

Aktardığınız site de ki kodların ve yazıların arasında, boş satırlar var mı diye aşağıda verdiğim fonksiyonu kullanarak kontrol edebilirsiniz.

 



PHP KODU

foreach ($lines as $num => $line) {
    echo 
"Satır =<b>{$num}</b>: " htmlspecialchars($line) . "
\n"
;
}

Şimdi gelelim aktardığımız sayfa da ki yazılardan istediğimiz alanı almaya, en sevdiğim yanı da bu aslında satırlar her zaman değişebilir karşı site de en küçük bir değişiklik bile sizin belirlediğiniz satırın bir yukarı veya bir aşağıya kaymasına sebep olabilir bu durum da kodlarınız çalışmayacaktır, ben buna kendi çapım da şöyle bir yöntem geliştirdim.

 



PHP KODU

$BulunanKategori
='';
for(
$i=410,$s=440$i != $s$i++)
{            
   if(
preg_match('/cat-header/',$lines[$i]))
   {
       
$BulunanKategori .= trim($lines[$i]);
       
$s=($i+1);
    }   
}

Üstte ki kod da PHP for döngüsü ile 410. ve 440. satırların arasını döngüye sokuyorum ve bu satırlar da preg_match komutu ile cat-header değerini arıyorum, bulduğum zaman ise bunu başka bir değişkene aktarıp $s değişkenine $i değişkenini ekleyip + 1 yapıyorum, bu sayede aradığımız alan bulunduğu zaman PHP for döngüsünü durdurmuş oluyoruz.

Bu şekil de istediğiniz kadar veriyi tarayıp başka bir değişkene aktararak kullanabilirsiniz, bu resim olabilir yazı içeriği olabilir veya yazı başlığı olabilir.

 

Umarım anlaşılır bir makale ortaya çıkmıştır, herhangi bir sorunuz olursa yorum olarak sorabilirsiniz.

 




Yazıya yapılan yorumlar


Sen de yorum yap... (0)

Facebook Yorumları

İlgili Etiketler

» PHP » Robot » Yazılım » fikirler » file » preg_match » yeni » for » cURL

Kullanıcı Girişi