首先书写控制器中的内容,数据表的话大家就根据聚合新闻里的字段去建表就可以啦
<?ph
namespace app\test\controller;
use app\news\model\Detail;
use think\Cache;
use think\Controller;
use think\Db;
use think\Request;
use traits\model\SoftDelete;
use QL\QueryList;
class News extends Controller
{
use SoftDelete;
public function juhe($type,$page,$page_size,$is_filter)
{
//接收所有参数
$params = input();
$type = 'top';
$page = 1;
$page_size = 15;
$is_filter = 1;
//类型
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'])){
$is_filter = $params['is_filter'];
}
//密钥
$appid = '5aff86e0a8c678418e3457bde56ba6f1';
//聚合新闻url
$url = "http://v.juhe.cn/toutiao/index?"."type=".$type."&page=".$page."&page_size".$page_size."&is_filter"
. $is_filter . "&key={$appid}";
$data = file_get_contents($url);
// $res = Cache::get('news');
//获取聚合函数的数据
$dataRes = json_decode($data,true);
if ($dataRes['error_code']!=0){
return json([
'code' => 10000,
'msg' => '聚合平台错误',
'data' => ''
]);
}
$newData = $dataRes['result']['data'];
\app\test\model\News::addNews($newData);
// var_dump($res);
}
/**
* 新闻展示
*/
public function showData()
{
$data = \app\test\model\News::paginate(6);
// return show(200,'查询成功',$data);
return view('news/show',compact('data'));
}
/**
* 新闻添加表单
*/
public function addForm()
{
// $data = \app\test\model\News::with('category')
// ->where('news.category_id = category.id')
// ->select();
// var_dump($data);die();
return view('news/addform');
}
/**
* 表单提交功能
*/
public function addDo()
{
//判断一下提交类型
if ($this->request->isPost()) {
//1.获取一下提交的数据,包括上传文件
$data = $this->request->param(true);
//2获取一下上传的文件对象
$file = $this->request->file('thumbnail_pic_s');
// //内置验证
// $rule = [
// 'title' => 'require',
// 'author_name' => 'require',
// 'thumbnail_pic_s' => 'require ',
// ];
//
// $validateRes = $this->validate($rule,$data);
//
// if ($validateRes !== null){
// return $this->error('验证失败,无法添加');
// }
//3判断是否获取到了文件
if (empty($file)) {
$this->error($file->getError());
}
//4上传文件
$map = [
'ext'=>'jpg,png',
'size'=> 3000000
];
$info = $file->validate($map)->move(ROOT_PATH.'public/uploads/');
if (is_null($info)){
$this->error($file->getError());
}
//5向表中新增数据
$data['thumbnail_pic_s'] = 'uploads/' . $info -> getSaveName();
$res = \app\test\model\News::create($data,true);
//6判断新增是否成功
if (is_null($res)){
$this->error('新增失败');
}
$this->success('新增成功~~');
}else {
$this -> error('请求类型错误~~');
}
}
/**
* 软删除新闻
*/
public function del($id)
{
$data = \app\test\model\News::delData($id);
}
/**
* 修改页面
*/
public function updateDetail($id)
{
$data = \app\test\model\News::find($id);
return view('news/update_detail',compact('data'));
}
/**
* 表单修改功能
*/
public function saveDo()
{
$params = input();
//内置验证
$saveRes = \app\test\model\News::update($params,true);
if ($saveRes){
return $this->success('成功了哦,棒棒哒!!!么么么么么么么么么么哒!','news/showData');
}else{
return $this->error('失败了哦亲亲,再接再厉呀,么么么么么么么么么么哒!');
}
}
/**
* 使用QueryList采集新闻详情
*/
public function queryListNewDetail()
{
$url = 'https://mini.eastday.com/mobile/210610112811217909069.html';
// 定义采集规则
$rules = [
// 采集文章标题
'title' => ['h1','text'],
'img'=>['img','src'],
// 采集文章作者
'author' => ['.share_cnt_p clearfix>f1 i','text'],
// 采集文章内容
'content' => ['p','html'],
];
$rt = QueryList::get($url)->rules($rules)->query()->getData();
$arr=$rt->all();
$addRes = Detail::create($arr,true);
}
/**
* 详情查询接口
*/
public function apiDetail($id)
{
$data = Detail::where('id',$id)->find();
return show(200,'',$data);
}
}
接下来是模型层中的代码
<?php
namespace app\test\model;
use think\Model;
use app\test\model\Category;
use \traits\model\SoftDelete;
class News extends Model
{
use SoftDelete;
//入库
public static function addNews($data)
{
// print_r($data);die();
//查询出id分类
$categoryID = Category::where('category_name','=',$data[0]['category'])
->value('id');
if (empty($category)){
$res = Category::create([
'category_name' => $data[0]['category']
]);
//取出分类id
$categoryID = $res->id;
}
foreach ($data as &$value){
$value['category_id'] = $categoryID;
$value['puddate'] = strtotime($value['date']);
$value['news_url'] = strtotime($value['url']);
unset($value['uniquekey']);
unset($value['date']);
unset($value['category']);
unset($value['news_url']);
}
$res = (new News())->saveAll($data,true);
}
public function category()
{
return $this->hasMany('Category','category_id','t_id');
}
public static function delData($id)
{
News::destroy($id);
}
}
若是大家有什么不会的可以私信我,一起交流哦