wego是一款很不错的导购系统,无论前后台设计风格和功能都还不错,可有时我们的确需要一些自定义的功能,毕竟万千世界,大家都做一样的东西,采集同样的数据,能不烦吗?哈哈,今天就奉献上一个wego拍拍采集的插件,虽有瑕疵,但愿能和大家一起完善。如果做paipai推广,需要注册一些帐号资料,主要是腾讯开放平台的应用和易推广ID http://etg.qq.com/,我要-人气购物平台就是采用这种方式调用数据的。

推广者ID是推广人身份的唯一编号,可不能搞错。其次需要我们在腾讯开放平台上http://fuwu.paipai.com/app/ui/my/list/all.xhtml创建我们的应用已获得CPS调用权限。

接下来我们完成功能实现吧,既然是插件就需要配置吧,咱们首先完成配置吧。

配置完成了,可后台功能,咱们还没实现了,别着急,马上附上代码,只附上有用的,如果大家觉得自己替换马上,可使用本文的附件直接替换,替换前记得要备份哟。

\admin\Lib\Action\items_collectAction.class.php

拍拍API设置:

  1. /**
  2. * @desc 拍拍API
  3. */
  4. public function paipaiapi(){
  5. $setting_mod = M('setting');
  6. if (isset($_POST['dosubmit'])) {
  7. $paipai['paipai_userid'] = isset($_POST['paipai_userid']) && trim($_POST['paipai_userid']) ? trim($_POST['paipai_userid']) : $this->error('请填写userid');
  8. $paipai['paipai_appoauthid'] = isset($_POST['paipai_appoauthid']) && trim($_POST['paipai_appoauthid']) ? trim($_POST['paipai_appoauthid']) : $this->error('请填写appoauthid');
  9. $paipai['paipai_appoauthkey'] = isset($_POST['paipai_appoauthkey']) && trim($_POST['paipai_appoauthkey']) ? trim($_POST['paipai_appoauthkey']) : $this->error('请填写appoauthkey');
  10. $paipai['paipai_accesstoken'] = isset($_POST['paipai_accesstoken']) && trim($_POST['paipai_accesstoken']) ? trim($_POST['paipai_accesstoken']) : $this->error('请填写accesstoken');
  11. $paipai['paipai_uid'] = isset($_POST['paipai_uid']) && trim($_POST['paipai_uid']) ? trim($_POST['paipai_uid']) : $this->error('请填写uid');
  12. foreach( $paipai as $key=>$val ){
  13. $setting_mod->where("name='$key'")->save(array('data'=>$val));
  14. }
  15. $this->success('修改成功', U('items_collect/paipaiapi'));
  16. }
  17. $res = $setting_mod->where("name='paipai_userid' OR name='paipai_appoauthid' OR name='paipai_appoauthkey' OR name='paipai_accesstoken' OR name='paipai_uid'")->select();
  18. foreach( $res as $val ){
  19. $paipaiset[$val['name']] = $val['data'];
  20. }
  21. $this->assign('paipai',$paipaiset);
  22. $this->display();
  23. }
  1. //拍拍秒数据采集入库
  2. private function paipai_collect_insert($item,$cate_id){
  3. $items_mod=D('items');
  4. $items_tags_mod=D('items_tags');
  5. $items_tags_item_mod=D('items_tags_item');
  6. //需要判断商品是否已经存在
  7. $isset=$items_mod->where("item_key='".$item['item_key']."'")->getField('id');
  8. if($isset){
  9. return;
  10. }
  11. $add_time=time();
  12. $item['img']=$item['bigUri'];
  13. $item['simg']=$item['imgUri'];
  14. $item['bimg']=$item['bigUri'];
  15. if($item['popular']==0){
  16. $item['popular']=1;
  17. }
  18.  
  19. $item_id=$items_mod->add(array(
  20. 'title'=>ReplaceKeywords(strip_tags($item['title'])),
  21. 'cid'=>$cate_id,
  22. 'sid'=>$item['sid'],
  23. 'item_key'=>$item['item_key'],
  24. 'img'=>$item['img'],
  25. 'simg'=>$item['simg'],
  26. 'bimg'=>$item['bimg'],
  27. 'price'=>$item['price'],
  28. 'url'=>$item['tagUrl'],
  29. 'likes'=>$item['popular'],
  30. 'seller_name'=>$item['nickName'],
  31. 'cash_back_rate'=>$item['cvValue'],
  32. 'haves'=>1,
  33. 'add_time'=>$add_time,
  34. ));
  35. //处理标签
  36. $tags = $items_tags_mod->get_tags_by_title(strip_tags($item['title']));
  37. if ($tags) {
  38. $tags = array_unique($tags);
  39. foreach ($tags as $tag) {
  40. $isset_id = $items_tags_mod->where("name='".$tag."'")->getField('id');
  41. if ($isset_id) {
  42. $items_tags_mod->where('id='.$isset_id)->setInc('item_nums'); //如果存在此标签的商品 让item_nums+1
  43. $items_tags_item_mod->add(array(
  44. 'item_id' => $item_id,
  45. 'tag_id' => $isset_id
  46. ));
  47. } else {
  48. $tag_id = $items_tags_mod->add(array('name'=>$tag));
  49. $items_tags_item_mod->add(array(
  50. 'item_id' => $item_id,
  51. 'tag_id' => $tag_id
  52. ));
  53. }
  54. }
  55. }
  56. }
  1. public function collect()
  2. {
  3. if(isset($_REQUEST['dosubmit'])){
  4. $cate=implode(',',$_REQUEST['cate']);
  5.  
  6. header("location:".U('items_collect/taobao_batch_collect_jump?act=batch&cate='.$cate));
  7. exit;
  8. }
  9. $code = isset($_REQUEST['code']) ? trim($_REQUEST['code']) : $this->error('参数错误');
  10. $items_cate_mod = D('items_cate');
  11. switch ($code) {
  12. case 'taobao':
  13. $res=get_items_cate_list();
  14. $this->assign('items_cate_list', $res['sort_list']);
  15. break;
  16. case 'miao':
  17. $res=get_items_cate_list('0','0','1','collect_miao');
  18. $this->assign('items_cate_list', $res['sort_list']);
  19. break;
  20. case "paipai":
  21. $this->error("暂不支持此功能。");
  22. break;
  23. }
  24. $this->assign('code',$code);
  25. $this->display();
  26. }
  1. //分类采集
  2. public function cate_collect()
  3. {
  4. if(isset($_REQUEST['dosubmit'])){
  5. $cate=implode(',',$_REQUEST['cate']);
  6. header("location:".U('items_collect/taobao_batch_collect_jump?act=batch&cate='.$cate));
  7. exit;
  8. }
  9. $code = isset($_REQUEST['code']) ? trim($_REQUEST['code']) : $this->error('参数错误');
  10. $items_cate_mod = D('items_cate');
  11. switch ($code) {
  12. case 'taobao':
  13. $items_cate_mod = D('items_cate');
  14. $taocate=$this->get_taocats();
  15. $this->assign('cate_list', $taocate);
  16. break;
  17. case 'miao':
  18. $items_cate_mod = D('items_cate');
  19. $miaocate=$this->get_miaocats();
  20. $this->assign('cate_list', $miaocate);
  21. break;
  22. case "paipai":
  23. $items_cate_mod = D('items_cate');
  24. $paipaicate=$this->get_paipaicats();
  25. break;
  26. }
  27. $this->assign('code',$code);
  28. $this->display();
  29. }
  1. /**
  2. * @desc 获取拍拍分类
  3. */
  4. private function get_paipaicats($cid){
  5. //$paipai_api=$this->paipai_client();
  6. //$paipai_api->setApiPath("/deal/sellerSearchDealList.xhtml")
  7. //exit;
  8. return null;
  9. }

