Skip to content

产品采集

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');
Clone this wiki locally