Files
2024-06-24 23:39:38 +08:00
..
2024-05-22 13:50:05 +08:00
2024-05-22 13:50:05 +08:00
2024-05-22 13:50:05 +08:00
2024-05-22 13:50:05 +08:00
2023-12-24 23:22:20 +08:00
2023-12-24 23:22:20 +08:00
2024-06-24 23:39:38 +08:00
2024-02-21 23:44:54 +08:00

Film Server

简介

  • server 是本项目的后端项目
  • 主要用于提供前端项目需要的 API数据接口, 以及数据搜集和更新
  • 实现思路 :
    • 使用 gocolly 获取公开的影视资源,
    • 将请求数据通过程序处理整合成统一格式后使用redis进行暂存
    • 使用 mysql 存储收录的影片的检索信息, 用于影片检索, 分类
    • 使用 gin 作为web服务, 提供相应api接口
  • 项目依赖
# gin web服务框架, 用于处理与前端工程的交互
github.com/gin-gonic/gin v1.9.0
# gocolly go语言爬虫框架, 用于搜集公共影视资源
github.com/gocolly/colly/v2 v2.1.0
# go-redis redis交互程序
github.com/redis/go-redis/v9 v9.0.2
# gorm 用于处理与mysql数据库的交互
gorm.io/gorm v1.24.6
gorm.io/driver/mysql v1.4.7

项目结构

项目主要目录结构

  • config 用于存放项目中使用的配置信息和静态常量
  • controller 请求处理控制器
  • logic 请求处理逻辑实现
  • model 数据模型结构体以及与数据库交互
  • plugin 项目所需的插件工具集合
    • common 公共依赖
    • db 数据库配置信息
    • spider gocolly配置, 执行逻辑, 数据前置处理等
server                          
├─ config                       
│  └─ DataConfig.go             
├─ controller                   
│  ├─ IndexController.go        
│  └─ SpiderController.go       
├─ logic                        
│  ├─ IndexLogic.go             
│  └─ SpiderLogic.go            
├─ model                        
│  ├─ Categories.go             
│  ├─ Movies.go                 
│  ├─ RequestParams.go          
│  ├─ ResponseJson.go           
│  └─ Search.go                 
├─ plugin                       
│  ├─ common                    
│  │  ├─ dp                     
│  │  │  ├─ ProcessCategory.go  
│  │  │  └─ ProcessMovies.go    
│  │  ├─ param                  
│  │  │  └─ SimpleParam.go      
│  │  └─ util                   
│  │     ├─ FileDownload.go     
│  │     └─ Request.go          
│  ├─ db                        
│  │  ├─ mysql.go               
│  │  └─ redis.go               
│  └─ spider                    
│     ├─ Spider.go              
│     └─ SpiderCron.go          
├─ router                       
│  └─ router.go                 
├─ go.mod                       
├─ go.sum                       
├─ main.go                      
└─ README.md                    

启动方式

本地运行

  1. 修改 /server/plugin/db 目录下的 mysql.go 和 redis.go 中的连接地址和用户名密码
  2. 在 server 目录下执行 go run main.go

数据库信息简介

1.Mysql

连接信息(以docker compose部署为例) :

 mysql:
 	ip: 部署的服务器IP
    port: 3610
    username: root
    password: root
    database: FilmSite

数据库结构

  • 数据库: FilmSite
    • 数据表 search

search 表 (用于记录影片的相关检索信息, 主要用于影片的 搜索, 分类, 排序 等)

字段名称 类型 字段释义
id bigint 自增主键
created_at datetime 记录创建时间
updated_at datetime 记录更新时间
deleted_at datetime 逻辑删除字段
mid bigint 影片ID
cid bigint 二级分类ID
pid bigint 一级分类ID
name varchar 影片名称
sub_title varchar 子标题(影片别名)
c_name varchar 分类名称
class_tag varchar 剧情标签
area varchar 地区
language varchar 语言
year bigint 上映年份
initial varchar 首字母
score double 豆瓣评分
update_stamp bigint 影片更新时间戳
hits bigint 热度(播放次数)
state varchar 状态(正片)
remarks varchar 更新状态(完结 | xx集)
release_data bigint 上映时间戳