拍拍搜索功能

  1. public function search_paipai(){
  2. $_GET=setFormString($_GET);
  3. $keyword = isset($_GET['keyword']) && trim($_GET['keyword']) ? trim($_GET['keyword']) : '';
  4. $pages = isset($_GET['pages']) && intval($_GET['pages']) ? intval($_GET['pages']) : 1;
  5. $p=isset($_GET['p'])?$_GET['p']:1;
  6. $start_price=$_GET['begPrice'];
  7. $end_price=$_GET['endPrice'];
  8. //获取此商品对应的商家sid
  9. $items_cate_mod = D('items_cate');
  10. $items_site_mod = D('items_site');
  11. $paipai_api = $this->paipai_client(); //获取59秒api设置信息
  12. $paipai_api->setApiPath("/cps/cpsCommSearch.xhtml");//这个是用户需要调用的 接口函数
  13. $paipai_api->setMethod("get");//post
  14. $paipai_api->setCharset("utf-8");//gbk
  15. $paipai_api->setFormat("json");//gbk
  16. !empty($_GET['begPrice'])&&$params['begPrice']=$_GET['begPrice'];
  17. !empty($_GET['endPrice'])&&$params['endPrice']=$_GET['endPrice'];
  18. !empty($_GET['keyWord'])&&$params['keyWord']=$_GET['keyWord'];
  19. !empty($_GET['pageSize'])&&$params['pageSize']=$_GET['pageSize'];
  20. !empty($_GET['degree'])&&$params['degree']=$_GET['degree'];
  21. !empty($_GET['saleType'])&&$params['saleType']=$_GET['saleType'];
  22. //填写推广者ID
  23. $params['userId']=$this->setting['paipai_userid'];
  24. $paipai_api->setParams($params);
  25. $data=$paipai_api->invoke();
  26. if(!$data||$data->CpsCommSearchResult->errorCode!=0)
  27. return;
  28. $data=json_decode($data);
  29. $goods_list= $data->CpsCommSearchResult->vecComm;
  30. $goods_list_s = array();
  31. foreach ($goods_list as $val){
  32. $val->price=doubleval(($val->price/100));
  33. $val->cvValue=doubleval(($val->cvValue/10000));
  34. $goods_list_s[$val->itemId]=get_object_vars_final($val);
  35. }
  36. //每次保存
  37. count($goods_list_s)>0 && F('goods_list_paipai',$goods_list_s);
  38. $this->assign('list', $goods_list_s);
  39. $this->display();
  40.  
  41. }
  1. /**
  2. * @desc 拍拍数据发布
  3. */
  4. public function publishpaipai(){
  5. $ids=$_GET['ids'];
  6. if(isset($_POST['dosubmit'])){
  7. //从缓存中获取本页商品数据
  8. $items_cate_mod = D('items_cate');
  9. $ids=$_POST['ids'];
  10. $ids_arr = explode(',', $ids);
  11. $cate_id=$_POST['cid'];
  12. $goods_list_s = F('goods_list_paipai');
  13. $items_site_mod = D('items_site');
  14. $sid = $items_site_mod->where("alias='paipai'")->getField('id');
  15. $items_nums = 0;
  16. foreach ($goods_list_s as $key => $val) {
  17. if (in_array($key,$ids_arr)) {
  18. $val['item_key'] = 'paipai_'.$val['itemId'];
  19. $val['sid'] = $sid;
  20. $this->paipai_collect_insert($val,$cate_id); //数据入库
  21. $items_nums++;
  22. }
  23. }
  24. if ($items_nums>0) {
  25. $items_cate_mod->where('id='.$cate_id)->setInc('item_nums', $items_nums);
  26. }
  27. $this->collect_success('采集完成', '', 'collect');
  28. }else{
  29. $items_cate_mod = D('items_cate');
  30. $cate_list=$items_cate_mod->get_top2_list();
  31. $this->assign('cate_list', $cate_list);
  32. $this->assign('ids',$ids);
  33. }
  34. $this->display();
  35. }

