YuanNews

Project Url: LABELNET/YuanNews
Introduction: 新闻推荐系统
More: Author   ReportBugs   
Tags:

基于用户兴趣标签的新闻推荐系统(毕业设计)

注意事项

  • 界面的修改,均已 index.jsp 修改为主,在进行子界面的修改,保持统一性!
  • tomcat 的使用 : 部署 yuanews-web.war explor 包,运行时,见运行菜单!
  • ps : image
  • 所有的 jsp 页面中的链接 添加 request.getContextPath() , 确保路径正确使用!!
  • 代码中使用到了重定向等页面跳转,添加 request.getContextPath() , 确保路径正确使用!!
  • dao 层中的接口不要随意修改,如果需要修改,一定要要修改 mapper 中的参数!!
  • dao mapper 中的参数不一定正确,注意看出错信息,已确定错误来源!!
  • controller 中在返回值的时候,注意添加注解:@ResponseBody !!
  • 注意事项,jsp 页面中的 img 标签添加获取项目名路径 ( request.getContextPath() )  *

原理图

  • 架构-服务端
  • 架构-客户端
  • 主页-查询思路
  • 推荐策略(后台)
  • 推荐显示(前台)
  • 推荐通知原理(Android)
  • 爬虫原理
  • 总的架构:后台,前台,客户端,爬虫;

2016.05.14

  • 新添加策略:用户每次修改标签,就为用户推荐新闻,同时生成推荐新闻总数,为 Android 端提供消息提醒;
  • (1)在用户标签中,进行子线程获取推荐新闻;(2)提供推荐新闻总数;(3)客户端请求比较,如果总数没有变化,则不提醒;

2016.05.06

  • 数据爬虫:中国新闻网 www.chinanews.com(ok)
  • 推荐思路: 在主页上添加一个推荐入口,进行分页加载即可!(ok)
    • 基本思路: 没有登陆,显示正常页面;登陆了,返回推荐页面(拦截器可以做到)
    • 后台实现: list 集合,每次从本地读取集合,使用 sublist 进行分页操作,添加 service 进行读取和分页操作;
    • 优化:推荐页面,数据为空,则跳转到正常页面;不为空,最后加载完的时候,页面上显示跳转到正常页面;(总数 list.size)
  • 后台主页实现和 API 页面调试和实现;(ok)
  • Android 客户端框架底层搭建

2016.05.05

  • 数据爬虫:分类随机实现(ok);虎嗅另外的爬虫实现(ok);环球爬虫实现(主页 ok);
  • 本地已经爬去过的地址,读取的时候,还有问题,待优化!(ok)
  • 数据 API 基本实现-Postman 测试
  • Android 客户的框架搭建

2016.05.04

  • 用户端基本优化完毕:功能添加搜索框舍弃不做;
  • 数据 API 基本实现-Postman 测试
  • 网络爬虫研究-准备爬去数据

    * 1.实现 LoadUtil 类 继承 LoaderBase 基类;
    * 2.实现 ParseUtil 类 继承 ParserBase 基类;
    * 3.实现 data 类 继承 GetDataBase 基类;
    * 4.ParseIndex 类中,实现主页 url 解析方法;
    
    * 5.执行方法:三步即可
    
         //1.实现主页加载类
         HuxiuLoader huxiuLoader=new HuxiuLoader(IndexUrl);
    
         //2.实现线程池
         ThreadPoolHttpClient threadPoolHttpClient=new ThreadPoolHttpClient(huxiuLoader);
    
         //3.执行开始操作
         threadPoolHttpClient.start();
    
    
    
    

2016.05.03

  • 修改评论表(去除外键约束,否则无法进行评论数据的添加)

     create table comment(
        id int(11) not null primary key auto_increment,
        content text not null,
        uid int(11) not null default '0',
        nid int(11) not null default '0' ,
        status int(4) not null default '0'
     )DEFAULT CHARSET=utf8;
    

2016.05.02

  • 网页端,用户详情页实现和新闻详情页实现
  • 网页端,实现用户交互,点赞,评论等;
  • 实现 Android 数据 API 接口
    • 登陆/注册
    • 分类信息
    • 来源信息
    • 新闻分页查询
    • 来源分页查询
    • 根据兴趣标签分页查询
    • 用户个人信息
    • 新闻评论
    • 新闻点赞
    • 新闻详情

2016.05.01

  • Android 端,架构搭建,学习材料设计实现
  • 功能:仿照网页端实现即可,最迟到 2016.05.07 之前必须完成

