curl采集+接口

299 阅读1分钟

开启curl支持

由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可;

控制器

//参数
 public function difu($type,$page,$page_size,$is_filter){
        $param=input();
        //类型
        if(isset($params['type'])&& !empty($params['type'])){
            $type=$params['type'];
        } 
        //页码
        if(isset($params['page'])&& !empty($params['page'])){
            $page=$params['page'];
        } 
        //每页显示条数
        if(isset($params['page_size'])&& !empty($params['page_size'])){
            $page_size=$params['page_size'];
        } 
        //是否返回内容详情的新闻
        if(isset($params['is_filter'])&& !empty($params['is_filter'])){
            $filter=$params['is_filter'];
        }
        //秘钥
        $appid="";
        //聚合新闻URL
        $url="http://v.juhe.cn/toutiao/index?"
        ."type=".$type."&page=".$page."&page_size=".$page_size."&is_filter="
        .$is_filter."&key={$appid}";
        

        // $res=file_get_contents($url);
       $res=Cache::get('news');
        
        // $data=Cache::set('news',$data);
        $newsData=$res['result']['data'];
        News::addNews($newsData);
    }
    
    模型层代码
    static public function apicate($category_id){
        $data=self::hasWhere('category','=','category_id')->field('id');
    }
    static public function addNews($data){
        $categoryID=Category::where('category_name','=',$data[0]['category'])
        ->value('id');
        if(empty($categoryID)){
            $res=Category::create([
                'category_name'=>$data[0]['category']
            ]);
            $categoryID=$res->id;
        }
        self::startTrans();
        try{
            foreach($data as &$val){
                // self::static($val['uniquekey']??'');
                self::create([
                    'title'=>$val['title'],
                    'pubdate_time'=>strtotime($val['date']),
                    
                    'category_id'=>$categoryID,
                    'news_url'=>$val['url']??'',
                    'author_name'=>$val['author_name']??'',
                    'thumbnail_pic_s'=>$val['thumbnail_pic_s'] ??'',
                    'thumbnail_pic_s02'=>$val['thumbnail_pic_s02']??'',
                    'thumbnail_pic_s03'=>!empty($val['thumbnail_pic_s03'])??'',
                    'is_content'=>$val['is_content'],
                    ]);
                
            }
            self::commit();
            return ;
        }catch(\Exception $e){
               self::rollback(); 
                throw $e;
            }
        
        // $result=(new News())->saveall($data,true);
    }

详情内容采集

 
        $url = 'https://mini.eastday.com/mobile/210609182318170808361.html';

        // 定义采集规则
        $rules = [
            // 采集文章标题
            'title' => ['h1','text'],
            'img'=>['img','src'],
            // 采集文章作者
            'author' => ['span','text'],
            // 采集文章内容
            'content' => ['p','text']
        ];
        $rt = QueryList::get($url)->rules($rules)->query()->getData();
        // print_r($rt);die();
        $arr=$rt->all();
        if(Newss::create($arr)){
            return '添加成功';
        }else{
            return '添加失败';
        }
        print_r($rt);

接口频繁请求

public function redis(){
        $redis = new Redis();
        $ip = $_SERVER['REMOTE_ADDR'];
        $ipData = $redis->get($ip);
        $ipExpireTime = $redis->ttl($ip);
        if ($ipExpireTime<=0){
            $ipExpireTime = 60;
        }

        //如果非空判断是否恶意请求
        if (!empty($ipData)) {
            if ($ipData >= 10) {
                return writeJson(10003, '', '请不要频繁请求!!!');
            }
        }

        $params = input();
        //新闻列表
        // print_r($params);die();
        $result = News::select($params);
        //存ip请求次数
        $i = 1;
        $redis->set($ip, $ipData + $i, $ipExpireTime);
        return writeJson(0, $result, '操作成功');
    }