使用CI框架和淘宝开放api接口做一个网站

代码脚本   1118阅读

之前写网站程序,根本没有使用过框架,纯粹是自己写的语句,静态的html代码和php脚本混合在一起,遇到过别人说这样根本没办法维护,于是,我开始找一个php的框架,经过几个框架,发现CI是个不错的,用起来,文档也写的比较详细,自己摸索一下就可以很快的用来做网站。基于MVC模式,这样开发起来效率果然增快了许多。

网站做起来,没有内容也不行,这个时候想到淘宝开发平台,通过调用api接口,就可以调用大量的淘宝数据。

通过这两个技术的结合,做成了一个网站,url是 http://www.cgnpc.net.cn/

基于CI框架,不用去考虑基本的方法是如何实现的,直接着手写自己的代码,大大的减少了自己需要写的代码量。

下面开始介绍网站制作的过程:

一、自动获取关键词

关键词是从淘宝指数里面获取的,淘宝指数有若干的分类,统计了这些分类下面搜索系数比较靠前的一些关键词,这些关键词有上千个,如果一个一个复制过来,工作量是比较大的,况且每天都会变动。所以通过程序来自动更新关键词是个不错的主意。

把父类先存在excel里,然后用程序去读取,根据根据父类去自动获取关键词。这里的部分代码在上一篇curl实现跨域请求数据 里也介绍过。

    public function get_cate_from_excel()
    {
        set_time_limit(0);
        include_once APPPATH.'phpexcel/PHPExcel.php';
        $obj = new PHPExcel_Reader_Excel5();
        $obj->setReadDataOnly(TRUE);
        $phpexcel = $obj->load(APPPATH.'cate.xls');
        $obj_work_sheet = $phpexcel->getSheet(0);
        $rows = $obj_work_sheet->getHighestRow();
        $cols = $obj_work_sheet->getHighestColumn();
        $cols_index = PHPExcel_Cell::columnIndexFromString($cols);
        $data = array();
        for($row = 2;$row <= $rows;$row++)
        {
            $val_big_cate = $obj_work_sheet->getCellByColumnAndRow('0',$row)->getValue();
            $val_big_name = $obj_work_sheet->getCellByColumnAndRow('1',$row)->getValue();
            $val_sec_cate = $obj_work_sheet->getCellByColumnAndRow('2',$row)->getValue();
            $val_sec_name = $obj_work_sheet->getCellByColumnAndRow('3',$row)->getValue();
            $data[$row][0] = trim($val_big_cate);
            $data[$row][1] = trim($val_big_name);
            $data[$row][2] = trim($val_sec_cate);
            $data[$row][3] = trim($val_sec_name);
        }
        foreach($data as $key => $value)
        {
            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL,'https://alizs.taobao.com/searchKeyword/getRank.json?cateId='.$value[2].'&dateType=recent7&dateRange=2016-07-22%7C2016-07-28&type=hot&dtMaxAge=86400000&ctoken=TRH4wiVWobaSkRAubHq1alizs&_=1469802272454');  
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch,CURLOPT_COOKIE,'ctoken=sWwBPRhE');  
            $output = curl_exec($ch);
            curl_close($ch);
            //echo $output;
            $output_array = json_decode($output,TRUE);
            $output_data = $output_array['content']['data'];
            if (count($output_data)==0)
            {
             echo '<div style="text-align:left;">'.$value[3].$value[2].'获取关键词失败</div>';   
            }
            for($i = 0;$i<count($output_data);$i++)
            {
                $searchword =  $output_data[$i]['searchWord'];
                //echo $output_data[$i]['searchWord'];
                $cate_array = array(
                    'parent_num' => $value[0],
                    'parent_name' => $value[1],
                    'sub_num' => $value[2],
                    'sub_name' => $value[3],
                    'search_word' => $searchword
                );
                $this->load->model('taobaoke_index_model');
                if($this->taobaoke_index_model->keyword_item_save($cate_array))
                {
                    echo '<div style="text-align:right;">'.$value[3].$value[2].'获取关键词成功</div>';
                }
                
            }

        }
        }

二、根据关键词,调用淘宝开发api搜索淘宝数据

这里用程序动态的读取上一步获取的关键词,然后用搜索api来获取对应的淘宝数据。代码如下:

    public function get_item()
    {
        set_time_limit(0);
        $this->qingkong();
        date_default_timezone_set('Asia/Shanghai'); 
        $this->load->model('taobaoke_index_model');
        $lines = $this->taobaoke_index_model->get_all_keywords();
        
        for($i=0;$i<count($lines);$i++){
            $this->get_from_taobao_bypage($lines[$i]['search_word']);
            ob_flush(); 
            flush(); 
        }
        $data['resp'] = 'ok';
        $this->load->view('re.php',$data); 
    }
    private function get_from_taobao_bypage($keyword = NULL,$cate = NULL)
    {
        $first_page = '1';
        $resp = $this->get_from_taobao($keyword,$first_page);
        $this->index_item_save($resp,$keyword);
        $total_results = $resp['total_results'];
    
    }
    private function qingkong()
    {
        $this->load->model('taobaoke_index_model');
        $this->taobaoke_index_model->qingkong();
    }
    private function get_from_taobao($keyword = NULL,$pageno = NULL)
    {
        $c = new TopClient;
        $c->appkey = '2';
        $c->secretKey = '982';
        $c->format = 'json';
        $req = new TbkItemGetRequest;
        $req->setFields("num_iid,title,pict_url,small_images,reserve_price,zk_final_price,user_type,provcity,item_url,seller_id,volume,nick");
        $req->setQ($keyword);
        $req->setSort("tk_rate_des");
        $req->setIsTmall("true");
        $req->setIsOverseas("false");
        $req->setStartPrice("10");
        $req->setEndPrice("1000");
        $req->setStartTkRate("500");
        $req->setEndTkRate("10000");
        $req->setPlatform("1");
        $req->setPageNo($pageno);
        $req->setPageSize("100");
        $resp = $c->execute($req);
        $resp = json_decode(json_encode($resp),TRUE);     
        return $resp;
    }
    private function index_item_save($resp = array(),$keyword = NULL)
    {
        $results = $resp['results'];
        @$n_tbk_item = $results['n_tbk_item'];
        foreach ($n_tbk_item as $item)
        {
            
            $item_array = array(
                'item_url'          => $item['item_url'],
                'nick'              => $item['nick'],
                'num_iid'           => $item['num_iid'],
                'pict_url'          => $item['pict_url'],
                'provcity'          => $item['provcity'],
                'reserve_price'     => $item['reserve_price'],
                'seller_id'         => $item['seller_id'],
                'title'             => $item['title'],
                'user_type'         => $item['user_type'],
                'volume'            => $item['volume'],
                'zk_final_price'    => $item['zk_final_price']
            );    
            $index_array = array(
                'num_iid'           => $item['num_iid'],
                'keyword'           => $keyword
            );
            //print_r($index_array);
            $this->load->model('taobaoke_index_model');
            if($this->taobaoke_index_model->index_item_save($item_array,$index_array))
            {
                echo $item['title'].$item['num_iid'].'<br/>';
            }  else
            {
                echo $item['title'].$item['num_iid'].'重复<br/>';
            }

        }

    }

通过上面的两个步骤,数据库里就用几万条数据,获取几万条的数据基本不用人工干预,由程序自动完成。并且可以做到每日自动运行自动更新程序,如此, 这个网站基本不用人工去根据内容。

http://www.cgnpc.net.cn

这个网站有首页,导航页,关键词页,其中首页有分类,每个关键词页也有分页。网站结构如下

喜欢请常来,打赏请随意。