2016.04.30

  • 实现 Android 端数据 API,并记录在后台管理中!

2016.04.29

  • 实现详情页所有的功能

2016.04.28

  • 实现主页界面和 controller
  • 实现用户端界面和 controller

2016.04.27

  • 实现用户操作 service
  • 详情页,业务功能还未实现;

2016.04.26

  • 实现登陆注册的 mapper
  • 实现用户端 service 的实现

2016.04.25

  • 查询新闻数据及其评论数 sql 语句实现 示例 sql :

    select n.id,n.title,IFNULL(cm.cnum,0) from news n left join (select nid,count(1) as cnum from comment group by nid) as cm on cm.nid=n.id;
    
  • 实现数据 mapper,包括主界面的 mapper 实现,除了登陆注册以外!

2016.04.24(out)

  • 根据主页,实现主页数据分页加载
  • 实现用户登陆/注册交互

2016.04.22

  • 实现主页 dialog 和集成 NProgress.js
  • 添加详情页 html 设计 (未做完)

2016.04.21

  • 实现主页 html (昨日任务)

2016.04.20

  • 主页 html 集成 NProgress.js
  • 主页 html 右扁栏 添加用户信息
  • 主页 html 添加目录信息包括(分类和标签页分类)
  • 登陆/注册 设计实现(未实现)

2016.04.19

  • 客户端主页模板实现
  • 用户登陆和修改信息
  • 标签页面实现:注意看 掘金 ;

2016.04.18

  • 后台管理主页实现(先显示个人信息就行了!)
  • 客户界面设计与构思,开题报告1,2需要完成 (中期报告月底总结和写);
  • 优化 jsp 页面中的 img 标签添加项目路径

2016.04.17

  • 新闻,评论,点赞,分类的 controller 全部实现
  • 后台管理的完成与优化
  • 添加关于我和站点介绍页面
  • 客户界面设计与构思,开题报告1,2需要完成 (待完成)

2016.04.16

* 实现后台管理-业务层基本实现

  • 实现兴趣管理和新闻来源管理
  • 根据来源管理,确定分页和增删改查的实现方式(js)

2016.04.15

  • 完成用户添加的时候,生成默认头像功能,根据用户昵称来生成默认头像
  • 工具类实现:深浅颜色判断,文字居中显示,具体总结见:http://blog.csdn.net/lablenet/article/details/51161625
  • 更新 jsp 页面链接地址,添加 request.getContextPath(); 工程路径,保证所有的链接正确性;
  • 兴趣的增删改查实现(未实现完毕)
  • 兴趣业务层已实现,主页已实现
  • 业务层添加基类接口,添加常用的方法,详情见 ManagerBase 接口

2016.04.14

  • 用户信息修改 service - 页面实现
  • 兴趣列表分页实现 : service 和 页面实现
  • 兴趣的增删改查实现(未实现)
  • 添加文字转图片工具类和需要配置的配置常量类
  • 上传图片策略实现思路:物理路径与虚拟路径实现策略:http://blog.csdn.net/lablenet/article/details/50481173

2016.04.13

  • 更新用户分页加载页面的控制器改写
  • 显示界面,通过 jstl,进行判断显示
  • 用户管理列表实现分页插件 simplePagination : http://flaviusmatis.github.io/simplePagination.js/
  • 用户列表分页插件实现与优化实现

2016.04.07

  • 给各个 module 添加 md 文件用来记录和阅读
  • 准备入手实现步骤 : dao 全部业务需求实现,service 全部业务需求实现,最后开始 controller 和 web 的开发与整合!
  • 注意: 测试类的编写和相关业务的重构

2016.04.06-07

  • 新闻系统大改版
    • 1. 采用新的开发模式 - idea 多个 module 进行 ssm 开发;
      1.  还是采用 maven 的方式进行环境配置和相关 module 直接的配置;
      1. 多 module 配置有些类似 asp.net 类库的配置,所以需要借鉴配置思想;
      1. 多 module 开发是的各个模块之间耦合性降低,方便开发,十分方便;

小结 1


  news - 第一版,开发平台是 idea,通过 maven 进行的环境搭建,其实挺方便的;
