前言
这部分其实很简单,调用之前写好的方法,返回参数就好了,最主要的还是和前端的同学进行参数的协调,已经保重接口的不出错。
获取热榜列表,这个列表是根据博客系统所有文章的流行度和新鲜度给出的,相关数据被物化在了redis中
/**
*
* 获取默认的文章列表,这个列表是根据博客系统所有文章的流行度和新鲜度给出的
* @param page
* @param size
* @return
*/
@PermitAll
@RequestMapping(value = "/recommendArticleByFreshPopular", method = RequestMethod.GET, produces = "application/json")
public Response recommendArticleByFreshPopular(
@RequestParam(value = "page", required = false, defaultValue = "1") Integer page,
@RequestParam(value = "size", required = false, defaultValue = "20") Integer size) {
if (page < 0) {
page = 1;
}
if (size < 0) {
size = 20;
}
List<Integer> articleIdList = recommendedUtil.recommendArticleByFreshPopular((page-1)*size, page*size);
List<Article> articleList = new ArrayList<>();
for(int articleId :articleIdList)
{
Article article = getArticleInfo(articleId);
articleList.add(article);
}
return Response.success("获取文章成功", articleList);
}
获取与其相似的其他文章,这个是在文章详细信息最下面显示的,使用计算文章相似度得到的,相关数据被物化在了redis中
/**
* 根据文章id 获取与其相似的其他文章,这个是在文章详细信息最下面显示的
* @param articleId
* @return 返回值是整个文章的内容,只需要选择需要的东西显示即可
*/
@PermitAll
@RequestMapping(value = "/recommendSimilarityArticle", method = RequestMethod.GET, produces = "application/json")
public Response recommendSimilarityArticle(
@RequestParam Integer articleId) {
List<Integer> articleIdList = recommendedUtil.recommendSimilarityArticle(articleId);
List<Article> articleList = new ArrayList<>();
for(int id :articleIdList)
{
Article article = getArticleInfo(id);
articleList.add(article);
}
return Response.success("获取文章成功", articleList);
}
用户的个性推荐 根据用户浏览历史中喜欢的博客文章的分类 推荐相应分类的博客文章
由于有冷启动问题,当一个用户刚进入系统的时候,是没有用户数据的,所以这个列表会是空的,这时候就需要随即返回一些数据了
@PermitAll
@RequestMapping(value = "/recommendArticleByCategory", method = RequestMethod.GET, produces = "application/json")
public Response recommendArticleByCategory(
@RequestAttribute String username) throws IOException, TasteException {
User ouser = userService.selectUserByName(username);
List<Integer> articleIdList = recommendedUtil.recommendArticleByCategory(ouser.getId());
List<Article> articleList = new ArrayList<>();
for(int articleId :articleIdList)
{
Article article = getArticleInfo(articleId);
articleList.add(article);
}
if(articleIdList.size() == 0)
{
articleList = articleService.selectArticleListRandomly();
for(Article article :articleList)
{
getArticleInfo(article);
}
return Response.success("已为您随机返回文章", articleList);
}
return Response.success("获取文章成功", articleList);
}
用户的个性推荐,根据用户浏览历史中喜欢的博客文章的标签 ,推荐相应标签的博客文章
由于有冷启动问题,当一个用户刚进入系统的时候,是没有用户数据的,所以这个列表会是空的,这时候就需要随即返回一些数据了
/**
* 用户的个性推荐 根据用户浏览历史中喜欢的博客文章的标签 推荐相应标签的博客文章
* @return 这个api每次只会返回20篇文章 不支持分页查询 并且每次刷新都会返回不一样的文章 且不会推荐浏览过的文章
* @throws IOException
* @throws TasteException
*/
@PermitAll
@RequestMapping(value = "/recommendArticleByTag", method = RequestMethod.GET, produces = "application/json")
public Response recommendArticleByTag(
@RequestAttribute String username) throws IOException, TasteException {
User ouser = userService.selectUserByName(username);
List<Integer> articleIdList = recommendedUtil.recommendArticleByTag(ouser.getId());
List<Article> articleList = new ArrayList<>();
for(int articleId :articleIdList)
{
Article article = getArticleInfo(articleId);
articleList.add(article);
}
if(articleIdList.size() == 0)
{
articleList = articleService.selectArticleListRandomly();
for(Article article :articleList)
{
getArticleInfo(article);
}
return Response.success("已为您随机返回文章", articleList);
}
return Response.success("获取文章成功", articleList);
}