-
Notifications
You must be signed in to change notification settings - Fork 1.6k
产品采集
liaofei edited this page Jan 20, 2021
·
1 revision
商品采集为驱动类加载,可以二开加入不同驱动类型
配置文件
\config\product.php
配置文件中参数default
用以设置默认驱动类型,不同驱动类型参数在stores
下配置
<?php
return [
//默认查询模式
'default' => '99api',
//驱动模式
'stores' => [
//99api
'copy' => [
//配置参数
],
//其他类型
'other' => [
//配置参数
]
]
];
\crmeb\services\product\Product.php
商品采集驱动入口类,继承 \crmeb\basic\BaseManager
类
<?php
namespace crmeb\services\product;
use crmeb\basic\BaseManager;
use crmeb\services\AccessTokenServeService;
use think\facade\Config;
/**
* Class Product
* @package crmeb\services\product
* @mixin \crmeb\services\product\storage\Copy
*/
class Product extends BaseManager
{
/**空间名
* @var string
*/
protected $namespace = '\\crmeb\\services\\product\\storage\\';
protected $handleAccessToken;
/**
* 默认驱动
* @return mixed
*/
protected function getDefaultDriver()
{
return Config::get('product.default', 'copy');
}
/**
* 获取类的实例
* @param $class
* @return mixed|void
*/
protected function invokeClass($class)
{
if (!class_exists($class)) {
throw new \RuntimeException('class not exists: ' . $class);
}
$this->getConfigFile();
if (!$this->config) {
$this->config = Config::get($this->configFile . '.stores.' . $this->name, []);
}
if (!$this->handleAccessToken) {
$this->handleAccessToken = new AccessTokenServeService($this->config, $this->name, $this->configFile);
}
$handle = Container::getInstance()->invokeClass($class, [$this->name, $this->handleAccessToken, $this->configFile]);
$this->config = [];
return $handle;
}
}
目录\crmeb\services\product\storage\
必需继承\crmeb\basic\BaseProduct.php
,并实现以下方法:
/**
* 开通服务
* @return mixed
*/
abstract public function open();
/**复制商品
* @return mixed
*/
abstract public function goods($url);
实例化商品采集类:
$product = new Product('驱动名称', ['配置参数'])
也可以使用:
$product = app()->make(Product::class, ['驱动名称', ['配置参数']]);
商品采集,直接使用$product
调用goods
方法传入参数就可以了:
$product->goods('其他商城商品详情页url');