最后一步我们追加系统需要的API到系统vendar库中:\includes\thinkphp\Extend\Vendor\apipaipai

HttpClient.class.php

PaiPaiOpenApiOauth.php

拍拍易推广CPSAPI:http://files.cnblogs.com/mengdejun/apipaipai.zip

整个插件附件:http://files.cnblogs.com/mengdejun/wyao.in.paipai.zip

现在我们可以畅快的使用拍拍产品了,多一种选择,多一种收获,何乐而不为了。

原创文章,拒绝采集,如需转载请保留出处及其作者信息。

作者:孟德军<mengdj@outlook.com> QQ:280759843 自定义开发可Q我。

本文地址:http://www.cnblogs.com/mengdejun/p/wego_paipai_collect_plugin.html

让wego微购购物分享系统采集拍拍数据功能之腾讯paipai功能采集插件的更多相关文章

  1. wego微购RSS、Sitemap、Ping、腾讯拍拍网购采集插件

    和哥们研究淘宝客,找到微购这个程序觉得挺不错的,但是地图和RSS功能不是特别完善,于是小憩一下,做了下初级的拓展,分享给大家,开源精神嘛,大家也可以去我的网站我要购物平台去看看. 1.拓展后台seoA ...

  2. 【BUG】wego购物分享系统未登陆分享宝贝时查看宝贝自动新增产品数据

    1.登录微购http://demo.wego360.com/站. 2.分享宝贝功能检索第三方平台商品数据. 1.登录微购http://demo.wego360.com/站. 2.分享宝贝功能检索第三方 ...

  3. 再谈C#采集,一个绕过高强度安全验证的采集方案?方案很Low,慎入

    说起采集,其实我是个外行,以前拔过阿里巴巴的客户数据,在我博客的文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 中,介绍过采集用的工具,其实很Low的,分析 ...

  4. Django项目:CMDB(服务器硬件资产自动采集系统)--12--08CMDB采集硬件数据日志记录

    #settings.py # ————————01CMDB获取服务器基本信息———————— import os BASEDIR = os.path.dirname(os.path.dirname(o ...

  5. Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据

    #settings.py # ————————01CMDB获取服务器基本信息———————— import os BASEDIR = os.path.dirname(os.path.dirname(o ...

  6. API例子:用Python驱动Firefox采集网页数据

    1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...

  7. STM32L15x——ADC采集DMA数据只第一次正确(已解决)

    前提:我用的芯片是STM32L系列,可能对其它STM32系列不完全适用,仅供参考! 一.问题描述 我在使用DMA方式读取单ADC单通道采集的数据时,发现只能正确的采集一次数据,后来的就一直与第一次的相 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享

    今天这篇博文的主要目的是分享一下我设计Saga的实现思路来抛砖引玉,其实Saga本身非常的类似于一个简单的工作流体系,相比工作流不一样的部分在于它没有工作流的复杂逻辑处理机制(比如会签),没有条件分支 ...

  9. 推文《阿里凑单算法首次公开!基于Graph Embedding的打包购商品挖掘系统解析》笔记

    推文<阿里凑单算法首次公开!基于Graph Embedding的打包购商品挖掘系统解析>笔记 从17年5月份开始接触Graph Embedding,学术论文读了很多,但是一直不清楚这技术是 ...

