毕业设计:线上新闻热点推荐网站的设计与实现

一 结果展示

用户端

管理端

二 亮点

  1. 推荐原则:兴趣标签、IP地址、热度计算
  2. 框架:Django+Vue
  3. 其他:通过词云显示所有兴趣标签整洁大方,使用大量的数据可视化手段,使得管理员可以更直观地观察到数据的变化。

三 项目结构

数据库表

四 部分代码展示

(通过地址进行新闻推荐)

class NewsRecommendByCity():
    def __init__(self):
        self.file = self.getFile()
        self.db = self.connect()
        self.cursor = self.db.cursor()
        # self.userid = userid
        self.userslist = self.getUserData()
        self.news_tags = self.loadFileData()
        self.region = self.getRegion()
        self.reco = self.getRecommendByCity()
        self.result = self.writeToMySQL()

    # 连接mysql数据库
    def connect(self):
        db = pymysql.Connect(host=DB_HOST, user=DB_USER, password=DB_PASSWD, database=DB_NAME, port=DB_PORT,
                             charset='utf8')
        return db

    def getRecommendByCity(self):
        '''
            @Description:通过地区匹配新闻内容
            @:param region ----> 地区
        '''
        city_cor_list = list()
        for user in self.userslist:
            userid = user[0]
            # print('region', self.region)
            logger.info("region:{}".format(self.region))
            # print('user', user)
            city_key = {dict(self.region).get(userid)}
            # print(city_key)
            for newsid in self.news_tags:
                newstags = set(self.news_tags[newsid].split(","))
                # print(city_key,newstags)
                if len(city_key & newstags) > 0:
                    city_cor_list.append([int(userid), int(newsid), 1])
                    logger.info("city_cor_list.append:{}".format(str(userid)+":"+str(newsid)))
        return city_cor_list

    def getRegion(self):
        '''
            @Description:通过ip获取用户所在地区
            @:param  ip ----> 用户登录ip
        '''
        poslist = dict()
        for user in self.userslist:
            # print(user)
            # print(user[0])
            userid = user[0]
            ip = user[1]
            url = 'http://ip.ws.126.net/ipquery?ip=' + str(ip)
            res = requests.get(url)
            pos = re.findall('lo="(.*?)"', res.text)
            poslist[userid] = list(pos)[0]
        return poslist

    def getUserData(self):
        '''
            @Description:通过数据库获取用户的ip
            @:param
        '''
        users = ''
        sql_s = 'select userid,ip from news_api_user '
        try:
            self.cursor.execute(sql_s)
            users = self.cursor.fetchall()
            print(users)
        except Exception:
            print("Demo Error")
        return users

    def getFile(self):
        '''
           @Description:获取新闻对象
           @:param
        '''
        original_data_path = "Recommend/data/keywords/"
        files = os.listdir(original_data_path)
        for file in files:
            return original_data_path + file

    def loadFileData(self):
        '''
            @Description:加载本地的新闻标签词库
            @:param
        '''
        print("开始加载文件数据:%s" % self.file)
        news_tags = dict()
        for line in open(self.file, "r", encoding="utf-8").readlines():
            try:
                newid, newtags = line.strip().split("\t")
                news_tags[newid] = newtags
            except:
                print("读取分词数据过程中出现错误,错误行为:{}".format(line))
                pass
        return news_tags

    def writeToMySQL(self):
        logging.info("将数据写入数据库...")
        print(self.reco)
        time = datetime.datetime.now().strftime("%Y-%m-%d")
        print(time)
        for user in self.userslist:
            userid = user[0]
            sql_u_region = "update news_api_user set region='%s' where userid=%d" % (dict(self.region).get(userid).replace("省", ""), userid)
            try:
                self.cursor.execute(sql_u_region)
                self.db.commit()
            except Exception:
                logger.error("rollback:{}".format(userid))
                self.db.rollback()
        for row in self.reco:
            sql_i = 'insert into news_api_recommend(userid, newsid, hadread, cor, species ,time) values (%d, %d, 0, %.2f, 1, \'%s\')' % \
                    (int(row[0]), int(row[1]), float(row[2]), time)
            print(sql_i)
            try:
                self.cursor.execute(sql_i)
                self.db.commit()
            except Exception:
                logger.error("rollback:{}".format(row))
                # print("rollback", row)
                self.db.rollback()
        logger.info("推荐内容数据写入完成....")
        print('结束')
        return 1

五 总结

本系统是一个非常适用于本科毕业论文的小项目。

保佑大家都高分毕业!!!

需要源码的私

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值