【python】实战:“唱啥”app后台开发

项目背景


近期在Tencent实习,参加mini项目,我们做的是一款app,名曰“唱啥”,是一款基于用户个人声音特性和听歌偏好来匹配相似歌手,从而为用户定制个性化推荐K歌单的应用。以小组的形式开展,我在项目中的角色是后台开发,主要负责后台逻辑代码的编写。

项目框架


由于开发时间比较紧张,python代码开发效率高,可读性强,适合本次周期短人员多的现实情况,所以 后台开发语言选用的Python,另外,后台框架选用的是flask,它是一个Python实现的Web开发框架,简单易学,它的文档和扩展性都强于Django和Tornado,故后台开发框架选用Flask,整个项目框架如下:
这里写图片描述
我们后台的整个逻辑流程如下:

这里写图片描述
后台收到前端的POST请求,从请求内容中拿到用户ID(QQ号)和用户输入的音频,保存到本地,去调用最外层接口,最外层接口直接返回最终结果再构建前端要求的json,返回给前端。
算法部分我们组有专门做算法的大佬,我们只需要传参去调用他的接口。主要逻辑是:根据用户的一段清唱分析出与其声音最相似的三个歌手,再根据用户听歌行为为他进行推荐,推荐结果由每个歌手的两首歌组成,双重保证使得推荐更精确,且跟符合用户期望,对用户听歌行为的分析一定程度上使得推荐出来的歌是用户比较熟悉和喜欢的歌曲。在最后呈现给用户的是适合他唱的且他比较喜欢的6首歌。
考虑到异常分支,当用户输入的QQ号(用户ID)不在查找范围内时,按照和其声音相似歌手的歌曲的热度为其推荐。
除此之外,后台代码也引入了日志,在服务运行过程中,记录异常信息,方便后期维护。日志模块规定使用python原生的日志系统,准确记录发生异常的时间段等信息。


接口介绍


1、最外层接口
get_recommend_list (user_id, voice_file)

函数名参数返回说明
get_recommend_list用户ID、用户音频文件用户json格式的歌曲推荐列表最外层接口,和前端发生数据传输

2、内部接口

函数名参数返回说明
get_recommend用户ID、用户特征向量、歌手ID字典,key为歌手ID,value为list,分别是两首歌曲的ID结合用户行为推荐
get_hot_songs歌手ID该歌手的两首热门歌曲在用户ID无效时使用
get_song_info歌曲的所有信息一个大的字典,将文件中的信息加载到缓存,减少IO次数
get_user_factors用户的特征向量读取用户特征向量文件,加载到缓存
get_recommend_json歌手ID、歌曲ID、歌曲ID、相似百分比一个歌手的信息字典用于返回给前端时构建格式
get_candidates歌手ID歌手的所有歌曲的特征向量返回结果作为参数传给算法

结构如下:
这里写图片描述


总结


通过这个项目学到了很多东西,是对刚学习的Python的一种应用,锻炼了团队合作和沟通的能力,把一个ideal变成产品,这个过程十分艰辛却也十分美好,我们遇到了,例如前端发过来的音频无法解析,音频分析算法调用不成功等等很多问题,但是在大家的共同努力下都能一一解决掉,锻炼了解决问题的能力,也有做的不够好的地方,后台没有考虑安全性、容灾处理、负载均衡这些方面,所以产品的完成度还不能说是很好,但是很感谢能有这么一个机会去做这个项目,不仅仅是做项目,更重要的是认识了好多小伙伴,每个人都很努力在做,认识他们很荣幸。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值