Other Doubans

2019/05/14

layout: post title : 实现一个综合电影网站(可行性分析与实践) categories : other

集合各大电影网站数据,能够让影迷们快速获取各大电影网站的电影评分信息,浏览相关电影来自豆瓣电影、知乎、网易云音乐等平台的评价与讨论,在线欣赏电影的背景音乐,甚至查询相关电影的实际拍摄地点,电影场景取景地等


项目地址:https://github.com/humingk/douban_movie_plus

版权是绕不开的话题,本项目仅供学习交流

背景

在众多电影网站中,即使像豆瓣电影这样优秀的网站,都有其致命的受限与缺点。电影迷们缺乏一个能够集合各大电影网站数据的综合性电影网站。在这样的需求下,如果能有这样一个平台,它能够让影迷们快速获取各大电影网站的电影评分信息,浏览相关电影来自豆瓣电影、知乎、网易云音乐等平台的评价与讨论,在线欣赏电影的背景音乐,甚至查询相关电影的实际拍摄地点,电影场景取景地等,这是一件很有意义的事。

现有电影网站调研

每个电影网站都有其侧重点,我们的目标是把这些网站的侧重点集合起来。

image-20220511125914026

后端接口功能要求

(1) 能够提供电影的详细数据:包括电影的基础信息、评分信息、标签类型、相关影人基础信息、图片信息、预告片信息、热门影评、热门短评、电影获得奖项等等。

(2) 能够提供影人的详细信息:包括影人的基础信息、影人的图片、影人的相关电影信息、影人获取的奖项等等。

(3) 能够提供电影的资源信息:包括正版网站的在线资源、其他网站的离线资源,能够直接跳转到相应的页面进行在线观看。

(4) 能够提供知乎电影话题的基础信息:包括知乎的话题、知乎评分、相应的热门问题等等。

(5) 能够提供各大电影网站的评分信息,包括豆瓣电影评分、IMDB评分、烂番茄新鲜度、MTC评分、猫眼评分、知乎推荐度等等。

(6) 能够提供电影场景详细信息:包括场景电影基础信息、场景地理位置分布图、场景的电影截图、场景的现场图片等等。

(7) 能够提供搜索功能:包括电影、影人、场景、地点、配乐等信息的搜索。

(8) 能够提供用户登录注册功能:不同级别的用户需要有不同的角色和权限,分别能访问不同的资源接口,并且需要实现登录和注册功能。

(9)部分数据需要能够定期更新:电影的评价、评分等信息由于自身的时效特性,需要定期对数据库的相应表进行更新操作。

后端接口性能要求

(1) 电影数据需要进行科学存储: 众多网站的电影数据存放在一个数据库中难免会有很多冲突和冗余,数据库需要在满足最基本的三范式的同时,保留一定的冗余性以保证减少多表联合查询操作和快速响应电影数据的查询。

(2) API服务的高并发: 本系统后端的API服务除了满足本系统的前端需求,还需要满足其他开发者的应用需求,这要求API服务能够实现高并发的基本要求,能够以最低的延迟、最快的响应速度提供电影数据给前端或客户端应用。

(3) API服务的稳定性: 当大量前端或客户端应用使用本系统的API服务,本系统承受高并发请求的同时,需要保证API服务稳定提供电影数据,小范围的服务出错不能影响整个系统导致其崩溃。

(4) API服务的安全性: 当出现恶意的请求时,会使系统后端占用大量的资源,影响到正常用户的使用。故API服务接口需要根据用户的请求IP对其进行限流,对特定的请求接口加以token验证,以保证API服务的安全。

(5) 业务服务的高速缓存: 当用户量到达一定的程度,就会出现多个用户短时间内重复查询同一电影数据的可能,因此系统需要配置查询业务的高速缓存机制以减少对数据库的查询操作,从而降低请求响应速率和提高系统的性能。

我们将系统分为三个模块

根据系统功能需求,本系统被合理地拆分为三大模块:数据模块、后端模块、前端模块。

数据模块主要采用Python语言,后端模块主要采用Java语言,前端模块主要采用JavaScript语言。

数据库设计

image-20220511125339686

一、数据模块

系统的数据模块实现了获取详细电影数据、更新最新电影数据等功能,数据业务主要分为六个小模块:豆瓣电影模块、网易云音乐模块、IMDB模块、电影场景模块、电影资源模块以及知乎话题模块。利用基于Twisted的异步处理框架Scrapy,系统能够快速异步获取并处理最新的电影数据,根据Redis存储请求队列来排除重复的请求,根据IP代理池提供代理IP代理请求来突破各大电影网站的反爬虫机制。

本系统数据模块基于Scrapy框架,按需求分为豆瓣电影、网易云音乐、电影资源、知乎电影、IMDB电影等小模块。

流程图

image-20220511124928273

流程图功能描述

(1)将IMDB官网提供的TSV电影数据集转换为满足三范式的关系型数据库。

(2)将IMDB官网提供的TSV影人数据集转换为满足三范式的关系型数据库。

(3)IMDB电影数据通过破解豆瓣电影的搜索接口加密来匹配豆瓣电影数据。

(4)IMDB影人数据通过破解豆瓣电影的搜索接口的加密来匹配豆瓣影人数据。

(5)通过豆瓣电影的豆瓣ID匹配豆瓣电影的图片信息。

