www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/classes/collect_facade.php
<?php /** * @brief 商品采集器与iwebshop外观模式 * @author chendeshan * @date 2014/1/2 8:25:15 */ class collect_facade { /** * @brief 运行采集功能 * @param string $collect_name 采集器名字 * @param string $url 采集器url地址 * @param int $num 采集商品数量 */ public static function run($collect_name,$url,$num = 20) { set_time_limit(0); ini_set("max_execution_time", "0"); $pluginDir = IWeb::$app->getBasePath().'plugins/collect/'; switch($collect_name) { //京东商城数据采集器 case 'jd': { include_once($pluginDir.'jd_collect.php'); $collectorObject = new jd_collect(); } break; default: { return array('result' => 'fail','message' => '没有找到采集器'); } } $collectorObject->readListPage($url); $goodsData = $collectorObject->collect($num); //实例化对象 $catObj = new IModel('category'); $catExtObj = new IModel('category_extend'); $attrObj = new IModel('attribute'); $goodsObj = new IModel('goods'); $goodsAttrObj = new IModel('goods_attribute'); $photoObj = new IModel('goods_photo'); $photoRelObj = new IModel('goods_photo_relation'); $modelObj = new IModel('model'); $productsObj = new IModel('products'); //信息入库 if(isset($goodsData['cat']) && $goodsData['cat']) { $model_id = 0; $attrMap = array(); if(isset($goodsData['attr']) && $goodsData['attr']) { $modelName = end($goodsData['cat']); //1,模型存在情况-直接读取 if($modelRow = $modelObj->getObj('name = "'.$modelName.'"')) { $model_id = $modelRow['id']; $attrList = $attrObj->query('model_id = '.$model_id); foreach($attrList as $key => $val) { $attrMap[$val['name']] = $val['id']; } } //2,模型不存在情况-插入操作 else { //创建模型 $modelObj->setData(array('name' => $modelName)); $model_id = $modelObj->add(); //创建模型属性 foreach($goodsData['attr'] as $key => $val) { $attrObj->setData(array('model_id' => $model_id,'type' => 2,'name' => $key,'value' => $val,'search' => 1)); $newAttrId = $attrObj->add(); $attrMap[$key] = $newAttrId; } } } //分类添加 $parentId = 0; $catPath = array(); foreach($goodsData['cat'] as $key => $val) { if($catRow = $catObj->getObj('name = "'.$val.'"')) { $catPath[] = $parentId = $catRow['id']; } else { $catObj->setData(array('name' => $val,'parent_id' => $parentId,'model_id' => $model_id)); $parentId = $catObj->add(); $catPath[] = $parentId; } } //处理商品数据 foreach($goodsData['item'] as $key => $val) { //商品添加 $goodsObj->setData(array( 'name' => $val['name'], 'sell_price' => $val['price'], 'market_price' => $val['price'], 'model_id' => $model_id, 'goods_no' => $val['goods_no'], 'up_time' => $val['up_time'], 'content' => IFilter::act($val['content'],'text'), 'store_nums' => 100, 'weight' => $val['weight'], 'unit' => $val['unit'], 'create_time' => date('Y-m-d H:i:s'), )); $goods_id = $goodsObj->add(); //商品图片拷贝 if(isset($val['img']) && $val['img']) { foreach($val['img'] as $img) { $md5Val = md5_file($img); $photoData = $photoObj->getObj('id = "'.$md5Val.'"'); //如果图库中没有图片数据就要拷贝 if(!$photoData) { $destFile = PhotoUpload::hashDir().'/'.basename($img); while(true) { $copyResult = IFile::copy($img,$destFile); if($copyResult) { $photoObj->setData(array('id' => $md5Val,'img' => $destFile)); $photoObj->add(); break; } } } //商品图片关联 $photoRelObj->setData(array('goods_id' => $goods_id,'photo_id' => $md5Val)); $photoRelObj->add(); } $imgVal = isset($destFile) ? $destFile : $photoData['img']; $goodsObj->setData(array('img' => $imgVal)); $goodsObj->update('id = '.$goods_id); } //商品与商品分类关联 if($catPath) { foreach($catPath as $catId) { $catExtObj->setData(array('goods_id' => $goods_id,'category_id' => $catId)); $catExtObj->add(); } } //商品与属性关联 if(isset($val['attr']) && $val['attr']) { foreach($val['attr'] as $attrName => $attrVal) { if(isset($attrMap[$attrName])) { $attrArray = explode(',',$attrVal); foreach($attrArray as $k => $v) { $goodsAttrObj->setData(array( 'goods_id' => $goods_id, 'attribute_id' => $attrMap[$attrName], 'attribute_value' => $v, 'model_id' => $model_id )); $goodsAttrObj->add(); } } } } } return array('result' => 'success'); } else { return array('result' => 'fail','message' => '采集信息不存在'); } } }