如何在系统中采集淘宝中客户的数据呢?也就是客户之前和淘宝合作,怎么把把淘宝等上的数据同步到我们的小程序系统。
1.第三方开发平台和淘宝签订协议,拿到淘宝采集接口的key。
2.通过脚本服务器跑脚本进行数据采集(建议单独买台服务器专门跑脚本,不然会占用生产服务器CPU太多导致生产代码可能出现其他问题)
上代码
public function actionCollectGoods($page = 0)
{
date_default_timezone_set("PRC");
$goodsData = [
['goods_no'=>'10002513','url'=>'http://detail.tmall.com/item.htm?id=613469933130'],
];
$chunkData = array_chunk($goodsData, 200); //200个做一个记录对象
$count = count($chunkData);
$goodsData = $chunkData[$page];
$inventoryTable = Inventory::tableName();
$info = Goods::find()->where(['id' => 143662])->select('id,attr,store_id')->one();
$info->attr = json_decode($info->attr, true);
foreach ($goodsData as $k => $v) {
$msg = "{$k}货号:{$v['goods_no']}----URL:{$v['url']}----";
//查找商品货号是否存在
$isGoodsNo = Inventory::find()->where(['store_id' => $info->store_id, 'goods_no' => $v['goods_no'], 'is_delete' => 0])->one();
if ($isGoodsNo) {
echo $msg.'货号已经存在'.PHP_EOL;
continue;
}
$form = new CopyForm();
$form->url = $v['url'];
$res = $form->copy();
if ($res['code'] == 0) {
$attr = $info->attr;
$attr[0]['no'] = $v['goods_no'];
$data = $res['data'];
$goods = new Goods();
$goods->store_id = $info->store_id;
$goods->name = $data['title'];
$goods->cover_pic = $data['picsPath'][0];
$goods->price = $data['sale_price'];
$goods->cost_price = 1;
$goods->original_price = isset($data['price']) ? $data['price'] : $data['sale_price'];
$goods->virtual_sales = isset($data['sale_count']) ? $data['sale_count'] : 0;
$goods->unit = '件';
$goods->detail = preg_replace('/\\\u[a-z0-9]{4}/', '', $this->userTextEncode($data['detail_info']));
$goods->attr = json_encode($attr, JSON_UNESCAPED_UNICODE);
$goods->full_cut = '{"pieces":"","forehead":""}';
$goods->integral = '{"give":"0","forehead":"","more":""}';
$goods->drug_type = 4;
$goods->use_attr = 0;
$goods->is_level = 0;
$goods->addtime = time();
$result = $goods->save();
if ($result) {
$gattr = json_encode($attr[0], JSON_UNESCAPED_UNICODE);
$sql = "insert into {$inventoryTable} (store_id, goods_id, price, goods_no, shop_id, attr_id, attr, is_delete)
select store_id, {$goods->attributes['id']}, {$data['price']}, {$v['goods_no']}, shop_id, attr_id, '{$gattr}', is_delete from {$inventoryTable}
where store_id = {$info->store_id} and goods_id={$info->id} and is_delete=0";
\Yii::$app->db->createCommand($sql)->execute();
foreach ($data['picsPath'] as $pic_url) {
$goods_pic = new GoodsPic();
$goods_pic->goods_id = $goods->attributes['id'];
$goods_pic->pic_url = $pic_url;
$goods_pic->is_delete = 0;
$goods_pic->save();
}
echo $msg.$goods->attributes['id'].'成功'.PHP_EOL;
}else{
file_put_contents('error.txt', $msg.'失败'.PHP_EOL, FILE_APPEND);
echo $msg.'失败'.PHP_EOL;
}
}else{
file_put_contents('error.txt', $msg.'查询错误'.$res['msg'].PHP_EOL, FILE_APPEND);
echo $msg.'查询错误'.$res['msg'].PHP_EOL;
usleep(3000000);
}
usleep(100000);
}
}
//去除部分emoji
function userTextEncode($str){
if(!is_string($str)) return $str;
if(!$str || $str=='undefined')return '';
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){
return addslashes($str[0]);
},$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
return json_decode($text);
}
$good_data数组是淘宝推送过来的,所以需要付费的,采集结果插入我们系统,即可在小程序同步数据进行销售