15/03/2012 11:27

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

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

Yücel KAHRAMAN

Merhaba Arkadaşlar,

 

Bu yazımda PHP Robot yazılımı yaparken kullandığım birkaç yöntemi sizinle paylaşmak istedim...

 

PHP Robot yazılımı hakkında şimdiye kadar 100'lerce yazı yazılmıştır, herkesin kendine göre kullandığı bazı yöntemler vardır. Ben bu konuyu biraz açmak istedim umarım anlaşılır bir yazı ortaya çıkmıştır...

Birden fazla içeriği herhangi bir siteden robot yazılım yardımıyla çekmek için, ilk önce o site de bulunan yazıların link ve başlıklarını almamız ve bir text dosyasına kaydetmemiz gerekir ben bu işi şu şekilde yapıyorum.

 

İlk önce PHP cURL fonksiyonunu kullanıyorum çünkü cURL fonksiyonu diğer fonksiyonlara göre daha hızlı çalışmaktadır.

 



PHP KODU

$link 
'http://www.siteadi.com/kategoriler.html';
$userAgent=array();
        
$userAgent[]="Opera/9.50 (Windows NT 5.1; U; en)";
        
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13";
        
$userAgent[]="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; MEGAUPLOAD 1.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
        
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12";
        
$userAgent[]="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; MEGAUPLOAD 1.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
        
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5";
        
$total1=count($userAgent)-1;
        
$rand1=rand(0,$total1);

        
$bls curl_init() or die("FATAL ERROR: cURL support is not found on this server.");
        
curl_setopt($blsCURLOPT_URL$link);
        
curl_setopt($blsCURLOPT_USERAGENT$userAgent[$rand1]);
        
curl_setopt($blsCURLOPT_REFERER,"http://www.google.com.tr");
        
curl_setopt($blsCURLOPT_HEADER0);
        
curl_setopt($blsCURLOPT_RETURNTRANSFER,1);
        
curl_setopt($blsCURLOPT_TIMEOUT10);
        
$cikti = @curl_exec($bls);
        
        if (
curl_error($bls)) 
        {
            
curl_close($bls);
            
$SayfaAktarmaDurumu='Aktarilamadi!'
        }
        else
        {
            
curl_close($bls);
            
$SayfaAktarmaDurumu='Aktarildi...';
        }

 

Bu kodlar ile sayfamızı aktarmış olduk daha sonra yazı karakter stilini alıyoruz ve echo yapıyoruz, bunu yapmamızın sebebi Türkçe karakterler de problem yaşamamak içindir.

 



PHP KODU
@preg_match('/charset=(.*?)\"/',$cikti$meta);
echo 
'<meta http-equiv="Content-Type" content="text/html; charset='[email protected]$meta[1].'">';

 

Eğer bu yöntem hoşunuza gitmediyse çektiğimiz yazıyı PHP iconv() fonksiyonu yardımıyla da dönüştürebiliriz...

 



PHP KODU
$cikti iconv("UTF-8""ISO-8859-9//TRANSLIT//IGNORE"$cikti);

 

Artık çektiğimiz içeriği Türkçe karakter problemi yaşamadan kullanabilirz, şimdi ise bize lazım olan bağlantıları ayıklama zamanı geldi, bunun için PHP strip_tags() fonksiyonunu kullanıyoruz ve bağlantı kodları hariç bütün HTML taglarını siliyoruz.

 



PHP KODU
$cikti=strip_tags($cikti,'<a>');

 

Kodlarımızı temizledikten sonra bu içerikte bulunan bağlantıları ayıklıyoruz ve bir text dosyasına başlıklar ayrı bağlantılar ayrı olacak şekilde kaydediyoruz.

 



PHP KODU
preg_match_all("#<a(.*?)href\=(\"|\')http\:\/\/(.*?)(\"|\')(.*?)>(.*?)<\/a>#i",$cikti,$linkler);

PHP preg_match_all() fonksiyonu yardımıyla bağlantı başlıklarını $linkler[6] dizi değişkenine aktarmış olduk.



PHP KODU
$linkler[6]

 

Bağlantıları ise $linkler[3] dizi değişkenine aktardık.



PHP KODU
$linkler[3]

 

Şimdi bu aktardığımız bağlantı ve başlıkları PHP for döngüsü yardımıyla dosyaya kaydetmeye başlayalım.

 



PHP KODU

$dosya1
="adresler/linkler.txt";
        
$dosya2="adresler/basliklar.txt";
     
        if (!
file_exists ($dosya1) ) touch ($dosya1);
        if (!
$baglan1=fopen ($dosya1,'w')) exit("dosyayı açamadım");
        
        if (!
file_exists ($dosya2) ) touch ($dosya2);
        if (!
$baglan2=fopen ($dosya2,'w')) exit("dosyayı açamadım");
                
    
        for (
$i=0$i count($linkler[3]); $i++) 
        {
               
fputs ($baglan1,'http://'.$linkler[3][$i]."\n");                
               
fputs ($baglan2,strip_tags($linkler[6][$i])."\n");
 
        }
        
        
        
fclose($baglan1);
        
fclose($baglan2);

Hepsi bukadar, bu yazının ikinci kısmında bu kaydettiğimiz bağlantıları nasııl kullanabiliriz bunun hakkında bilgi edinebilirsiniz...




Yazıya yapılan yorumlar


Sen de yorum yap... (0)

Facebook Yorumları

İlgili Etiketler

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

Kullanıcı Girişi