一个数据采集类

复制代码 代码如下:

  <?

  // 兼容 php4 php5

  // 程序作者  张建 52linux.com(我爱Linux)

  // 联系方法  [email protected]  QQ 733905

  // 简单调用方法

  /*

  <?

  include ("ugs.php"); // 你可以下载本ugs.phps 然后重命名为ugs.php

  $ugs = new ugs();

  $url = "http://domainname.com/path_to_your_target?param";

  $ugs->seturl($url);

  $ugs->gather();

  //............这里可以调用本类里的其它方法,对$ugs->value_  做调整,

  以满足您的要求

  $content=$ugs->getcontent();

  print($content);

  ?>

  */

  class ugs

  {

  var $value_  ;  //'目标内容

  var $src_    ;  //'目标URL地址

  function seturl($url)

  {

  $this->src_=$url;

  }

  function getcontent()

  {

  return $this->value_;

  }

  function getfile($url)

  // 获取目标

  {

  $url_parsed = parse_url($url);

  $host = $url_parsed["host"];

  $port = $url_parsed["port"];

  if ($port==0)  $port = 80;

  $path = $url_parsed["path"];

  if (empty($path))

  $path="/";

  if ($url_parsed["query"] != "")

  $path .= "?".$url_parsed["query"];

  $out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";

  $fp = fsockopen($host, $port, $errno, $errstr, 30);

  fwrite($fp, $out);

  $body = false;

  while (!feof($fp))

  {

  $s = fgets($fp, 1024);

  if ( $body )  $in .= $s;

  if ( $s == "\r\n" )

  $body = true;

  }

  fclose($fp);

  return $in;

  }

  function getfile_curl($url)

  {

  $curl="/usr/local/bin/curl " ; // path to your curl

  $curl_options=" -s --connect-timeout 10  --max-time 10  ";

  // curl 用法请参考 curl --help 或者 man curl

  // curl 参数非常之丰富,可以模拟各种浏览器(agent) 可以设置referer

  $cmd="$curl $curl_options $url ";

  @exec($cmd,$o,$r);

  if($r!=0)

  {

  return "超时";

  }

  else

  {

  $o=join("",$o);

  return $o;

  }

  }

  function gather_curl($curl)

  {

  $http=$this->getfile_curl($this->src_);

  return $this->value_=$http;

  }

  function gather_array($url)

  {

  return file($url);

  }

  function   gather()

  // 开始收集

  {

  $http=$this->getfile($this->src_);

  return $this->value_=$http;

  }

  function gather_local($toline=true)

  // 处理本地文件

  {

  if($toline)

  {

  $http=file($this->src_);

  return $this->value_=$this->BytesToBstr($http);

  }

  else

  {

  $http=file($this->src_);

  return $this->value_=$http;

  }

  }

  function noReturn()

  // 删除回车换行

  {

  $this->value_=str_replace("\n","",$this->value_);

  $this->value_=str_replace("\r","",$this->value_);

  }

  function change($oldStr,$str)

  //'对收集到的内容中的个别字符串用新值更换/方法

  //'参数分别是旧字符串,新字符串

  {

  $this->value_=str_replace($oldStr,$str,$this->value_ );

  }

  function cut($start,$end,$no='1',$comprise='')

  //'按指定首尾字符串对收集的内容进行裁减(不包括首尾字符串)方法

  // $no 必须是 1,2 3 ... 不允许是0

  //$comprise 可以选择 start 或者 end 或者 all 或者 什么都不填

  {

  $string=explode($start,$this->value_);

  //print_r($string);

  $string=explode($end,$string[$no]);

  //print_r($string);

  switch ($comprise){

  case 'start':

  $string=$start.$string[0];

  break;

  case 'end':

  $string=$string[0].$end;

  break;

  case 'all':

  $string=$start.$string[0].$end;

  break;

  default:

  $string=$string[0];

  }

  return $this->value_=$string;

  }

  function  filt($head,$bot,$str,$no='1',$comprise='')

  //'按指定首尾字符串对收集的内容用新值进行替换(不包括首尾字符串)方法

  // '参数分别是首字符串,尾字符串,新值,新值位空则为过滤

  {

  $tmp_v=$this->value_;

  $tmp=$this->cut($head,$bot,$no,$comprise);

  return $this->value_=str_replace($tmp,$str,$tmp_v);

  }

  function  local()

  {

  //'将收集的内容中的绝对URL地址改为本地相对地址

  // 还没实现

  }

  function  replaceByReg($patrn,$str)

  //'对收集的内容中的符合正则表达式的字符串用新值进行替换/方法

  //'参数是你自定义的正则表达式,新值

  {

  return $this->value_=join("",preg_replace($patrn,$str,$this->value_));

  }

  function debug()

  //调试显示

  {

  $tempstr="<SCRIPT>function runEx(){var winEx2 = window.open(\"\", \"winEx2\", \"width=500,height=300,status=yes,menubar=no,scrollbars=yes,resizable=yes\"); winEx2.document.open(\"text/html\", \"replace\"); winEx2.document.write(unescape(event.srcElement.parentElement.children[0].value)); winEx2.document.close(); }function saveFile(){var win=window.open('','','top=10000,left=10000');win.document.write(document.all.asdf.innerText);win.document.execCommand('SaveAs','','javascript.htm');win.close();}</SCRIPT><center><TEXTAREA id=asdf name=textfield rows=32  wrap=VIRTUAL cols=\"120\">".$this->value_."</TEXTAREA><BR><BR><INPUT name=Button onclick=runEx() type=button value=\"查看效果\">  <INPUT name=Button onclick=asdf.select() type=button value=\"全选\">  <INPUT name=Button onclick=\"asdf.value=''\" type=button value=\"清空\">  <INPUT onclick=saveFile(); type=button value=\"保存代码\"></center>";

  echo $tempstr;

  }

  }

  ?>