PHP页面数据采集程序的一个插件子类

下面我们实现一个具体的采集类,这个类用来采集 游戏币交易网站的游戏币价格和库存数据

我们共开发了几十个采集插件,打算将市面上所有的游戏币交易网站的数据都收集起来,

这是其中的一个,(有些必要的注释已经去除,太长了,而且都是一样的)

<?php
//包含共用函数库
include_once('Gather_Base.php');
final class 
bank extends Gather_Base{
private 
$homepage='http://www.rmt-bank.co.jp/';
private 
$classname='bank';
private 
$encoding='shift-jis';
function 
__construct(){
  
//调用父类的构造方法,增加两个参数,
  //一个是类名,一个是编码
  
parent::Gather_Base($this->classname,$this->encoding);
}
//得到数据
function getData(){
  
$games=$this->getGames($this->homepage);
  if(
$games===false)return false;
  
//每个游戏处理
  
foreach($games as $name=>$http){
   echo 
"\nGame:$name\n";
   
$this->log('Game',$name);
   
$price=$this->getPrice($http['sell']);
   if(
$price!==false)
    
$this->areasSell[$name]=$price;
   
$price=$this->getPrice($http['buy']);
   if(
$price!==false)
    
$this->areasBuy[$name]=$price;
  }
}
function 
getPrice($http){
  if(!
$http)return false;
  
$thisGame=array();
  
$doc=$this->get($http);
  
$doc=$this->getMiddle($doc,'cart_t');
  
$table=$this->getTableData($doc);
  
//dump($table);exit;
  
$headers=$table[1];
  
$favorCount=count($headers);
  
$last='last area';
  for(
$i=2;$i<count($table);$i+=2){
   
$tds=$table[$i];
   
$name=trim($tds[0]);
   
//echo "I=$i  Name=$name  Last=$last\n";
   
if(substr($name,0,strlen($last))==$last)continue;
   
$last=$name;
   
$stock=intval($tds[1]);
   
$price=intval($tds[3]);
   
$thisGame[$name]=array(
    
'areaName'=>$name,
    
'basePrice'=>$price,
    
'stock'=>$stock,
    
'favor'=>array()
   );
   for(
$j=0;$j<$favorCount;$j++){
    
$favorStock=intval($headers[$j]);
    
$favorPrice=$tds[$j +3];
    
$thisGame[$name]['favor'][$favorStock]=intval($favorPrice);
   }
  }
  
//dump($thisGame);exit;
  
return $thisGame;
}
function 
getBuyPrice($http){
  
$thisGame=array();
  
$doc=$this->get($http);
  
$doc=$this->getMiddle($doc,'botan');
  
$table=$this->getTableData($doc);
  
//dump($table);exit;

  
for($i=1;$i<count($table);$i++){
   
$tds=$table[$i];
   
$name=$tds[0];
   
$stock=intval($tds[1]);
   
$price=intval($tds[2]);
   
$thisGame[$name]=array(
    
'areaName'=>$name,
    
'basePrice'=>$price,
    
'stock'=>$stock,
   );
  }
  
//dump($thisGame);exit;
  
return $thisGame;
}

function 
getGames($GamePage){
  
$doc $this->get($GamePage);
  if(
$doc===false)return false;
  
$reg='/<td[^>]*><a\s*href="([^"]*)"\s*target="\_self"><img[^>]*alt="([^"]*)"><\/a><\/td>/i';
  
$matchs=$this->pregMatchAll($reg,$doc);
  
//dump($matchs);exit;
  
foreach($matchs as $match){
   if(
$match==$matchs[0])continue;
   
$name=$match[2];
   
$mts=$this->pregMatch('/(?:rmt)?\s*(\S*)/i',$name);
   
//dump($name);dump($mts);exit;
   
$name=trim($mts[1]);
   
$name=$this->getMiddle($name,null,' ',true);
   
$http=$match[1];
   
$doc=$this->get2($http);
   
$regSell='/<A\s*href="([^"]*)"\s*target="\_self"><IMG\s*src="gallery\/order\_sell\.jpg"[^>]*>/i';
   
$regBuy='/<A\s*href="([^"]*)"\s*target="\_self"><IMG\s*src="gallery\/order\_buy\.jpg"[^>]*>/i';
   
$mtsSell=$this->pregMatch($regSell,$doc,true);
   
$mtsBuy=$this->pregMatch($regBuy,$doc,true);
   if(
$mtsSell)
    
$httpSell=$mtsSell[1];
   else
    
$httpSell=false;
   if(
$mtsBuy)
    
$httpBuy=$mtsBuy[1];
   else
    
$httpBuy=false;
   
//dump($http);dump($mtsSell);dump($mtsBuy);exit;
   
if(!$mts)continue;
   
$games[$name]=array(
    
'sell'=>$httpSell,
    
'buy'=>$httpBuy
   
);
  }
  
//dump($games);exit;
  
return $games;
}
}
?>

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(353) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值