(6)通过豆瓣影人的豆瓣ID匹配豆瓣影人的图片信息。

(7)通过豆瓣电影的豆瓣ID匹配豆瓣电影的热门影评、热门评论和预告片信息。

(8)电影场景数据通过电影名关键字、电影年份等基础信息匹配豆瓣电影。

(9)豆瓣电影名的关键字通过知乎搜索接口匹配知乎电影话题和热门问题。

(10)电影资源通过豆瓣电影名关键字、电影年份等基础信息匹配豆瓣电影。

(11)通过豆瓣电影名、电影别名等关键字匹配网易云音乐的电影插曲、用户根据电影整理的电影歌单和电影原声专辑信息。

(12)豆瓣电影的IMDB的ID通过OMDB搜索接口匹配IMDB的基础信息、IMDB评分、MTC评分、烂番茄新鲜度等信息。

(13)从OMDB搜索接口获取IMDB电影信息。

(14)破解网易云音乐接口的请求参数加密方式从而获取网易云音乐数据。

(15)从各大电影资源网站获取电影的资源信息。

(16)从知乎的搜索接口获取电影话题的基础信息、猫眼电影评分等信息。

(17)从片场APP抓包分析数据接口,从而获取电影的场景拍摄地等信息。

(18)从豆瓣电影的电影页面获取电影基础信息、视频网站跳转链接等信息。

(19)从豆瓣电影的影人页面获取影人的基础信息、获奖信息等。

数据模块运行脚本命令

我们将数据模块工程部署到服务器上,通过定时任务抓取各大电影网站的数据,来定时维护我们的数据库

image-20220511125502770

截止2020年,数据库维护详情

image-20220511130231552

二、后端模块

系统的后端模块实现了提供高并发、高稳定的RESTFUL_API服务,除了给本系统前端提供所需的电影数据接口服务,还能给广大前端、客户端开发者提供更加详细、更加完善的电影数据接口服务。后端模块的业务主要分为六个微服务:电影服务、影人服务、音乐服务、场景服务、搜索服务、用户服务。每个业务服务分别依赖公共包以及不同的业务模块包,通过实现API层的对应接口来提供服务,同时各个模块之间可以通过调用API层的接口来实现交互。后端采用的微服务架构设计不仅保证了接口服务的高并发、高稳定需求,同时还易于扩展,有一定的鲁棒性。

本系统后端模块基于Spring Cloud系列框架集合,业务微服务主要分为电影服务、影人服务、音乐服务、场景服务、搜索服务、用户服务。所有微服务都实现了相应的API接口,调用了不同的依赖包用于实现功能

后端模块服务描述

(1) 电影服务: 包括豆瓣电影、IMDB电影、知乎电影话题、电影资源等基础或详细数据的处理。

(2) 影人服务: 包括豆瓣影人、IMDB影人等基础或详细数据的处理。

(3) 音乐服务: 包括对网易云音乐的歌曲、歌单、专辑等数据的处理。

(4) 场景服务: 包括对电影的拍摄场景、拍摄地等数据的处理。

(5) 用户服务: 包括对普通用户、管理员用户等数据的处理。

(6) 搜索服务: 包括对豆瓣电影、豆瓣影人、电影场景、电影资源、电影取景地、电影配乐、电影歌单、电影原声专辑等数据的处理。

后端接口功能测试

image-20220511130702825

后端接口性能测试

image-20220511130745795

三、前端模块

前端模块实现了功能完善的页面展示效果,主要页面通过Flex布局方案实现了“双飞翼布局”效果。 每个页面都采用了组件化的形式开发,不同页面可以复用各个组件实例,页面可以通过Prop来与组件进行交互,不同组件也可以通过Vuex状态管理模式进行交互。前端采用雷达图的方式直观展示了各大电影网站的评分信息,电影迷们也可以在前端页面上浏览豆瓣电影的基础信息、IMDB的基础信息、电影场景的拍摄地点、不同网站的评价信息,甚至还能在线欣赏电影的背景音乐。

前端模块采用了Vue组件式的开发方式。

前端模块组件描述

(1) 导航栏组件: 包括了壁纸切换按钮、仓库跳转链接、网站Logo、搜索框、导航栏等元素。

(2) 电影基础信息组件: 包括了电影名、电影年份、豆瓣电影海报和基础信息、IMDB电影海报和基础信息等元素。

(3) 电影评分信息组件: 包括了电影在各大电影网站的评分信息以及电影的获奖信息等元素。

(4) 电影影人组件: 包括的电影的所有影人头像、基础信息等元素。

(5) 知乎问题组件: 包括了电影在知乎电影话题下的热门问题等元素。

(6) 电影资源组件: 包括了电影在各大电影资源网站的资源信息等元素。

(7) 电影片场组件: 包括了电影的拍摄场景、实际取景地的图片、描述等元素。

(8) 电影音乐组件: 包括了电影的配乐、歌单、原声大碟以及用户的热门评论等元素。

(9) 电影台词组件: 包括了当前电影的经典台词展示元素。

(10) 电影壁纸组件: 包括了当前电影的壁纸图片元素。

网站首页地址:movie.doubans.com

PS:后端服务器已下线,目前只展示一部电影,后端API已不可用

电影评分雷达图

image-20220511133047444