NatureArticleController.java 3.33 KB
package com.canrd.webmagic.controller;

import com.canrd.webmagic.common.constant.ServerResult;
import com.canrd.webmagic.common.jsr303.OperateGroup;
import com.canrd.webmagic.domain.vo.NatureArticleQueryVO;
import com.canrd.webmagic.domain.vo.NatureArticleVO;
import com.canrd.webmagic.processor.NatureSearchPageProcessor;
import com.canrd.webmagic.processor.pipeline.NatureArticlePipeline;
import com.canrd.webmagic.service.NatureArticleService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import us.codecraft.webmagic.Spider;

import javax.annotation.Resource;

/**
 * nature-文章信息(NatureArticle)表控制层
 *
 * @author makejava
 * @since 2024-04-07 18:39:41
 */
@RestController
@RequestMapping("/nature/article")
public class NatureArticleController {
    /**
     * 服务对象
     */
    @Resource
    private NatureArticleService natureArticleService;

    @Resource
    private NatureSearchPageProcessor natureSearchPageProcessor;

    @Resource
    private NatureArticlePipeline articlePipeline;

    /**
     * @return
     */
    @GetMapping("/start")
    public ServerResult start(@RequestParam(value = "keyword") String keyword, @RequestParam(value = "indexSize") Integer indexSize) {
        for (int i = 1; i <= indexSize; i++) {
            Spider.create(natureSearchPageProcessor)
                    // 添加这个Spider要爬取的网页地址
                    .addUrl("https://www.nature.com/search?q=" + keyword + "&page=" + i)
                    .addUrl("https://www.nature.com/nature/research-articles?sort=PubDate&page=" + i)
                    .addPipeline(articlePipeline)
                    // 开启5个线程执行,并开始爬取
                    .thread(5).run();
        }

        return ServerResult.success();
    }

    /**
     * 分页查询
     *
     * @param natureArticleQueryVO 查询条件
     * @return 查询结果
     */
    @PostMapping("/list")
    public ServerResult list(@RequestBody @Validated({OperateGroup.List.class}) NatureArticleQueryVO natureArticleQueryVO) {
        return natureArticleService.list(natureArticleQueryVO);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param natureArticleQueryVO 查询条件
     * @return 单条数据
     */
    @PostMapping("/query_by_id")
    public ServerResult queryById(@RequestBody NatureArticleQueryVO natureArticleQueryVO) {
        return natureArticleService.queryById(natureArticleQueryVO);
    }

    /**
     * 新增数据
     *
     * @param natureArticleVO 数据VO
     * @return 新增结果
     */
    @PostMapping("/add")
    public ServerResult add(@RequestBody NatureArticleVO natureArticleVO) {
        return natureArticleService.add(natureArticleVO);
    }

    /**
     * 编辑数据
     *
     * @param natureArticleVO 数据VO
     * @return 编辑结果
     */
    @PostMapping("/edit")
    public ServerResult edit(@RequestBody NatureArticleVO natureArticleVO) {
        return natureArticleService.edit(natureArticleVO);
    }

    /**
     * 删除数据
     *
     * @param natureArticleQueryVO 查询条件
     * @return 删除是否成功
     */
    @PostMapping("/delete_by_id")
    public ServerResult deleteById(@RequestBody NatureArticleQueryVO natureArticleQueryVO) {
        return natureArticleService.deleteById(natureArticleQueryVO);
    }

}