2.Redis

连接信息(以docker compose部署为例) :

  ## 部署时默认使用如下信息
  redis:
  	ip: 部署的服务器IP
    port: 3620
    password: root
    DB: 0  ##使用的redis数据库为0号库

服务端API数据示例

1. 网站前台API

1. API接口基本信息

  • 响应结构
{
    code: 0|1,		// 成功|失败
	data: {},	// 数据内容
    msg: "",		// 提示信息
}
名称 URL client component Method Params
首页数据 /index client/src/views/index/Home.vue GET
网站基本配置信息 /config/basic client/src/components/index/Header.vue GET
影片分类导航 /navCategory client/src/components/index/Header.vue GET
影片详情 /filmDetail client/src/views/index/FilmDetails.vue GET id (int, 影片ID)
影片播放页数据 /filmPlayInfo client/src/views/index/Play.vue GET id (int, 影片ID)
playFrom (string, 播放源ID)
episode (int, 集数索引)
影片检索(名称搜索) /searchFilm client/src/views/index/SearchFilm.vue GET keyword (string, 影片名)
影片分类首页 /filmClassify client/src/views/index/FilmClassify.vue GET Pid (int, 一级分类ID)
影片分类详情页 /filmClassidySearch client/src/views/index/FilmClassifySearch.vue GET Pid (int, 一级分类ID)
Category (int, 二级分类ID)
Plot (string, 剧情)
Area (string, 地区)
Language (string, 语言)
Year (string, 年份)
Sort (string, 排序方式)

