PHP Classes

File: class-html_rendele.php

Recommend this page to a friend!
  Classes of Gündüz Can YILMAZ   HTML Rendele   class-html_rendele.php   Download  
File: class-html_rendele.php
Role: Class source
Content type: text/plain
Description: Required class file
Class: HTML Rendele
HTML reader, filterer and poster
Author: By
Last change: little fixes
Date: 14 years ago
Size: 12,378 bytes
 

Contents

Class file image Download
<?php /** Html Rendele Copyright (C) 2009-2010 Gündüz Can YILMAZ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. * @author Gündüz Can YILMAZ * @copyright 2009-2010 * @version 1.1.0 * @access public * @site http://www.cnylmz.net */ class html_rendele { /** * Bulunacak html etiketi * * @var string */ public $tag; /** * Okunacak adres * * @var string */ public $url; /** * Gönderilecek Referer Bilgisi * * @var string */ public $referer; /** * cookie.$cookie.txt &#351;eklinde olu&#351;turulacak cookie ismi * * @var string */ public $cookie; /** * Arama neticesinde bulanan taglar&#305; tutar * * @var array */ public $sonuc; /** * Aranan tag özelliklerini bar&#305;nd&#305;r&#305;r * * @var array */ private $ozellik; /** * Okunan sayfan&#305;n kodlar&#305;n&#305; bar&#305;nd&#305;r&#305;r * * @var string */ public $harman; /** * Hangi a&#351;amada oldundu&#287;una yard&#305;mc&#305; olur * * @var int */ private $durum; /** * Çal&#305;&#351;ma s&#305;ras&#305;ndaki yap&#305;lanlar&#305; saklar * * @var string */ public $log; /** * Tag hakk&#305;ndaki geçici bilgiler tutulur * * @var array */ private $tag_temp; /** * Okunan sayfaya yollanacak post dizisi * * @var array */ public $post; /** * Okunan sayfaya gödnerilecek taray&#305;c&#305; bilgisi * * @var string */ private $tarayici; /** * Kurucu metod */ function __construct(){ $this->tag=''; $this->tag_temp=array(); $this->url=null; $this->ozellik=array(); $this->sonuc=null; $this->durum=0; $this->log=''; $this->referer=null; $this->cookie=false; $this->post=array(); $this->tarayici='Googlebot/2.1 (+http://www.google.com/bot.html'; } /** * Kurucu metod tekrar ça&#287;&#305;r&#305;l&#305;rak bilgiler s&#305;f&#305;rtlan&#305;r */ public function reset() { $this->__construct(); } /** * Adres okuma yerine html içeri&#287;in direk eklenmesini sa&#287;lar * * @param string Daha önce okunmu&#351; HTML içerik */ public function okunmus($kod_yigini) { if($this->durum > 0) $this->log.='<b>Eski kaynak kodlar&#305;n&#305;n üzerine yaz&#305;l&#305;yor!!!</b><br />'; $this->harman=$kod_yigini; $this->log.='Kaynak kodu elle girildi, link okunmu&#351; say&#305;l&#305;yor<br />'; $this->durum=1; } /** * Gönderilecek taray&#305;c&#305; header bilgisini olu&#351;turur * * @param string taray&#305;c&#305; türü */ public function tarayici($tarayici) { switch(strtolower($tarayici)) { case 'firefox': $this->tarayici='Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10'; break; case 'ie': $this->tarayici='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322)'; break; default: $this->tarayici='Googlebot/2.1 (+http://www.google.com/bot.html'; } } /** * url de&#287;i&#351;keninde belirtilen adres okunur * * @return boolean */ public function oku() { if(empty($this->url)) { $this->log.='Adres Belirtilmemi&#351;. Oku fonksiyonu ba&#351;ar&#305;s&#305;z<br />'; return false; } if(strpos($this->url,'http://')===false) { $this->url='http://'.$this->url; $this->log.='Adrese "http://" öneki eklendi<br />'; } $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-9,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: tr-TR,tr;q=0.5"; $header[] = "Pragma: "; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->url); curl_setopt($curl, CURLOPT_USERAGENT, $this->tarayici); if($this->referer) { if(strpos($this->referer,'http://')===false) { $this->referer='http://'.$this->referer; $this->log.='Referer\'a http:// ön eki eklendi<br />'; } curl_setopt($curl, CURLOPT_REFERER, $this->referer); } else curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); if($this->cookie!==false) { $this->log.='COOKIE al&#305;m&#305; aç&#305;ld&#305;<br />'; curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.'.$this->cookie.'.txt'); curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.'.$this->cookie.'.txt'); } if(count($this->post)>0) { curl_setopt($curl, CURLOPT_POST, 1); $yolla=array(); foreach($this->post as $name=>$value) { $yolla[]="$name=$value"; } if(count($yolla)>1) $yollanacak=implode('&',$yolla); else $yollanacak=$yolla; curl_setopt($curl, CURLOPT_POSTFIELDS,$yollanacak); } curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); ob_start(); $adres=curl_exec($curl); curl_close($curl); $this->harman = str_replace('/>','>',ob_get_contents()); ob_end_clean(); if($this->durum>0) $this->log.='<b>Eski kaynak kodlar&#305;n&#305;n üzerine yaz&#305;l&#305;yor!!!</b><br />'; $this->log.=$this->url.' linki okundu<br />'; $this->durum=1; return true; } /** * bulunacak tag&#305;n olmas&#305; gereken özellikleri * * @param string filtrelenecek özeli&#287;in ad&#305; * @param string eleman&#305;n istenilen de&#287;eri */ public function tag_ozellik($ozellik,$deger) { $this->ozellik[$ozellik]=$deger; } private function kapananbul($harman) { preg_match_all('/[\/|<]'.$this->tag.'([^>]*)>/si',$harman, $bulunanlar, PREG_SET_ORDER); $bulunan_s=count($bulunanlar); $say_acik=0; $kapanan_temp=array(); $ktemp['pos']=0; for($i=0;$i<$bulunan_s;$i++) { $ktemp['pos']=strpos($harman,$bulunanlar[$i][0],$ktemp['pos']); $temp['strlen']=strlen($bulunanlar[$i][0]); if(substr($bulunanlar[$i][0],0,1)=='<') { $ktemp['aciklar'][]=$i; $bulunanlar[$i]['pos_basla']=$ktemp['pos']+$temp['strlen']; } else if(substr($bulunanlar[$i][0],0,1)=='/') { @rsort($ktemp['aciklar']); $bulunanlar[$ktemp['aciklar'][0]]['pos_bit']=$ktemp['pos']-2; unset($ktemp['aciklar'][0],$bulunanlar[$i]); } $ktemp['pos']+=$temp['strlen']; } return $bulunanlar; } private function key_sirala(& $dizi) { if(is_array($dizi)==false) return FALSE; $temp=array(); foreach($dizi as $value) $temp[]=$value; $dizi=$temp; } private function ozellik_bul($harman){ $temp=explode(' ',trim($harman)); $temp_dizi=array(); for($k=0;$k<count($temp);$k++) { $ozellik=explode('=',$temp[$k]); if($ozellik[0]=='') $ozellik[0]='icerik'; $anahtar=$ozellik[0]; unset($ozellik[0]); $deger=implode('=',$ozellik); if(substr($deger,0,1)=='"'||substr($deger,0,1)=="'") { if(substr($deger,-1)!=substr($deger,0,1)) $temp[($k+1)]=$temp[$k].' '.$temp[($k+1)]; $deger=substr($deger,1,strlen($deger)-2); } $temp_dizi[$anahtar]=$deger; } return $temp_dizi; } /** * türü ve özellikleri belirtilen taglar&#305; filtreler ve sonuc de&#287;i&#351;kenine yazar * */ public function cek() { if( $this->durum <1 ) { $this->log.='Henüz link okunmam&#305;&#351;, cek fonksiyonu link okutuyor<br />'; if($this->oku()===false) return false; } $tag_ozellikler=$this->kapananbul($this->harman); $bulunan_s=count($tag_ozellikler); if($bulunan_s>0) { $this->key_sirala($tag_ozellikler); $this->log.=count($tag_ozellikler).' tane tag bulundu<br />'; for($i=0;$i<count($tag_ozellikler);$i++) { $tag_temp=$this->ozellik_bul($tag_ozellikler[$i][1]); $tag_temp['icerik']=substr($this->harman,$tag_ozellikler[$i]['pos_basla'],((isset($tag_ozellikler[$i]['pos_bit'])?$tag_ozellikler[$i]['pos_bit']:0)-$tag_ozellikler[$i]['pos_basla'])+1); $tag_ozellikler[$i]=$tag_temp; } } else { preg_match_all('@<([a-zA-Z0-9\n\t\s=\"\']*?)'.$this->tag.'(.*?)([/]?)>@is',$this->harman,$bulunanlar); $bulunan_s=count($bulunanlar[2]); if($bulunan_s>0) { $this->log.=$bulunan_s.' tane tag bulundu<br />'; $tag_ozellikler=array(); for($i=0;$i<$bulunan_s;$i++) { $ozellikler=preg_replace('@\s+@',' ',str_replace(array("\n","\t"),' ',$bulunanlar[2][$i])); $temp=explode(' ',trim($ozellikler)); for($k=0;$k<count($temp);$k++) { $ozellik=explode('=',$temp[$k]); if($ozellik[0]=='') $ozellik[0]='esas'; $anahtar=$ozellik[0]; unset($ozellik[0]); $deger=implode('=',$ozellik); if(substr($deger,0,1)=='"'||substr($deger,0,1)=="'") { if(substr($deger,-1)!=substr($deger,0,1)) $temp[($k+1)]=$temp[$k].' '.$temp[($k+1)]; $deger=substr($deger,1,strlen($deger)-2); } $tag_ozellikler[$i][$anahtar]=$deger; } } } else { $this->durum=2; $this->log.='Uygun tag bulunamad&#305;'; return false; } } if(array_key_exists('*',$this->ozellik)) { $this->sonuc=$tag_ozellikler; $this->log.='Tüm taglar sonuc olarak verildi<br />'; return true; } if(array_key_exists('?',$this->ozellik)) { $temp=count($tag_ozellikler); for($i=0;$i<$temp;$i++) { if(array_search($this->ozellik['?'],$tag_ozellikler[$i])===false) { unset($tag_ozellikler[$i]); } } $this->log.='Özelliklerinden herhangi biri '.$this->ozellik['?'].' olmayan taglar elendi<br />'; unset($this->ozellik['?']); } $temp=count($tag_ozellikler); while(array_search('?',$this->ozellik)!==false) { $this->key_sirala($tag_ozellikler); $key=array_search('?',$this->ozellik); $temp=count($tag_ozellikler); for($i=0;$i<$temp;$i++) { if(is_array($tag_ozellikler[$i]) && array_key_exists($key,$tag_ozellikler[$i])===false) { unset($tag_ozellikler[$i]); } } $this->log.=$key.' özelli&#287;i olmayan taglar elendi<br />'; unset($this->ozellik[$key]); } $temp=count($this->ozellik); if($temp>0) { $tag_temp=$tag_ozellikler; $tag_ozellikler=array(); foreach($this->ozellik as $anahtar => $deger ) { for($i=0;$i<count($tag_temp);$i++) { if(isset($tag_temp[$i][$anahtar])){ if(strpos($deger,'||')!==false) { $degerler=explode('||',$deger); if(array_search($tag_temp[$i][$anahtar],$degerler)!==false) {$tag_ozellikler[]=$tag_temp[$i]; break; } else{ foreach($degerler as $temp_deger) { if((strpos($temp_deger,'*')!=0) && strpos($tag_temp[$i][$anahtar],substr($temp_deger,0,strpos($temp_deger,'*'))!==false) ) { $tag_ozellikler[]=$tag_temp[$i]; break; } } } } else if($tag_temp[$i][$anahtar] == $deger) { $tag_ozellikler[]=$tag_temp[$i]; }elseif((strpos($deger,'*')!=0) && strpos($tag_temp[$i][$anahtar],substr($deger,0,strpos($deger,'*')))!==false) { $tag_ozellikler[]=$tag_temp[$i]; } } } $this->log.='<b>'.$anahtar.'</b> de&#287;eri <b>'.$deger.'</b> olmayan taglar elendi<br />'; } } $this->log.=count($tag_ozellikler).' adet uygun tag kald&#305;<br />'; $this->sonuc=$tag_ozellikler; $this->durum=2; return true; } } ?>