No description
- Go 100%
- 添加了详细的项目目录结构说明 - 补充了完整的安装步骤和代码示例 - 更新了环境变量配置说明 - 添加了搜索接口的详细使用示例和返回结果 - 修正了API请求格式和字段说明 |
||
|---|---|---|
| .idea | ||
| entity | ||
| .env | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
| redis.go | ||
| tmdb.go | ||
MediaSearch
基于 Go 语言的媒体资源搜索服务,集成 TMDB(The Movie Database)API,支持电影和电视剧的搜索功能,并提供 Redis 缓存以提高查询效率。
功能特性
- 🔍 TMDB 搜索:支持多类型媒体资源搜索(电影、电视剧)
- 💾 Redis 缓存:自动缓存搜索结果,减少 API 请求
- 🌏 中文支持:返回中文本地化的搜索结果
- 🖼️ 图片链接补全:自动生成完整的海报和背景图片 URL
- 🚀 高性能:基于 Gin 框架的轻量级 HTTP 服务
项目结构
MediaSearch/
├── main.go # 主程序入口,HTTP 路由配置
├── tmdb.go # TMDB API 对接与数据处理
├── redis.go # Redis 连接与操作封装
├── entity/ # 数据模型定义
│ └── TehMovieDB.go
├── .env # 环境变量配置
├── go.mod # Go 模块依赖管理
└── README.md # 项目文档
环境要求
- Go 1.26+
- Redis 服务器
- TMDB API Key(需自行申请)
安装步骤
1. 克隆项目
git clone https://git.1v.fit/xiaoman1221/MediaSearch
cd MediaSearch
go mod tidy
go run main.go
2. 安装依赖
3. 配置环境变量
编辑 .env 文件,配置以下环境变量:
HOST=0.0.0.0
PORT=8080
REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASS=<REDIS_PASSWORD> REDIS_DB=0
TMDB_API_KEY=<YOUR_TMDB_API_KEY>
⚠️ 重要:请替换
TMDB_API_KEY为你自己的 API 密钥
访问 TMDB 申请 API Key
4. 运行服务
服务启动后,访问 http://localhost:8080
API 接口
搜索媒体资源
请求格式: GET /api/v1/search/tmdb/流浪地球 返回结果:
{"page":1,"results":[{"backdrop_path":"/94cS0mzODEoNIXFT7nhPcI8V4IJ.jpg","full_backdrop_url":"https://image.tmdb.org/t/p/w1280/94cS0mzODEoNIXFT7nhPcI8V4IJ.jpg","full_poster_url":"https://image.tmdb.org/t/p/w780/cAS2e9hUwu6Ydsx7byXj16H00Ai.jpg","genre_ids":[878,28,12],"id":842675,"media_type":"movie","original_title":"流浪地球2","overview":"在并不遥远的未来,太阳急速衰老与膨胀,再过几百年整个太阳系将被它吞噬毁灭。为了应对这场史无前例的危机,地球各国放下芥蒂,成立联合政府,试图寻找人类存续的出路。通过摸索与考量,最终推着地球逃出太阳系的“移山计划”获得压倒性胜利。人们着手建造上万台巨大的行星发动机,带着地球踏上漫漫征程。满腔赤诚的刘培强和韩朵朵历经层层考验成为航天员大队的一员,并由此相知相恋。但是漫漫征途的前方,仿佛有一股神秘的力量不断破坏者人类的自救计划。看似渺小的刘培强、量子科学家图恒宇、联合政府中国代表周喆直以及无数平凡的地球人,构成了这项伟大计划的重要一环……本片根据刘慈欣同名科幻小说改编。","popularity":4.4009,"poster_path":"/cAS2e9hUwu6Ydsx7byXj16H00Ai.jpg","release_date":"2023-01-22","title":"流浪地球2","vote_average":7.287,"vote_count":697},{"backdrop_path":"/wIrqeoJHYtZmneqIufPtcOHMjOg.jpg","full_backdrop_url":"https://image.tmdb.org/t/p/w1280/wIrqeoJHYtZmneqIufPtcOHMjOg.jpg","full_poster_url":"https://image.tmdb.org/t/p/w780/tXuQCgx69DxVgeTsU0TkruR3i9O.jpg","genre_ids":[878,28,18],"id":535167,"media_type":"movie","original_title":"流浪地球","overview":"近未来,科学家们发现太阳急速衰老膨胀,短时间内包括地球在内的整个太阳系都将被太阳所吞没。为了自救,人类提出一个名为“流浪地球”的大胆计划,即倾全球之力在地球表面建造上万座发动机和转向发动机,推动地球离开太阳系,用2500年的时间奔往另外一个栖息之地。中国航天员刘培强在儿子刘启四岁那年前往国际空间站,和国际同侪肩负起领航者的重任。转眼刘启长大,他带着妹妹朵朵偷偷跑到地表,偷开外公韩子昂的运输车,结果不仅遭到逮捕,还遭遇了全球发动机停摆的事件。为了修好发动机,阻止地球坠入木星,全球开始展开饱和式营救,连刘启他们的车也被强征加入。在与时间赛跑的过程中,无数的人前仆后继,奋不顾身,只为延续百代子孙生存的希望……","popularity":5.602,"poster_path":"/tXuQCgx69DxVgeTsU0TkruR3i9O.jpg","release_date":"2019-02-05","title":"流浪地球","vote_average":6.641,"vote_count":1120},{"backdrop_path":"/5t0NhBWc56c1zvQIe6DkiE55qp3.jpg","full_backdrop_url":"https://image.tmdb.org/t/p/w1280/5t0NhBWc56c1zvQIe6DkiE55qp3.jpg","full_poster_url":"https://image.tmdb.org/t/p/w780/kzRs3qB2Hd6gPmL8NKSHFs8E8CK.jpg","genre_ids":[878],"id":1381967,"media_type":"movie","original_title":"流浪地球:飞跃2020特别版","overview":"太阳即将毁灭,人类在地球表面建造出巨大的推进器,寻找新家园。然而宇宙之路危机四伏,为了拯救地球,为了人类能在漫长的2500年后抵达新家园,流浪地球时代的年轻人挺身而出,展开争分夺秒的生死之战","popularity":1.1868,"poster_path":"/kzRs3qB2Hd6gPmL8NKSHFs8E8CK.jpg","release_date":"2020-11-26","title":"流浪地球:飞跃2020特别版","vote_average":9,"vote_count":1},{"backdrop_path":"/n3XvbFpRbTSu4olOwu0Rjuirrdv.jpg","full_backdrop_url":"https://image.tmdb.org/t/p/w1280/n3XvbFpRbTSu4olOwu0Rjuirrdv.jpg","full_poster_url":"https://image.tmdb.org/t/p/w780/zQP6iW5Ya4MyMRXl0t28ckV1spp.jpg","genre_ids":[99],"id":1328632,"media_type":"movie","original_title":"流浪地球2:再次冒险","overview":" 该纪录片将带观众深入探索《流浪地球2》的幕后世界:导演、制片人、美术及特效团队等电影核心主创将亲自讲述这部科幻巨制的制作过程与他们的心路历程,观众将看到他们在追求电影艺术极致的同时,如何推动中国电影工业化进程、为中国科幻电影的未来开辟新道路。\r 此外,纪录片还特别邀请了中国知名科幻学者、作家回顾中国科幻的发展历程——从早期的科幻小说到如今的科幻电影,观众将了解到百年时光中,中国科幻从萌芽到茁壮成长的过程。这是一次不容错过的中国科幻电影冒险之旅,也是一次对中国科幻未来的深情展望。","popularity":0.917,"poster_path":"/zQP6iW5Ya4MyMRXl0t28ckV1spp.jpg","release_date":"2024-09-15","title":"流浪地球2:再次冒险","vote_average":7,"vote_count":2},{"backdrop_path":"/cCzMePim8EXRHExizmBhJC063Ju.jpg","full_backdrop_url":"https://image.tmdb.org/t/p/w1280/cCzMePim8EXRHExizmBhJC063Ju.jpg","full_poster_url":"https://image.tmdb.org/t/p/w780/6J47ApJVOmNrHJezrxnRaTDXBfx.jpg","genre_ids":[878,28,12],"id":1231322,"media_type":"movie","original_title":"流浪地球3","overview":"太阳即将毁灭,人类在地球表面建造出巨大的推进器,寻找新的家园。然而宇宙之路危机四伏,为了拯救地球,流浪地球时代的年轻人第三次挺身而出,展开争分夺秒的生死之战……","popularity":1.8513,"poster_path":"/6J47ApJVOmNrHJezrxnRaTDXBfx.jpg","release_date":"2027-02-06","title":"流浪地球3","vote_average":0,"vote_count":0},{"backdrop_path":"","full_backdrop_url":"","full_poster_url":"https://image.tmdb.org/t/p/w780/xBbmSszVuZEFWt4AUZTQvEzd36t.jpg","genre_ids":[],"id":276672,"media_type":"tv","original_title":"","overview":"因为太阳氦闪爆炸的原因,地球面临即将被毁灭的风险,为了拯救地球拯救全人类,在男主的带领下,华夏开始实行流浪地球计划,就在氦三发动机研发成功的下一刻,由于米国隐瞒太阳爆炸提前50年的消息,导致所有工作前功尽弃,太阳提前爆炸,整个地球除了米国提前逃跑所有人都全部被毁灭,男主意外重生回到年轻时候,研发出氦三发动机后带着发动机前往联合国大会,意图改变已经投票结束的结果,因为米国人根本就没打算拯救所有人,所以为了拯救地球,男主必须说服他们实行流浪地球计划,但却受到米国以及整个西方世界的层层阻拦和故意抹黑,质疑男主所带来的氦三发动机是假的,根本不能启动,男主开始一步步自证,可是因为启动氦三发动机需要巨大能量,没有辅助器件无法稳定启动,关键是个钱兴国带着华夏志愿军前往冰封启动辅助器件,虽然启动成功但是全员壮烈牺牲,就在男主启动成功之后,依旧被米国人质疑全都是华夏的魔术,都是华夏营造的假象,可就在男主进一步自证氦三发动机和流浪地球计划的可行性后,米国竟然厚着脸皮想要把氦三发动机占为己有,却不想男主早就有所准备藏好了炸弹......","popularity":0.0286,"poster_path":"/xBbmSszVuZEFWt4AUZTQvEzd36t.jpg","release_date":"","title":"","vote_average":0,"vote_count":0}],"total_pages":1,"total_results":6}
请求示例: curl -X GET "http://localhost:8080/api/v1/search/tmdb/流浪地球" -H "accept: application/json"
字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | TMDB 唯一标识符 |
| title | string | 标题(中文) |
| original_title | string | 原始标题 |
| overview | string | 剧情简介 |
| poster_path | string | 海报图片相对路径 |
| backdrop_path | string | 背景图片相对路径 |
| full_poster_url | string | 完整海报图片 URL(w780) |
| full_backdrop_url | string | 完整背景图片 URL(original) |
| release_date | string | 上映日期 |
| vote_average | float64 | 评分(0-10) |
| vote_count | int | 投票数 |
| popularity | float64 | 热度指数 |
| media_type | string | 媒体类型(movie/tv) |
技术栈
- Web 框架:Gin
- 缓存:go-redis
- 环境配置:godotenv
- API:TMDB API v3
开发说明
图片尺寸选项
TMDB 提供多种图片尺寸,当前配置:
- 海报图片:
w780(780px 宽度) - 背景图片:
original(原始分辨率)
可选尺寸:
w92,w154,w185,w342,w500,w780,w1280,original
Redis 数据存储
- 所有搜索结果会自动缓存到 Redis
- 缓存键名格式:
ms_{搜索关键词} - 数据以 JSON 格式存储,支持自动序列化和反序列化
注意事项
-
TMDB API 限制:
- 每 24 小时最多 500 次请求
- 建议充分利用 Redis 缓存减少请求次数
-
错误处理:
- Redis 连接失败会返回错误信息
- TMDB API 调用失败会返回相应的错误描述
-
生产环境部署:
- 请勿将
.env文件提交到版本控制 - 建议使用环境变量或密钥管理服务存储敏感信息
- 请勿将
License
MIT License
联系方式
如有问题或建议,请提交 Issue 或 Pull Request。