基本的开发思路是: mapper -> service -> controller -> jsp ;
当然,第一版是在一个 project 中进行开发的,随着代码的编写,类,接口等越来越多,看起来非常不爽!就想到了 Android Studio 开发的时候,可以多模块, 进行开发 Android。 故,就尝试了在 news 上就行大改版,使用 idea 进行多个 module(web,config,contorller,dao,model,service,common )七个 module,单独的模块 module 进行如果需要其它的 module,需要进行 maven 依赖配置。通过 maven,将多个 module 进行配置,然后进行每个模块的单独开发!    当然由于没有经验,配置了1天多的时间,中间思考了很多,就想起来了 asp.net 开发的时候 dll 类库的时候,故就其思想,进行了依赖配置,结果成功了!
   稍后,将在 csdn 博客上进行配置总结,当然 使用 gradle 应该基本一致!


news-第一版完结 

2016.04.04

  • 数据层-后台管理-基本实现
  • 数据层 - 用户端 - 添加接口
  • 业务层 - 后台管理 - 添加接口

2016.04.03

添加评论表(信息图),点赞表 (❤)

  • 评论表设计 :
    • id 评论 id
    • content 评论内容
    • uid 评论用户 id
    • nid 评论新闻 id
    • status 评论状态
  • 创建评论表

     create table comment(
        id int(11) not null primary key auto_increment,
        content text not null,
        uid int(11) not null default '0' , FOREIGN KEY (uid) REFERENCES user(id),
        nid int(11) not null default '0' , FOREIGN KEY (nid) REFERENCES news(id),
        status int(4) not null default '0'
     )DEFAULT CHARSET=utf8;
    
  • 点赞表 :

    • id 点赞 id
    • uid 用户 id
    • nid 新闻 id
    • status 点赞状态 0,没有点赞,1,点赞
  • 创建点赞表
       create table liked(
              id int(11) not null primary key auto_increment,
              uid int(11) not null default '0' , FOREIGN KEY (uid) REFERENCES user(id),
              nid int(11) not null default '0' , FOREIGN KEY (nid) REFERENCES news(id),
              status int(4) not null default '0'
           )DEFAULT CHARSET=utf8;
    

2016.04.01

  • 后台管理,数据访问实现 ;
  • 添加信息来源表 ;

       create table source(
                id int(11) not null primary key auto_increment,
                source varchar(100) not null
              )DEFAULT CHARSET=utf8;
    

2016.03.31

  • 测试静态文件和动态 jsp 页面加载情况;
  • 测试 mybatis,单元测试,进行加载数据;
  • 初始化后台界面,准备开启数据后台管理;
  • D3.js 的学习 ;

2016.03.30

重新初始化工程,数据库不变!

2016.03.29