随机推荐

  1. Vue#计算属性

    在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需要多于一 ...

  2. git warning: LF will be replaced by CRLF in...

    如果你有git项目,在提交代码的过程中可能会碰到上面的警告,特别是的项目中包含序列化对象的时候,你可能要小心!! 警告的含义是说换行符的,不同的操作系统的换行符是不一致的,如果你不清楚,真得看看这个 ...

  3. 对于JSP的调试

    在eclipse中调试JSP 我换了图片但是网页中的图片却不变化 我删了工程里的图片还是没用 看了一下Tomcat根目录..貌似也是没有的.. 最后我考虑换了HTML中图片的名字..并且更改了替换的图 ...

  4. Blog Starting...

    30出头,开始Blog记录学习生活的点滴,待40时再回来一看.

  5. Action处理请求参数

    第一种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 ) 第一种方式:<br> <form action="${pageContext.re ...

  6. loadrunner比较有用的字符串函数

    loadrunner比较有用的字符串函数 ******************************************************************************* ...

  7. javascript引擎工作原理

    1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + ...

  8. css/js(工作中遇到的问题)

    移动设备点击时去掉外加的蓝色边框 a, input, button { -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highligh ...

  9. hdu 5459 Jesus Is Here (费波纳茨递推)

    Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total Submission ...

  10. Spring mvc 验证码的做法

    http://jingyan.baidu.com/article/4f7d5712da7a131a201927b0.html