• 17-03-2016, 21:38:31
    #1
    başka siteden veri çekerken file_get_contents fonksiyonunu kullanıyorum ancak bazen curl gerek oluyor mesela

    $konuLink = file_get_content('http://siteadresi.com');
    preg_match_all("<h1>(.*?)</h1>",$konuLink,$bot_konuBaslik);

    şeklinde file_get_contents ile h1 tagları arasındaki verileri rahatlıkla çekebiliyoruz fakat curl ile parça parça veri çekim olayını anlamadım sayfanın tamamı olarak veri çekiliyor ancak parça parça çekerken sıkıntı yaşıyorum kısa bir örnekle birileri açıklarsa çok makbule geçecektir şimdiden teşekkür ederim.
  • 17-03-2016, 22:31:54
    #2
    	function site_kaynak($url) {
    
    				$ch = curl_init($url); 
    				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    				curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    				return curl_exec($ch); 
    			
    			
    	}
    En basit örneği ile curl bağlantısını bu şekilde kurabilirsin. file_get_contents ten tek farkı senin tanımladığın bir fonksiyon olması, asıl olarak file_get_contents te bir fonksiyondur fakat php içerisinde geldiği için sen sadece fonksiyon ismini kullanır yazarsın.

    $konuLink = file_get_content('http://siteadresi.com');
    preg_match_all("<h1>(.*?)</h1>",$konuLink,$bot_konuBaslik);

    $konuLink = site_kaynak('http://siteadresi.com');
    preg_match_all("<h1>(.*?)</h1>",$konuLink,$bot_konuBaslik);
    İkiside aynı... Curl öğrenmek için SETOPT ( set options ) değerlerini araştır ve bu fonksiyonu kendine göre değiştir, refferer , post , vs vs...
  • 17-03-2016, 22:43:47
    #3
    Bazı siteler vardır ki gelen kişiş bot mu kullanıcımı bunların kontrolleri vs yapılır engellemeler. Bunları curl ile aşabilirsin. Curl botu tıpkı kullanıcıymış gibi göstererek işlemler gerçekleştirir. Ve yapmak istediğin birçok işlemi yapabilirsin. Bir sitenin add.php dosyasına post geçebilirsin sitelere baglanıp veri cekebilirsin vs vs. ayrıntıları bitmez.
  • 17-03-2016, 22:58:01
    #4
    curl ile file_get_contents yerine DomDocument öneririm. biraz araştırırsanız çözersiniz misal ben örnek yazayım bir tane.

    function curl($url){
    
        	$headers[]  = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
        	$headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        	$headers[]  = "Accept-Language:en-us,en;q=0.5";
        	$headers[]  = "Accept-Encoding:gzip,deflate";
        	$headers[]  = "Accept-Charset:utf-8,ISO-8859-1;q=0.7,*;q=0.7";
        	$headers[]  = "Keep-Alive:115";
        	$headers[]  = "Connection:keep-alive";
        	$headers[]  = "Cache-Control:max-age=0";
    
        	$curl = curl_init();
    		
        	curl_setopt($curl, CURLOPT_URL, $url);
        	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        	curl_setopt($curl, CURLOPT_ENCODING, "gzip");
        	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        	$data = curl_exec($curl);
        	curl_close($curl);
        	return $data;
    
    	}
          
            $url ="http://www.siteadi.com";
           $data = curl($url);
    	$Dom = new DomDocument('1.0', 'utf-8');
    	@$Load = $Dom->LoadHTML($data);
    	$xpath = new DomXpath($Dom);
    
           //Örnek çekme işlemi: atıyorum veri class'ı ornek olan bir divin içindeki h1 başlık
           $cek = $xpath->query('//div[@class="ornek"]/h1'); /* buraya direk //h1' de yazabilirsin, garanti olması için tam adres en güzelidir yoksa veri gelebilir misal //b dersen tüm bold yazıları çektirirsin.*/
           echo $cek->item(0)->nodeValue; //Başlık geldi....
         //Eğer birden fazla h1 varsa içinde ve hepsini çektirmek istersen
          foreach($cek as $c){
           echo $c->nodeValue.'<br/>'; 
          }
    DomDocument olayını araştır derim, Türkiye'de kimse pek kullanmaz bu yöntemi, herkes klasik yoldan gidiyor ....
  • 18-03-2016, 02:50:20
    #5
    @necmicolak; curl, file_get_contents fonksiyonunun daha gelişmiş halidir. Aslında parçalama kısmının curlle bir ilgisi yok. siz curlle yine sadece kaynağı çekiyorsunuz. Parçalama (parse) kısmını yine preg fonksiyonları veya DomDocument yöntemleriyle yapacaksınız.