• 24-11-2010, 17:57:05
    #1
    Merhaba Arkadaşlar;

    Forumda bazı arkadaşların talebi üzerine en basite indirgerek bir bot anlatımı hazırladım. Şimdilik sadece haber botuna ait döküman hazırlayabildim, video, müzik vb. botlarla ilgili de yazı yazacağım. Elimden geldiğince temel bilgilerle, bir bot yazımı hazırladım. Hangi siteye ait bot olduğuna dair bilgiyi, 1.Adımda görebilirsiniz. Yazım eğitim amaçlı olup, tüm hukuki sorumluluklar kullanıcıya aittir.

    Kullandığımız Fonksiyonlar;
    * file_get_contents
    * preg_match
    * empty

    1.Adım ( Site Tanımlama ) ;

    <?php
     $m6k = $_GET["m6k"];
     $url="http://www.h a b e r t u r k.com/gundem/haber/$m6k-haber";
     $cek = file_get_contents($url);
    Açıklama : $url değişkenine yazmış olduğum linkde $m6k yerine haber id'si gelmektedir. Yazımın devamın da niye böyle yazdığımı anlayacaksınız.

    2.Adım ( Çekilecek Veriler ) ;

    preg_match('#<h1 class="header">(.*?)</h1>#s',$cek,$haberbaslik);
    preg_match('#<h2 class="spot">(.*?)</h2>#s',$cek,$haberkisa);
    preg_match('#<div class="date" id="HaberTarih">(.*?)</div>#s',$cek,$habertarih);
    preg_match('#<span id="news-detail-body"><p>(.*?)</div>#s',$cek,$habericerik);


    Açıklama : Çekeceğimiz haber içeriği verisi <span id="news-detail-body"><p> ila
    <p> kodlarının arasında yer alıyor. preg_match fonksiyonunun kullanımı bu biçimde

    Örneğin; preg_match('#<span id="news-detail-body"><p>(.*?)</div>#s',$cek,$habericerik);


    3.Adım ( Verileri Değişkene Atıyoruz ) ;

    Bu kısımda preg_match ile aldığımız verileri değişkene atıyoruz. Aldığımız verilerin şuan için dizi olduğunu unutmayalım.

    $haberbaslik = $haberbaslik[1];
    $haberkisa   = $haberkisa[1];
    $habericerik = $habericerik[1];
    $habertarih = $habertarih[1];
    preg_match('#<img class="news-image" alt="'.$haberbaslik.'" src="(.*)" />#s',$cek,$resim);
    $resim = $resim[1];


    Açıklama : $haberbaslik[1] yazmamızın amacı gelen verilerin dizi olmasıdır. Bu alanda preg_match kullanmamın amacı ise, burada alt="'.$haberbaslik.'"
    $haberbaslik kullandığımdan dolayıdır.
    4.Adım ( Veri Kontrol ) ;

    Şimdi dosyamızın adının haberbot.php olduğunu varsayalım.

    Adres : http://www.siteismi.com/haberbot.php?m6k=1
    Yukarıdaki gibi adresde, hedef sitedeki1 numaralı ID ye ait haber içeriklerini alacaksınız. Ancak hedef sitede o ID yok ise, sayfamız da veri alanları boş görünecek ve hoş görüntü oluşmayacaktır. Bunu engellemek için aşağıdaki kod yapısını yazdım. Empty fonksiyonu ile değişkenimizin bir değer alıp almadığını kontrol ederek, eğer ki değer almadıysa otomatik olarak bir sonraki ID ye yönlendirilmesini sağladım.


    $linkileri = $m6k + 1; // SONRAKI SAYFA ID si
    $linkgeri = $m6k - 1; // ONCEKI SAYFA ID si
    if(empty($haberbaslik))
    {
    ?><script>window.location="haberbotu.php?m6k=<?php $m6k = $m6k+1; echo $m6k; ?>";</script>
    <?php
    } else {
    ?>


    5.Adım ( Verileri Ekrana Basma ) ;

    Şimdi arkadaşlar. Verileri aldık, kontrol ettik. Şimdi de ekranımıza basalım bu verileri.

    Haber Başlığı : <?php echo $haberbasligi; ?>
    Haber Özeti  : <?php echo $haberkisa; ?>
    Haber Tarihi : <?php echo $habertarihi; ?>
    Haber Resmi : <?php echo $resim; ?>
    Haber İçeriği : <?php echo $habericerigi; ?>
    <a rel="nofollow" href="haberbotu.php?m6k=<?php echo $linkgeri; ?>">Önceki Haber</a>
    <a rel="nofollow" href="haberbotu.php?m6k=<?php echo $linkileri; ?>">Sonraki Haber</a>
    <?php
    }
    ?>


    Bu yazı tamamen eğitim amaçlı ve alıntı olmayıp, tüm hukuki sorumluluklar kullanıcılara aittir.

    Demo |
    İndir
  • 24-11-2010, 17:58:33
    #2
    Üyeliği durduruldu
    ellerine sağlık hocam..
  • 24-11-2010, 18:51:20
    #3
    Üyeliği durduruldu
    Teşekkürler hocam.
  • 24-11-2010, 18:52:31
    #4
    elinize sağlık hocam
  • 24-11-2010, 19:23:18
    #5
    güzel bir açıklama olmuş. hiç bilmeyenleri bir güzel aydınlatacaktır. yazan arkadaşında dediği gibi basite indirgenmiş olmasa bu bot ise büyük ihtimalle orta veya iyi php bilen bir kişi tarafından yazılmış Pro biri değil. belli bir satır girinti düzeni yok, değişkenlerin yazım biçimleri karışık. DRY yok.veritabanına girilse GET olayı nedeniyle injection yenebilir .sonra bellek temizleme ob vs kullanımları yok.
    bütün dosyayı buffer a yükleyeceğinize cURL gezinti yapmak çoklu haber çekimlerinde %200 lük performans sağlar. vs vs.
    sonuç itibariyle güzel bir anlatım yazan arkadaşı kutlarım.
  • 25-11-2010, 11:09:36
    #6
    Efe4ka adlı üyeden alıntı: mesajı görüntüle
    güzel bir açıklama olmuş. hiç bilmeyenleri bir güzel aydınlatacaktır. yazan arkadaşında dediği gibi basite indirgenmiş olmasa bu bot ise büyük ihtimalle orta veya iyi php bilen bir kişi tarafından yazılmış Pro biri değil. belli bir satır girinti düzeni yok, değişkenlerin yazım biçimleri karışık. DRY yok.veritabanına girilse GET olayı nedeniyle injection yenebilir .sonra bellek temizleme ob vs kullanımları yok.
    bütün dosyayı buffer a yükleyeceğinize cURL gezinti yapmak çoklu haber çekimlerinde %200 lük performans sağlar. vs vs.
    sonuç itibariyle güzel bir anlatım yazan arkadaşı kutlarım.
    Yorumun için teşekkürler arkadaşım. Ancak forumda çok sayıda özel mesaj almam nedeniyle bu yazıma yer verdim. PM atan çoğu arkadaş, PHP de temel seviye bilgilerine sahip olduğundan dolayı, onların düzeyinde anlatmalarımı istediler. Bu nedenden dolayı ayrıntılara, cache temizleme, ob .vs konularına girmedim. Yazımı okuyan arkadaşların PHP Bot Mantığını en kolay biçimde anlayabilecekleri bir yazı olduğuna inanıyorum. Mesajın ne kadar eleştiriden çok iğneleyici olsa da, yorumuna teşekkür ederim. Burada ortaya koyulan bir emek var, ve emeğe saygı duyulması gerektiğine inanırım.
  • 25-11-2010, 11:13:49
    #7
    Hocam bunu dbye nasıl kayıt ettiririz ?
  • 25-11-2010, 11:18:52
    #8
    krmcnyldrm adlı üyeden alıntı: mesajı görüntüle
    Hocam bunu dbye nasıl kayıt ettiririz ?
    Kardeşim çok basit sayfanın sonuna

    $baglan = mysql_connect("sunucu","root","sifre");
    mysql_select_db("veritabaniadi",$baglan);
    
    $sorgu = mysql_query("insert into tablo(id,haberbaslik,haberkisa,habericerigi,resim) VALUES ('','$haberbaslik','$haberkisa','$habericerigi','$resim')");
    ekleyiniz.
  • 25-11-2010, 11:35:49
    #9
    güzel ve yararlı bir paylaşım olmuş eline sağlık...