开启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, '操作成功');
}