2. 接口响应数据示例:

  • /index 首页数据
{
    "code": 0,		// 状态码
    "data": {		// 数据内容
        "category": {				// 分类信息
            "id": 0,				// 分类ID
            "name": "xxx",			// 分类名称
            "pid": 0,				// 上级分类ID
            "show": false,			// 是否展示
            "children": [], 			// 子分类信息
        },
        "content": [				// 内容区数据
            {
                "hot": [			// 热播影片
                    {
                        "CreatedAt": "2024-01-13T19:04:01+08:00",		// 创建时间
                        "DeletedAt": null,				// 删除时间
                        "ID": 100,						// ID
                        "UpdatedAt": "2024-01-13T19:04:01+08:00",	// 更新时间
                        "area": "xxx",					// 地区
                        "cName": "xxx",					// 分类名称
                        "cid": 45,					// 分类ID
                        "classTag": "xxx",				// 剧情标签
                        "hits": 0,					// 热度
                        "initial": "X",					// 首字母
                        "language": "xxx",				// 语言 
                        "mid": 10000,					// 影片ID
                        "name": "xxx",					// 影片名称
                        "pid": 1,					// 上级分类ID
                        "releaseStamp": 1704880403,		// 上映时间戳
                        "remarks": "xxx",			 	// 备注信息 [预告|完结|更新至xx集]
                        "score": 0,						// 评分
                        "state": "xx",					// 状态 正片|预告
                        "subTitle": "xxx",				// 子标题, 别名
                        "updateStamp": 1704880403,		// 更新时间戳
                        "year": 2024,					// 年份
                    }
                ],	
        		"movies": [			// 近期更新影片
                    {
                        "id": 10000,						// 影片ID
                        "cid": 6,					// 分类ID
                        "pid": 1,					// 上级分类ID
                        "name": "xxxx",						// 影片名称
                        "subTitle": "xxxx",					// 子标题, 别名
                        "cName": "xxx",						// 分类名称
                        "state": "正片",						// 影片状态
                        "picture": "http://xxxx.jpg",		// 海报图片url
                        "actor": "xxx,xxx", 				// 演员
                        "director": "xxx,xxx",				// 导演
                        "blurb": "",						// 剧情简介
                        "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                        "area": "xxx",						// 地区
                        "year": "2024" 						// 年份
                    }
                ],
        		"nav": [						// 导航信息
                    {	
                    	"id": 0,				// 分类ID
       					"name": "xxxx", 		// 分类名称
       					"pid": 0,				//上级分类ID
       					"show": false,			// 是否展示
       					"children": [], 		//子分类信息
                    }
                ]
            },
        ]
    },
    msg: "", 	// 提示信息
}
  • /config/basic 网站基本配置信息
{
    "code": 0,
    "data": {
        "siteName": "GoFilm",					// 网站名称
        "domain": "http://127.0.0.1:3600",			// 域名
        "logo": "https://xxx.jpg",				// 网站logo
        "keyword": "xxxx, xxxx",				// 网站搜索关键字
        "describe": "xxxxxxx",					// 网站描述信息
        "state": true,						//站点状态
        "hint": "网站升级中, 暂时无法访问 !!!" 		// 网站关闭时提示信息
    },
    "msg": ""
}
  • /navCategory 首页头部分类信息
{
    "code": 0,
    "data": [
             {	
                    "id": 0,				// 分类ID
       				"name": "xxxx", 			// 分类名称
       				"pid": 0,					// 上级分类ID
       				"show": false,				// 是否展示
              },
    ],
    "msg": ""
}
  • /filmDetail 影片详情信息
 {
    "code": 0,
    "data": {
        "detail": {									// 影片详情信息
            "id": 100000,							// 影片ID
            "cid": 30,								// 影片分类ID
            "pid": 4,								// 上级分类ID
            "name": "xxx",							// 影片名称
            "picture": "https://xxx.jpg",			// 海报封面url
            "playFrom": [ "xxx","xxx" ],			// 播放来源
            "DownFrom": "http",						// 下载方式
            "playList": [ 							// 播放地址列表(主站点)
                {
                    "episode": "第xx集",					// 集数
                    "link": "https://xxx/index.m3u8"		// 播放地址url
                },
            ],	
            "downloadList": [ 						// 下载地址列表 
            	 {
                    "episode": "第xx集",					// 集数
                    "link": "https://xxx/index.m3u8"			// 播放地址url
               	 },
            ],	
            "descriptor": { 						// 影片详情
            	"subTitle": "",						// 副标题, 别名
                "cName": "xxxx",					// 分类名称
                "enName": "xxx",					// 影片名称中文拼音
                "initial": "X",						// 影片名称首字母
                "classTag": "xxxx",					// 内容标签
                "actor": "xxx,xxx",					// 演员
                "director": "xxx",					// 导演
                "writer": "xxx",					// 作者
                "blurb": "xxx",						// 简介(缺省)
                "remarks": "更新至第xx集",			// 更新进度
                "releaseDate": "2024-01-06",		// 上映日期
                "area": "xxx",						// 地区
                "language": "xxx",					// 语言
                "year": "2024",						// 年份
                "state": "正片",					// 状态 正片|预告
                "updateTime": "2024-01-13 00:51:21",		// 更新时间
                "addTime": 1704511497,				// 添加时间戳
                "dbId": 26373174,					// 豆瓣ID
                "dbScore": "0.0",					// 豆瓣评分
                "hits": 0,							// 热度
                "content": "xxx"					//影片内容简介(全)
            },	
            "list": [ 								// 播放地址列表(全站点)
            	{
                    "id": "xxxxxxxxxxxx",			// 播放源ID
                    "name": "HD(xxx)",				// 播放源别名
                    "linkList": [					// 播放地址列表
                         {
                            "episode": "第xx集",			// 集数
                            "link": "https://xxx/index.m3u8"		// 播放地址url
                         },
                    ]
                },
            ]	
        },
        "relate": [ 		// 相关影片推荐
        	{
              	"id": 10000,					// 影片ID
                "cid": 6,						// 分类ID
                "pid": 1,						// 上级分类ID
                "name": "xxxx",					// 影片名称
                "subTitle": "xxxx",				// 子标题, 别名
                "cName": "xxx",					// 分类名称
                "state": "xxx",					// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 			// 演员
                "director": "xxx,xxx",			// 导演
                "blurb": "",					// 剧情简介
                "remarks": "HD", 				// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",					// 地区
                "year": "2024" 					// 年份
            },
        ]
    },
    "msg": "xxx"
}
  • /filmPlayInfo 影片播放页信息
{
    "code": 0,
    "data": {
        "current": { 	// 当前播放信息
            "episode": "第xx集",					   // 当前播放集数
            "link": "https://xxx/index.m3u8"		// 当前播放地址url
        },
        "currentEpisode": 0,			// 当前播放集数索引
        "currentPlayFrom": "xxx",		// 当前播放源ID
        "detail": { 		// 影片详情
            "id": 100000,							// 影片ID
            "cid": 30,								// 影片分类ID
            "pid": 4,								// 上级分类ID
            "name": "xxx",							// 影片名称
            "picture": "https://xxx.jpg",			// 海报封面url
            "playFrom": [ "xxx","xxx" ],			// 播放来源
            "DownFrom": "http",						// 下载方式
            "playList": [ 	// 播放地址列表(主站点)
                {
                    "episode": "第xx集",							   // 集数
                    "link": "https://xxx/index.m3u8"// 播放地址url
                },
            ],	
            "downloadList": [ 	// 下载地址列表 
                 {
                    "episode": "第xx集",				// 集数
                    "link": "https://xxx/index.m3u8"	// 播放地址url
                 },
            ],	
            "descriptor": { 	// 影片详情
                "subTitle": "",						// 副标题, 别名
                "cName": "xxxx",					// 分类名称
                "enName": "xxx",					// 影片名称中文拼音
                "initial": "X",						// 影片名称首字母
                "classTag": "xxxx",					// 内容标签
                "actor": "xxx,xxx",					// 演员
                "director": "xxx",					// 导演
                "writer": "xxx",					// 作者
                "blurb": "xxx",						// 简介(缺省)
                "remarks": "更新至第xx集",			// 更新进度
                "releaseDate": "2024-01-06",		// 上映日期
                "area": "xxx",						// 地区
                "language": "xxx",					// 语言
                "year": "2024",						// 年份
                "state": "xxx",						// 状态 正片|预告
                "updateTime": "2024-01-13 00:51:21",	// 更新时间
                "addTime": 1704511497,				// 添加时间戳
                "dbId": 26373174,					// 豆瓣ID
                "dbScore": "0.0",					// 豆瓣评分
                "hits": 0,							// 热度
                "content": "xxx"					//影片内容简介(全)
            },	
            "list": [ 		// 播放地址列表(全站点)
                {
                    "id": "xxxxxxxxxxxx",			// 播放源ID
                    "name": "HD(xxx)",				// 播放源别名
                    "linkList": [					// 播放地址列表
                         {
                            "episode": "第xx集",					   // 集数
                            "link": "https://xxx/index.m3u8"		// 播放地址url
                         },
                    ]
                },
            ]	
        },							
        "relate": [ 		// 相关影片推荐
            {
                "id": 10000,						// 影片ID
                "cid": 6,							// 分类ID
                "pid": 1,							// 上级分类ID
                "name": "xxxx",						// 影片名称
                "subTitle": "xxxx",					// 子标题, 别名
                "cName": "xxx",						// 分类名称
                "state": "xxx",						// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 				// 演员
                "director": "xxx,xxx",				// 导演
                "blurb": "",						// 剧情简介
                "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",						// 地区
                "year": "2024" 						// 年份
            },
        ]
    },
    "msg": "影片播放信息获取成功"
}
  • /filmClassify 分类影片首页数据
{
    "code": 0,
    "data": {
        "content": {		// 内容区数据
            "news": [		//最新上映
            	 "id": 10000,						// 影片ID
                "cid": 6,							// 分类ID
                "pid": 1,							// 上级分类ID
                "name": "xxxx",						// 影片名称
                "subTitle": "xxxx",					// 子标题, 别名
                "cName": "xxx",						// 分类名称
                "state": "xxx",						// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 				// 演员
                "director": "xxx,xxx",				// 导演
                "blurb": "",						// 剧情简介
                "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",						// 地区
                "year": "2024" 						// 年份
            ],
            "recent": [ 	// 近期更新
            	 "id": 10000,						// 影片ID
                "cid": 6,							// 分类ID
                "pid": 1,							// 上级分类ID
                "name": "xxxx",						// 影片名称
                "subTitle": "xxxx",					// 子标题, 别名
                "cName": "xxx",						// 分类名称
                "state": "xxx",						// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 				// 演员
                "director": "xxx,xxx",				// 导演
                "blurb": "",						// 剧情简介
                "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",						// 地区
                "year": "2024" 						// 年份
            ],
            "top": [ 		// 热度排行
            	 "id": 10000,						// 影片ID
                "cid": 6,							// 分类ID
                "pid": 1,							// 上级分类ID
                "name": "xxxx",						// 影片名称
                "subTitle": "xxxx",					// 子标题, 别名
                "cName": "xxx",						// 分类名称
                "state": "xxx",						// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 				// 演员
                "director": "xxx,xxx",				// 导演
                "blurb": "",						// 剧情简介
                "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",						// 地区
                "year": "2024" 						// 年份
            ]
        },
        "title": { 			// 头部标题区数据(暂未使用)
        	 "id": 0,						// 分类ID
            "name": "xxx", 					// 分类名称
            "pid": 0,						// 上级分类ID
            "show": false,					// 是否展示
            "children": [], 				// 子分类信息
        }
    },
    "msg": ""
}
  • /filmClassidySearch 影片分类检索页数据
{
    "code": 0,
    "data": {
        "list": [ 		// 影片信息集合
        	{
                "id": 10000,						// 影片ID
                "cid": 6,							// 分类ID
                "pid": 1,							// 上级分类ID
                "name": "xxxx",						// 影片名称
                "subTitle": "xxxx",					// 子标题, 别名
                "cName": "xxx",						// 分类名称
                "state": "xxx",						// 影片状态
                "picture": "http://xxxx.jpg",		// 海报图片url
                "actor": "xxx,xxx", 				// 演员
                "director": "xxx,xxx",				// 导演
                "blurb": "",						// 剧情简介
                "remarks": "HD", 					// 备注信息 [预告|完结|更新至xx集]
                "area": "xxx",						// 地区
                "year": "2024" 						// 年份
            }
        ],
        "page": { 		// 分页信息
        	"pageSize": 49,							// 每页页数						
            "current": 1,							// 当前页
            "pageCount": xx,						// 总页数
            "total": xx,							// 总数据量
        },
        "params": { 	// 请求参数
        	"Area": "",								// 地区
            "Category": "",							// 分类ID
            "Language": "",							// 语言
            "Pid": "1",								// 上级分类ID
            "Plot": "",								// 剧情
            "Sort": "xxx",							// 排序方式
            "Year": "",								// 年份
        },
        "search": { 	// 分类标签组信息
        	"sortList": [ "Category","Plot","Area","Language","Year","Sort" ], 		// 标签数据排序, 固定值
            "tags": { 			// 标签组, 用于页面筛选Tag渲染
            	"Area": [ { Name:"", Value:"" } ],								
                "Category": [ { Name:"", Value:"" } ],
                "Initial": [ { Name:"", Value:"" } ],
                "Language": [ { Name:"", Value:"" } ],
                "Plot": [ { Name:"", Value:"" } ],
                "Sort": [ { Name:"", Value:"" } ],
                "Year": [ { Name:"", Value:"" } ]
            },
            "titles": { 		// 标签组标题映射(固定值)
            	"Area": "地区",
                "Category": "类型",
                "Initial": "首字母",
                "Language": "语言",
                "Plot": "剧情",
                "Sort": "排序",
                "Year": "年份"
            }
        },				
        "title": { 		// 当前一级分类信息
        	"id": 1,				// 分类ID
            "pid": 0,				// 上级分类ID
            "name": "xxx",			// 分类名称
            "show": true,			// 是否展示
        }
    },
    "msg": ""
}