设置 mysql 字符编码集,已修改为 utf-8: 添加测试数据:

  • 分类表 :

     insert into cate(content) values('社会');
     insert into cate(content) values('科技');
     insert into cate(content) values('经济');
     insert into cate(content) values('趣闻');
     insert into cate(content) values('情感');
    
  • 用户表

    insert into user(unum,nick,pass) values('15036518579','LABELNET','123456');
    insert into user(unum,nick,pass) values('15000000001','yuan','123456');
    
  • 兴趣表

    insert into taste(label,uid) values('手机',1);
    insert into taste(label,uid) values('小米',1);
    insert into taste(label,uid) values('电影',1);
    insert into taste(label,uid) values('刘亦菲',1);
    insert into taste(label,uid) values('围棋',1);
    insert into taste(label,uid) values('NBA',1);
    
  • 新闻表

    insert into news(title,content,dt,img,rnum,cid,sid) values('Uber 招程序员有新招:车上玩个游戏就行'
    ,'据悉,应用内的游戏共包含三项挑战,用户必须在 60 秒内搞定每个挑战。如果得分够高,就可以直接通过应用联系 Uber 的人力资源部,并通过 email 收到相关的工作申请链接。
                Uber 发言人表示:“我们一直在利用各种新方式接触潜在的人才,Uber 希望与它们一起解决各种有趣的问题。如果你生活的城市拥有非常浓的科技气息,就可以在 Uber 应用中找到"路上的代码"挑战。只要你有一技之长,肯定会觉得这项挑战非常有趣,它不但能帮你找工作,还能让你的旅途不再枯燥。”
                很多程序员看到这项有趣的挑战后,纷纷发起了挑战。未来,该公司将会把这项挑战推向全美多个城市,以挖掘人才。此外,Uber 也解释称,这项挑战并不是想利用个人信息来对用户进行定位',
              '2016-03-29','http://i3.hexunimg.cn/2016-03-29/183020755.jpg',212,4,1);
    
    insert into news(title,content,dt,img,rnum,cid,sid) values('习近平出席捷克总统泽曼举行的欢迎仪式','新华社布拉格 3 月 29 日电(记者王丰丰)29 日,国家主席习近平出席捷克总统泽曼在布拉格总统府举行的隆重欢迎仪式。
                                                                                             初春的布拉格,阳光明媚,绿草如茵。春光下的总统府,旌旗招展,鲜花绽放,等待着中国贵宾的到来。
                                                                                             当地时间上午 10 时许,习近平抵达总统府 3 号院。旗手沿红地毯整装列队。泽曼在军乐队前迎接习近平。两国元首面向总统旗站立,军乐队奏中捷两国国歌,鸣礼炮 21 响。习近平在泽曼陪同下检阅仪仗队,仪仗队由捷克军队和总统府警卫部队组成。
                                                                                             检阅毕,习近平用捷克语问候捷克士兵“战士们好”,捷克士兵齐声响亮回应“好”。两国元首登上检阅台,共同检阅分列式。
                                                                                             王沪宁、栗战书、杨洁篪等出席欢迎仪式。','2016-03-29','http://upload.cankaoxiaoxi.com/2016/0329/1459243945740.jpg',1021,1,2);
    * 来源表
    

    insert into source(source) values("腾讯新闻"); insert into source(source) values("搜狐新闻"); insert into source(source) values("中关村在线"); insert into source(source) values("百度新闻");


  基本 pojo 对象属性:
   * 用户
 private Integer id;
 private String unum;
 private String head;
 private String nick;
 private String pass;
 private Integer sex;
 private Integer status;

   * 兴趣
  private Integer id;
  private String label;
  private Integer uid;

  ```
  • 分类

     private Integer id;
     private String content;
    
  • 新闻

     private Integer id;
     private String title;
     private String content;
     private String dt;
     private String img;
     private Integer rnum;
     private Integer cid;
     private Integer sid;
    

2016.03.26

系统环境 ubuntu 14.04 , 基本实现 mysql 安装,数据库设计与创建,mybatis 的基本操作

  • 数据库 mysql5.5
  • 数据库设计 : newssysdb 设计第一版

    • user 用户表
      • id 用户 id
      • unum 账号
      • head 头像
      • nick 昵称
      • pass 密码
      • status 状态(暂时不分析)
      • sex 性别 默认 0 为男,1 为女
    • taste 兴趣表

      • id 兴趣 id
      • label 兴趣标签
      • uid 外键(用户 id) -> user/id
    • cate 分类表

      • id 分类 id
      • content 内容
    • news 新闻表

      • id 新闻 id
      • content 新闻内容
      • title 新闻标题
      • sid 来源 -> source/id
      • cid 分类 id -> cate/id
      • dt 发布时间
      • rnum 阅读次数

  • 创建数据库和表

    (1)创建数据库

    ```sql

    create database newssysdb character set utf8;

  ```

(2)创建用户表

  ```sql

   create table user(
     id int(11) not null primary key auto_increment,
     unum varchar(15) not null,
     head varchar(200) default '/images/moren.jpg',
     nick varchar(100),
     pass varchar(100) not null,
     sex int(4) not null default '0',
     status int(4) not null default '0'
   )DEFAULT CHARSET=utf8;

  ```

(3) 创建兴趣表

 ```sql

    create table taste(
      id int(11) not null primary key auto_increment,
      label varchar(100) not null,
      uid int(11) not null default '0',
      FOREIGN KEY (uid) REFERENCES user(id)
    )DEFAULT CHARSET=utf8;

 ```

(4) 创建分类表

 ```sql

    create table cate(
      id int(11) not null primary key auto_increment,
      content varchar(100) not null
    )DEFAULT CHARSET=utf8;

 ```

(5)创建新闻表

 ```sql

    create table news(
        id int(11) not null primary key auto_increment,
        title varchar(200),
        content text,
        dt varchar(100),
        img varchar(200) default '/images/moren.jpg',
        rnum int(11) not null default '0',
        cid int(11) not null default '0' , FOREIGN KEY (cid) REFERENCES cate(id),
        sid int(11) not null default '0', FOREIGN KEY (sid) REFERENCES source(id)
      )DEFAULT CHARSET=utf8;

 ```

2016.03.17

使用 maven 进行就行构建

  • spring 4.2.5.RELEASE
  • spring mvc 4.2.5.RELEASE
  • mybatis 3.3.0
  • mybatis-spring 1.2.4
  • log4j 1.2.17
  • mysql-connector-java 5.1.38
  • fastjson 1.2.7
  • junit 3.8.1
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools