Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Класс cms_http_parse

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Парсер для всех
ALEN
Отправлено: 25 Ноября, 2010 - 21:56:19
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Предлагаю выложить на php.su для всех
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /*
  3. *       Copyright ALEN
  4. *       The script is laid out in the free use
  5. *       Revenue Sharing STRICTLY PROHIBITED
  6. *       Do not take responsibility for the use of this class
  7. *       11/25/2010
  8. *      
  9. *       Авторские права пренадлежат ALEN
  10. *       Скрипт выложен в свободное пользование
  11. *       Коммерческое распространение СТРОГО ЗАПРЕЩЕНО
  12. *       Не несу ответственность за использование данного класса
  13. *       25.11.2010     
  14. */
  15. class cms_http_parse {
  16.  
  17.   public $url;
  18.   public $user_agent='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
  19. rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1';
  20.   public $sleep_time=0; // пауза между запросами в секундах
  21.   public $tmp_dir='./tmp/parser_file/'; // папка для временных файлов
  22.   public $time_curl=5; // время ожидания запроса к одной странице
  23.   public $cache_dir='./tmp/cache_parser/'; // папка с файлами кэша
  24.   public $file_coockies='./tmp/coockies_http_get.dat'; // файл с куками
  25.   public $cache_time_limit=259200; // время хранения кэша в секундах (3 суток)
  26.   public $charset='utf-8'; // кодировка результата данных и хранения кэша
  27.   public $post_array;
  28.   public $charset_ifno='windows-1251';  // если не указана кодировка то считать,
  29.                                         // что windows-1251
  30.   public $pref_file_b='.dat'; // Расширения файла с базой
  31.   public $pref_file_s='.html'; // Расширения файла кэша страницы
  32.   public $on_cached; // включение кэширование на +1
  33.  
  34.   function get_parse($url){
  35.     $ch=curl_init ($url);
  36.     curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);
  37.     curl_setopt ($ch,CURLOPT_VERBOSE,1);
  38.     curl_setopt ($ch,CURLOPT_HEADER,1);
  39.     curl_setopt ($ch,CURLOPT_TIMEOUT,$this->time_curl);
  40.     curl_setopt ($ch,CURLOPT_USERAGENT,$this->user_agent);
  41.     curl_setopt ($ch,CURLOPT_COOKIEJAR,$this->file_coockies);
  42.     curl_setopt ($ch,CURLOPT_COOKIEFILE,$this->file_coockies);
  43.     if (isset($this->post_array)){
  44.        curl_setopt ($ch,CURLOPT_POST,1);
  45.        curl_setopt ($ch,CURLOPT_POSTFIELDS,$this->post_array);
  46.     }
  47.     if($this->sleep_time>0){
  48.       sleep($this->sleep_time);
  49.     }
  50.     $page = curl_exec ($ch);
  51.     $this->ch_curl=$ch;
  52.     return $page;
  53.   }
  54.  
  55.   function if_get_parse($url){
  56.     $path_file_bd=$this->cache_dir.md5($this->url).$this->pref_file_b;
  57.     $path_file_site=$this->cache_dir.md5($this->url).$this->pref_file_s;
  58.     if(file_exists($path_file_bd) and file_exists($path_file_site)){
  59.       $bd=unserialize(file_get_contents($path_file_bd));
  60.       if($bd['time']>time()){
  61.         $page=file_get_contents($path_file_site);
  62.         if($bd['charset']!=$this->charset){
  63.           iconv($bd['charset'],$this->charset,$page);
  64.         }
  65.       return $page;
  66.       }
  67.     } else {
  68.       $page=$this->get_followlocation($url);
  69.       $page=preg_replace("#^([^\<]*)<(.*)#i","<\\2",$page);
  70.       $charset_page=$this->charset_page_parse();
  71.       if($this->charset!=''&&$charset_page!=$this->charset){
  72.         $page=iconv($charset_page,$this->charset,$page);
  73.       }
  74.       if($page!=''){
  75.         $this->puts_content($page);
  76.       }
  77.       $this->close_curle();
  78.       return $page;
  79.     }
  80.   }
  81.  
  82.   function get_followlocation($url){
  83.     $page=$this->get_parse($url);
  84.     if(preg_match("#Location\:\s?(.+)\s#i",$page)){
  85.       preg_match_all("#Location\:\s?(.+)\s#isU",$page,$link);
  86.       $page=$this->get_followlocation(trim($link[1][0]));    
  87.     }
  88.     return $page;
  89.   }
  90.  
  91.   function puts_content($text){
  92.     if($this->on_cached==1){
  93.     $path_file_bd=$this->cache_dir.md5($this->url).$this->pref_file_b;
  94.     $path_file_site=$this->cache_dir.md5($this->url).$this->pref_file_s;
  95.     $bd['time']=time()+$this->cache_time_limit;
  96.     $bd['charset']=$this->charset;
  97.     $bd['url']=$this->url;
  98.     $bd['time_load']=time();
  99.     file_put_contents($path_file_site,$text);
  100.     file_put_contents($path_file_bd,serialize($bd));
  101.   }}
  102.  
  103.   function charset_page_parse(){
  104.     $content_type=curl_getinfo($this->ch_curl,CURLINFO_CONTENT_TYPE);
  105.     if(preg_match("#charset=(.+)\s*#is",$content_type)){
  106.       preg_match_all("#charset=(.+)\s*#is",$content_type,$chars);
  107.       $charset=$chars[1][0];
  108.     } else {
  109.     $charset=$this->charset_ifno;
  110.     }
  111.     return $charset;
  112.   }
  113.  
  114.   function get($url){
  115.     $this->url=$url;
  116.     $page=$this->if_get_parse($url);
  117.     return $page;
  118.   }
  119.  
  120.   function close_curle(){
  121.     curl_close ($this->ch_curl);
  122.   }
  123. }
  124.  
  125.  


Использование:

PHP:
скопировать код в буфер обмена
  1. $parser=new cms_http_parse;
  2. #$parser->on_cached=1;
  3. #$parser->post_array='user=name&pass=password';
  4. echo $parser->get('http://php.su/');


P.S. Все данные по умолчанию сохраняются и выводятся в UTF-8 , делал для себя вообще, но если кто-то заметит недоработки и будут предложения по улучшению, можете писать. Так же класс обходит необходимость включения followlocation - что иногда бывает проблемой.
Скачать файл: cms_http_parse.php
Скачан раз: 162

(Отредактировано автором: 25 Января, 2011 - 11:45:20)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB