• 23-10-2012, 14:28:41
    #1
    arkadaşlar öncelikle herkese merhaba, bir proje üzerinde çalışıyorum proje gereği web siteme bir link botu yapıyorum bot şöyle hareket edecek gönderdiğim sitede bulunan tüm harici linkleri yani https://www.r10.net sitesine botu gönderdiğim zaman http://www.ilebaşlayan.com,net,org sitelerini algılayıp veritabanıma ekleyecek şimdilik aşağıdaki gibi bir kod buldum ama veritabanıma kayıt ettiremedim acaba sorun nerede olabilir?

    <?phprequire_once('Connections/sitebaglanti.php');
    
    
    
    
    $sayfa = file_get_contents('https://www.r10.net/');
    preg_match_all('-<a href="http://(.*?)"-', $sayfa, $cikti);
    
    
    foreach ($cikti[1] as $link) {
    
    $save = mysql_query("insert into domains (domain_name) values ('$link')");
    
    
    if($save){
    echo "<p style='color:green'>$link isimli link sisteme kayıt edildi";
    }else{
    echo "<p style='color:red'>$link isimli link sisteme kayıt edilemedi";
    }
    
    
    }
    ?>
  • 24-10-2012, 15:40:51
    #2
    sorunu çözdüm arkadaşlar ama bir sorum daha var acaba aşağıdaki vereceğim koda kontrol nasıl eklerim yani aynı veri varsa eklemeden bir sonraki linke gitsin bunu nasıl yaparım arkadaşlar?

    $sayfa = file_get_contents('https://www.r10.net/');
    preg_match_all('@http://(.*?)/@si', $sayfa, $cikti);
    
    foreach ($cikti[1] as $link) {
    	
    	
    	$kayit = mysql_query("insert into domains (domain_name) values ('$link')");
    
    if($kayit){
    	echo "<p style='color:green'>$link isimli link sisteme kayit edildi";
    }else{
    	echo "<p style='color:red'>$link isimli link sisteme kayit edilemedi";
    }
  • 24-10-2012, 21:45:41
    #3
    arkadaşlar şu kodda ne gibi sorun olabilir acaba? hata alıyorum sorunu file_get_contents veriyor normalde url girince sorun yok ama url yi veritabanından çekip file_get_contents kodunun içine yerleştirdiğimde şöyle hata veriyor
    Warning: file_get_contents($url) [function.file-get-contents]: failed to open stream: No such file or directory in D:\wamp\www\denemeler\spider.php on line 57
    buyrun kodların tamamı aşağıda

    $id = $_GET['id']; 
    $siteler = mysql_fetch_array(mysql_query("SELECT * FROM sites WHERE site_id='".mysql_real_escape_string($id)."'")); 
    $url = $siteler['url'];
    $sayfa = file_get_contents('$url');
    
    preg_match_all('@<a href="http://(.*?)/@si', $sayfa, $cikti);
    
    foreach ($cikti[1] as $link) {
    //Veritabanında var mı kontrol 
    $kontrol = mysql_num_rows(mysql_query("SELECT * FROM domains WHERE domain_name='".mysql_real_escape_string($link)."'")); 
    if ($kontrol){$sonuc="var";}else{$sonuc="yok";} 
    
    if ($sonuc=="yok"){//Önceden Kayıt Yoksa 	
    	
    	$kayit = mysql_query("insert into domains (domain_name) values ('$link')");
    
    if($kayit){
    	echo "<p style='color:green'>$link isimli site sisteme kayit edildi</p>";
    }else{
    	echo "<p style='color:red'>$link isimli site sisteme kayit edilemedi</p>";
    }
    	
    }else{//Önceden Kayıt Varsa 
    
                echo "<p style='color:red'>$link isimli site veritabanında zaten var</p>"; 
    } }
  • 24-10-2012, 21:51:40
    #4
    $sayfa = file_get_contents('$url');
    Yerine;

    $sayfa = file_get_contents($url);
    Olmalı.
  • 24-10-2012, 22:01:32
    #5
    teşekkür ederim ama şimdide aşağıdaki hatayı veriyor

    Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in D:\wamp\www\denemeler\spider.php on line 18
  • 24-10-2012, 22:13:48
    #6
    file_get_contents fonksiyonuna boş değer gittiği için bu hatayı almışsınız.
  • 25-10-2012, 01:32:05
    #7
    saol sorunu çözdüm ama yeni bir soru sormak istiyorum

    preg_match_all('@<a href="http://(.*?)/@si', $sayfa, $cikti);
    komutu ile web sitelerini çekiyorum ama bazı sitelerin

    www.ebay.co.th" id="hpf-TH" rel="nofollow" target=
    gibi devamlarınıda alıyor şöyle bir fonksiyon düşündüm acaba nasıl bulabilirim fonksiyon şöyle olacak
    / " ' &
    gibi işaretlerden gerisini almayacak bunu nasıl yapabilirim acaba arkadaşlar?
  • 25-10-2012, 14:37:18
    #8
    Yanlış anlamadıysam sadece site adını almak istiyorsunuz. Sayfa linki vs. dahil olmayacak.

    preg_match_all('%(<a href=["\'])(.*?)["\']%i',$a,$b);
    
    for($x=0;$x<count($b[2]);$x++){
    	$URI	= parse_url($b[2][$x]);
    	$Link	= $URI['host'];
    	echo $Link."<p>";
    	
    }
    Yukarıdaki pattern ile a etiketinin href özelliğinin içeriği alınıyor. parse_url fonksiyonu ile gelen değerden domain adını çekiyoruz.
    Eğer istediğiniz sadece href özelliğinin içeriğini almak ise;

    preg_match_all('%(<a href=["\'])(.*?)["\']%i',$a,$b);
    
    echo "<pre>";
    print_r($b[2]);
    echo "</pre>";
  • 25-10-2012, 15:31:02
    #9
    ilk kod süper oldu çok teşekkür ederim süpersin olumlu oy veremiyorum sadece satıcılar içinmiş şimdi ufak bir soru daha sormak istiyorum istersen cevap vermeyebilirsin siteler adında bir tablom var buradan siteleri id ye göreçekip sitelerdeki urlleri biraz önceki yardım ettiğiniz kodlarla domainler adında bir tabloya kayıt ediyor kayıt etme işlemi için refresh komutunu kullanıyorum 10 sn de bir sonraki id yi çekiyor yapmak istediğim id yi get ile aldığım bir kod var

    $id = $_GET['id']
    bu kodun altında şöyle bir sınırlama koydum
    if($id!=40){
    bu kod id 40 olunca durduruyor ama ben bunu sitemde kaç tane site varsa yani en büyük id ye geldiğinde durmasını istiyorum bu alttaki koda nasıl bir kod eklemeliyim ki en son id ye gelince refresh dursun sınırlamayı kaldırırsam sonsuza kadar boş boş id atlar