folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Php De Yaptığım İlk Bot [Tbt Aktif Konular]



Php De Yaptığım İlk Bot [Tbt Aktif Konular]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Aktif konulardaki konu başlıklarını sadece yazı olarak listeliyor.

    <?php
    
    	//internetten hazır buldugum bir fonksiyon.
    
        function siteBaglan($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            $browser = $_SERVER['HTTP_USER_AGENT'];
            curl_setopt($ch, CURLOPT_USERAGENT,"googlebot");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
            $source = curl_exec($ch);
            curl_close($ch);
            return $source;
        }
    
    
        //Düzenli ifadeleri öğrenmek için bayağı uğraştım ama kafa basmadı. :)
    	//internetten hazır buldugum bir fonksiyon.    
        //fonksiyon, $yazı içerisinden başını ve sonunu belirtiğiniz bölgeyi çekiyor.
        function ara($bas, $son, $yazi)
    {
        @preg_match_all('/' . preg_quote($bas, '/') . '(.*?)'. preg_quote($son, '/').'/i', $yazi, $m);
        return @$m[1];
    }
    
    //bağlanmak istediğimiz siteyi yazıyoruz.
    $site = "http://tahribat.com/Aktif-Forum-Konulari";
    $baglan = siteBaglan($site);
    
    //akif konuların içerisinde <title> etiketlerinin içerisinde kalan bölgeyi $baslik değişkenine atadık ve yazdırdık.
    $baslik = ara("<title>", "</title>", $baglan);
    //site içerisindeki ilk title lar arasındaki veriyi yazdırmak istediğimiz için $baslik[0] dedik.
    echo "<b>$baslik[0]</b> <br>";
    
    //kaynak kodu incelediğimde konuların da başı-sonu bu şekildeydi. 
    $konular = ara('<td class="Tip2" onMouseOver="this.className=\'Tip2 Aktif\'" onMouseOut="this.className=\'Tip2\'">', '</td>', $baglan);
    
    //Üstte konuları çektikten sonra yazdırmış olsaydık linklerle birlikte yazdırılacaktı (2-3-4 gibi sayfalar da cabası).
    //Bu yüzden $konuların içinde de 2. bir ayıklama daha yapıyoruz ve sadece metin kısmını almış oluyoruz.
    //for döngüsünde olduğu için $isimler[0] her zaman konu başlığını verecektir. $isimler[1] derseniz ekranda '2' leri görürsünüz sadece.
    for ($i=0;$i<=count($konular);$i++){
    	$isimler = ara('/">', '</a>', $konular[$i]);
    	echo "$isimler[1] <br>";
    
    }
    
    ?>

    Tüm aktif konular tek bir sayfada olduğu için çok uğraştırmadı.
    Merak ettiğim, bir alışveriş sitesindeki ürünleri çekmek istersem izlemem gereken yol ne olacak? 
    Aklıma gelen:
    Önce kategorileri çekeceğim, ardından alt kategorileri, onun ardından ürünleri...
    Umarım yanlış düşünüyorumdur çünkü bu iş bayağı uzar. :| 


    vatandaşa kafam girsin!..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Chrome'da kodu düzenleyemedim.
    sondaki kod  

    echo "$isimler[0] <br>";

    olmalı.


    vatandaşa kafam girsin!..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Realist
    Realist's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    güzel olmuş hep böyle düzenli kod yaz


    ..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    güzel olmuş ama kendini biraz daha geliştirmen gerekli bildiğin gibi.. sana tavsiyem api desteği veren sistemler için yaz bunu

    örn: youtube, facebook, twitter, friendfeed, vimeo..

    buradaki apileri kullanarak bot yazabilirsen diğerleri çocuk oyuncağı gibi gelir. türkçe kaynakları bilmem ama ingilizce çok kaynak var hele php için sürüsüne

    bereket. ben masaüstü için yazıyorum. mantığını anlarsan birisi için diğerlerinin de onlara benzediğini görürsün ve cidden çok zevkli bir iş ve kod yazarken kendini

    profesyonel gibi hissediyorsun çünkü kullandığın sistem tamamen profesyonel yazılımcılar tarafından hazırlanış bir destek. developer key alıyorsun, authentication

    yapıyorsun ondan sonra sisteme erişiyorsun .. böyle bir dizgi içinde yer almak bana zevk veriyorum, yıllardır kod yazdığım halde en çok hoşuma giden kodlamam

    bunlar oldu diğeri de usb tabanlı elektronik devrem-masaüstü yazılım-android i birleştiren sistemi yazmam.. kolay gelsin

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek

    izleyeecegin yöntem yine bu mantıkla sitenin kategori menüsü hangi divdeyse  o div içindeki link ve isimleri sırasıyla bir diziye atarsın

    sonra bot üzerinden seçilen kategorinin linki sende oldugu için direk o linke gider ve çekmeye devam edersin 

    sayfalama olayıda genelde blablabla.com/blablabla/2  gibi bişi olucagından her sayfada çekme işlemin bitince linkin page kısmını 1 arttırırsın. 

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Realist bunu yazdı:
    -----------------------------

    güzel olmuş hep böyle düzenli kod yaz


    -----------------------------

    Teşekkürler.


    unbalanced bunu yazdı:
    -----------------------------

    güzel olmuş ama kendini biraz daha geliştirmen gerekli bildiğin gibi.. sana tavsiyem api desteği veren sistemler için yaz bunu

    örn: youtube, facebook, twitter, friendfeed, vimeo..

    buradaki apileri kullanarak bot yazabilirsen diğerleri çocuk oyuncağı gibi gelir. türkçe kaynakları bilmem ama ingilizce çok kaynak var hele php için sürüsüne

    bereket. ben masaüstü için yazıyorum. mantığını anlarsan birisi için diğerlerinin de onlara benzediğini görürsün ve cidden çok zevkli bir iş ve kod yazarken kendini

    profesyonel gibi hissediyorsun çünkü kullandığın sistem tamamen profesyonel yazılımcılar tarafından hazırlanış bir destek. developer key alıyorsun, authentication

    yapıyorsun ondan sonra sisteme erişiyorsun .. böyle bir dizgi içinde yer almak bana zevk veriyorum, yıllardır kod yazdığım halde en çok hoşuma giden kodlamam

    bunlar oldu diğeri de usb tabanlı elektronik devrem-masaüstü yazılım-android i birleştiren sistemi yazmam.. kolay gelsin

    -----------------------------

    Tavsiyen için teşekkür ederim, önceliğim api desteği veren alışveriş siteleri olacak. Aslında amacım fiyat karşılaştırma sitesi yapmak, hatta yaptım bile. Yalnız feed leri xml olarak vermeyen, veremeyen alışveriş siteleri var. Bu yüzden böyle bir yola başvurmayı düşünüyorum ama her site için ayrı bir kod öbeği yazmam gerekecek herhalde. :/

     

    FCN bunu yazdı:
    -----------------------------

    izleyeecegin yöntem yine bu mantıkla sitenin kategori menüsü hangi divdeyse  o div içindeki link ve isimleri sırasıyla bir diziye atarsın

    sonra bot üzerinden seçilen kategorinin linki sende oldugu için direk o linke gider ve çekmeye devam edersin 

    sayfalama olayıda genelde blablabla.com/blablabla/2  gibi bişi olucagından her sayfada çekme işlemin bitince linkin page kısmını 1 arttırırsın. 


    -----------------------------

    Eyv. hocam sağ ol. Dediğin adımları takip edip ilk botu yaptığımda onu da buraya eklerim.


    vatandaşa kafam girsin!..
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Oh sonunda bitti. :)
    Acemi biri için yolu uzatmış olabilirim, belki kullanmak isteyen veya örnek arayan olur diye nerede ne yaptığımı ayrıntılı bir şekilde açıklamaya çalıştım. Şu anda localhost ta sorunsuz bir şekilde çalıştı.
    Hedef site olarak Vatan Bilgisayarı (http://www.vatanbilgisayar.com) seçtim.

    İki adet bot yazdım. Birincisi tüm kategorileri ve kategorilerin ilk sayfasındaki ürünleri çekiyor, işlem uzun sürdüğü için bunun üzerinde o kadar çok durmadım..

    Yazdığım ikinci botta ise Kategori seçmeli, listelemeli, sayfalamalı bir bot yaptım. Umarım faydalı olur.

    ilk kod:

    <?php
    
    	//internetten hazır buldugum bir fonksiyon.
    
        function siteBaglan($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            $browser = $_SERVER['HTTP_USER_AGENT'];
            curl_setopt($ch, CURLOPT_USERAGENT,"googlebot");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
            $source = curl_exec($ch);
            curl_close($ch);
            return $source;
        }
    
    
    	//internetten hazır buldugum bir fonksiyon.    
        //fonksiyon, $yazı içerisinden başını ve sonunu belirtiğiniz bölgeyi çekiyor.
        //fonksiyonu bazı yerlerde çalıştıramadığım için yeni ifadeler yazmak zorunda kaldım.
        //fonksiyonun sonuna s ekleyince kategoriler ve alt kategorileri çekti.
        //fonksiyonun sonunda sadece i olursa yalnızca kategori isimlerini çekiyor. 
        function ara($bas, $son, $yazi)
    {
        @preg_match_all('/' . preg_quote($bas, '/') . '(.*?)'. preg_quote($son, '/').'/si', $yazi, $m);
        return @$m[1];
    }
    
    //bağlanmak istediğimiz siteyi yazıyoruz.
    $site = "http://www.vatanbilgisayar.com/";
    $baglan = siteBaglan($site);
    
    $kategoriler = ara('<li style="list-style-type:none; font-size:11px; font-weight:bold; color:#333; padding:2px;">', '</li>', $baglan);
    
    
    //Vatan Bilgisayar'dan verileri çekerken Türkçe karakter sorunuyla karşılaştım.
    //Bu sorunu çözmek için kullanılan bir döngü
    for ($i=0; $i < count($kategoriler) ; $i++) { 
    $kategoriler[$i] = mb_convert_encoding($kategoriler[$i] ,'UTF-8',mb_detect_encoding($kategoriler[$i] ,'ISO-8859-9',true));
    }
    
    
    // Desene göre $sonuc[1][0] bağlantı adreslerini,
    // $sonuc[2][0] ise alt kategori isimlerini verecektir.
    for ($i=0; $i < count($kategoriler) ; $i++) { 
    	preg_match_all('/href="(.*?)">(.*?)<\/a>/si', $kategoriler[$i], $sonuc);
    	
    
    	//Ana kategori ile alt kategorileri bir birinden ayırmak için bir koşul.
    	if (strlen($sonuc[1][0])>5){
    	echo $sonuc[2][0] . " <b>Adres:</b><a href=\"" .$sonuc[1][0] . "\">" . $sonuc[1][0] . "</a><br>";	
    
    	//ilk sayfadaki ürün isimleriyle ürün açıklamalarını ayrı ayrı çekelim.
    	$urun_cek = siteBaglan($sonuc[1][0]);
    	preg_match_all('/<span style="font-size: 13px; font-weight: bold; color: #333;">(.*?)<\/span>/si', $urun_cek, $urun_adi);
    	preg_match_all('/<a id="(.*?)" href="(.*?)">(.*?)<\/a>/si', $urun_cek, $urun_aciklama);
    	
    	//ürün adlarıyla ürün açıklamalarını eşleştirelim
    	//$urun_aciklama deseninde hedef sayfanın alt kısmındaki En Çok Satanlar kısmı da alındığı için $urun_adı sayısına göre döngüde işlem yapılacak.  
    	//Ek olarak gelen açıklamalardaki Türkçe karakter sorununu da düzeltelim.
    	for ($a=0; $a < count($urun_adi[0]); $a++) { 
    		$urun_aciklama[3][$a] = mb_convert_encoding($urun_aciklama[3][$a] ,'UTF-8',mb_detect_encoding($urun_aciklama[3][$a] ,'ISO-8859-9',true));
    		echo "Ürün adı:" . $urun_adi[0][$a] . "<br>Açıklaması:" . $urun_aciklama[3][$a] . "<br>";
    	}
    
    	}else {
    		echo "<b> $kategoriler[$i]: </b><br>";
    	}
    
    }
    
    
    ?>

    Bu da ikinci: dosyanın adı:alver2.php

    <html>
    <body>
    <?php
    
    $kategori = $_GET['kategori'];
    $sayfa = $_GET['rcd'];
    
    	//internetten hazır buldugum bir fonksiyon.
    
        function siteBaglan($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            $browser = $_SERVER['HTTP_USER_AGENT'];
            curl_setopt($ch, CURLOPT_USERAGENT,"googlebot");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
            $source = curl_exec($ch);
            curl_close($ch);
            return $source;
        }
    
    
    	//internetten hazır buldugum bir fonksiyon.    
        //fonksiyon, $yazı içerisinden başını ve sonunu belirtiğiniz bölgeyi çekiyor.
        //fonksiyonu bazı yerlerde çalıştıramadığım için yeni ifadeler yazmak zorunda kaldım.
        //fonksiyonun sonuna s ekleyince kategoriler ve alt kategorileri çekti.
        //fonksiyonun sonunda sadece i olursa yalnızca kategori isimlerini çekiyor. 
        function ara($bas, $son, $yazi)
    {
        @preg_match_all('/' . preg_quote($bas, '/') . '(.*?)'. preg_quote($son, '/').'/si', $yazi, $m);
        return @$m[1];
    }
    
    //bağlanmak istediğimiz siteyi yazıyoruz.
    $site = "http://www.vatanbilgisayar.com/";
    $baglan = siteBaglan($site);
    
    $kategoriler = ara('<li style="list-style-type:none; font-size:11px; font-weight:bold; color:#333; padding:2px;">', '</li>', $baglan);
    
    
    //Vatan Bilgisayar'dan verileri çekerken Türkçe karakter sorunuyla karşılaştım.
    //Bu sorunu çözmek için kullanılan bir döngü
    for ($i=0; $i < count($kategoriler) ; $i++) { 
    $kategoriler[$i] = mb_convert_encoding($kategoriler[$i] ,'UTF-8',mb_detect_encoding($kategoriler[$i] ,'ISO-8859-9',true));
    }
    
    
    // Desene göre $sonuc[1][0] bağlantı adreslerini,
    // $sonuc[2][0] ise alt kategori isimlerini verecektir.
    ?>
    <form method="get" action="alver2.php">
    <select name="kategori">
    	<option value=""><--- Seçiniz ---></option>
      	<?php
    	for ($i=0; $i < count($kategoriler) ; $i++) { 
    	preg_match_all('/href="(.*?)">(.*?)<\/a>/si', $kategoriler[$i], $sonuc);
    	
    
    		//Ana kategori ile alt kategorileri bir birinden ayırmak için bir koşul.
    		//Ana kategorilerde her hangi bir bağlantı yok, yani salt metin. O yüzden onları almıyorum.
    		if (strlen($sonuc[1][0])>5){  
      			
      			//Seçtiğimiz kategorinin listede seçili olarak kalması için bir döngü daha.
      			//Eğer hiçbir şey seçilmemişse normal liste gösteriliyor.
    			//Ve eğer bir kategori seçilmişse verileri çekelim ama YAZDIRMAYALIM.
    			if ($sonuc[1][0] == $kategori) {
    				echo "<option value=\"" . $sonuc[1][0] . "\"selected>" . $sonuc[2][0] . "</option>";
    
    
    			//ilk sayfadaki ürün isimleriyle ürün açıklamalarını ayrı ayrı çekelim.
    			$urun_cek = siteBaglan($sonuc[1][0] . "&rcd=" . $sayfa);
    			preg_match_all('/<span style="font-size: 13px; font-weight: bold; color: #333;">(.*?)<\/span>/si', $urun_cek, $urun_adi);
    			preg_match_all('/<a id="(.*?)" href="(.*?)">(.*?)<\/a>/si', $urun_cek, $urun_aciklama);
    			
    			//Sayfaları çekelim ve onları da işlem görecek hale getirelim.
    			preg_match_all('/<div id="ctl00_ContentPlaceHolder1_divRCon2" style="float: left; width: 405px; line-height: 25px; text-align: right;">(.*?)<\/div>/si', $urun_cek, $sayfalar);
    			$sayfala = str_replace("a href=\"","a href=\"alver2.php?kategori=" . $site , $sayfalar[1][0]);
    			
    
    			}else{
    				echo "<option value=\"" . $sonuc[1][0] . "\">" . $sonuc[2][0] . "</option>";		
    			}
    
      		}
    	}
      	?>
    </select>
    <input type="submit" />
    </form>
    <?php
    
    
    	//Artık yazdırma işlemimizi yapabiliriz.
    	//ürün adlarıyla ürün açıklamalarını eşleştirelim
    	//$urun_aciklama deseninde hedef sayfanın alt kısmındaki En Çok Satanlar kısmı da alındığı için $urun_adı sayısına göre döngüde işlem yapılacak.  
    	//Ek olarak gelen açıklamalardaki Türkçe karakter sorununu da düzeltelim.
    	for ($a=0; $a < count($urun_adi[0]); $a++) { 
    	$urun_aciklama[3][$a] = mb_convert_encoding($urun_aciklama[3][$a] ,'UTF-8',mb_detect_encoding($urun_aciklama[3][$a] ,'ISO-8859-9',true));
    	echo "Ürün adı:" . $urun_adi[0][$a] . "<br>Açıklaması:" . $urun_aciklama[3][$a] . "<br><br>";
    	}
    
    	echo $sayfala;
    	echo "<br><br><br><br><br><br><p><p>";
    	
    
    ?>
    
    </body>
    </html>

     

     


    vatandaşa kafam girsin!..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    asiminnesli
    asiminnesli's avatar
    Kayıt Tarihi: 19/Mart/2010
    Erkek

    en üstte duran botu localhost ta çalıştırdığımda 

     

    Fatal error: Call to undefined function curl_init() in C:\wamp\www\bot\bot1.php on line 15

     

    hatasini alıyorum  


    I am Jack's inflamed sense of rejection
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek
    asiminnesli bunu yazdı:
    -----------------------------

    en üstte duran botu localhost ta çalıştırdığımda

    Fatal error: Call to undefined function curl_init() in C:\wamp\www\bot\bot1.php on line 15

    hatasini alıyorum


    -----------------------------
    Hocam wamp ile birlikte curl kutuphanesi de gelmis olmali, yalniz aktif edilmemistir. php.ini den gerekli ayarlamali yapsan yeterli olur. Php.ini de ;extension=php_curl.dll satirinin basindaki ; (noktali virgul) kaldir ve servisleri yeniden baslat. Calisacaktir. Yarin demo lari internete yuklerim.

    vatandaşa kafam girsin!..
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    asiminnesli
    asiminnesli's avatar
    Kayıt Tarihi: 19/Mart/2010
    Erkek

    aynı hata olmadı hocam dedikelrini yaptım wamp ı kapatip tkerar açtim ama yine olmadı


    I am Jack's inflamed sense of rejection
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cosmic
    Cosmic's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    asiminnesli bunu yazdı:
    -----------------------------

    aynı hata olmadı hocam dedikelrini yaptım wamp ı kapatip tkerar açtim ama yine olmadı


    -----------------------------

    php_info çekip curl aktifmi bak. php.ini den aktif ettiysen bile aktif gözükmüyorsa system32 ye 1-2 dll atman lazım onlara bak.


    Bittik biz bittik
Toplam Hit: 2490 Toplam Mesaj: 12