Code Monkey home page Code Monkey logo

go-movies's Introduction

GoMovies

golang + redis 实现的影站(低级爬虫)。无管理后台,效果站:http://117.50.186.143:6003 支持手机端访问播放

Github地址

https://github.com/hezhizheng/go-movies

features

  • 使用 Golang embed 内嵌静态资源(html、js、css等),运行只依赖编译后可执行的二进制文件与redis
  • 支持docker启动方式
  • 简单资源分类、搜索的支持
  • 内置自动爬虫、自动更新最新资源的定时任务,基本满足日常看片需求。
  • 钉钉机器人通知

Tip

  • 暂时只维护API请求版本 API接口说明,后续可能追加其他资源支持
  • API版本首次启动会全量请求并存储到redis,之后每小时定时爬取最近更新的影视资源

目录结构

|-- Dockerfile
|-- LICENSE.txt
|-- config
|   |-- app.go
|   `-- app.go.backup                        #程序配置文件
|-- controller                               #controller层,基本的页面渲染
|   |-- DebugController.go
|   |-- IndexController.go
|   `-- SpiderController.go
|-- docker-compose.yml
|-- go.mod
|-- go.sum
|-- main.go
|-- models                                   # 定义一些redis查询的方法
|   |-- Category.go
|   |-- Movies.go
|   `-- readme.md
|-- readme.md
|-- routes
|   `-- route.go
|-- runner.conf                              # fresh 配置文件
|-- services                                 # 普通业务处理类
|   |-- CategoryService.go
|   |-- MoviesService.go
|   `-- readme.md
|-- static2                                  # js、css、image等静态资源文件夹
|-- utils                                    # 一些工具类
|   |-- Cron.go
|   |-- Dingrobot.go
|   |-- Helper.go
|   |-- JsonUtil.go
|   |-- Pagination.go
|   |-- RedisUtil.go
|   |-- Spider.go
|   |-- SpiderTask.go
|   `-- spider                               # 爬虫api版主要功能代码
|       |-- SpiderTaskPolicy.go
|       `-- tian_kong
|           |-- CategoriesStr.go
|           `-- SpiderApi.go
`-- views                                    # html模板目录
    `-- tmpl
        `-- temp_global_var.go               # 定义 embed 的全局变量跟一些模板调用的函数

首页效果

使用安装 (go version >= 1.18)

配置说明

参数名 描述
app.spider_path 爬虫路由
app.spider_path_name 爬虫路由名称
app.debug_path debug的路由
app.debug_path_name debug的路由名称
cron.timing_spider 定时爬虫的CRON表达式
ding.access_token 钉钉机器人token
app.spider_mod 接口请求方式,async(使用goroutine并发请求数据,快但会被频控,导致请求超时)、sync(不使用goroutine请求,慢但比较稳定,如使用async出现请求超时,建议改为sync模式) (默认为async)
app.spider_mod 开发模式建议设置为true 避免修改静态资源需要重启服务
# 下载
git clone https://github.com/hezhizheng/go-movies

# 进入目录
cd go-movies

# 配置文件(默认使用redis db10的库,可自行修改app.go中的配置)
cp ./config/app.go.backup ./config/app.go

# 启动 (首次启动会自动开启爬虫任务)
go run main.go 
or
# 安装 fresh 工具
fresh

# 如安装依赖包失败,请使用代理
export GOPROXY=https://goproxy.io,direct
or
export GOPROXY=https://goproxy.cn,direct

访问
http://127.0.0.1:8899

开启爬虫

  • 已内置定时爬虫,首次全量请求之后,每小时定时爬取最近更新的影视资源(可自行修改配置文件cron.timing_spider表达式来控制间隔)
  • 主动运行:直接访问链接 http://127.0.0.1:8899/movies-spider
  • 耗时:具体时间受目标网站/接口的响应速度影响

Tools

编译可执行文件(跨平台)

# 用法参考 https://github.com/mitchellh/gox
# 生成文件可直接执行 
gox -osarch="windows/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
gox -osarch="darwin/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
gox -osarch="linux/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"
  • 提供win64的已编译的文件下载 release

使用请确保redis为开启状态,默认使用 DB10,启动成功之后会自动执行爬虫,可自行访问 http://127.0.0.1:8899/movies-spider 进行爬虫

img

Docker 部署(使用docker-compose可直接忽略该步骤)

# 安装 redis 镜像(已有可以忽略) 
sudo docker pull redis:latest

# 启动redis容器
# 根据实际情况分配端口 -p 宿主机端口:容器端口
sudo docker run -itd --name redis-test -p 6379:6379 redis

# 修改 app.go 的redis 连接地址为容器名称
"addr":"redis-test"

# 编译go-movies
gox -osarch="linux/amd64" -ldflags "-s -w" -gcflags="all=-trimpath=${PWD}" -asmflags="all=-trimpath=${PWD}"

# 构造镜像
sudo docker build -t go-movies-docker-scratch .

# 启动容器
sudo docker run --link redis-test:redis -p 8899:8899 -d go-movies-docker-scratch

docker-compose 一键启动

# 修改 app.go 的redis 连接地址为容器名称,这里需要跟docker-compose.yml中保持一致
"addr":"redis-test"

# 编译go-movies
gox -osarch="linux/amd64" -ldflags "-s -w"

# 运行
sudo docker-compose up -d

打开游览器访问 http://127.0.0.1:8899 即可看见网站效果

TODO

Other

许多Go的原理还没弄懂,有精力会慢慢深究下。写得很潦草,多多包涵。

🔋 JetBrains 开源证书支持

go-movies 项目 一直以来都是在 JetBrains 公司旗下的 GoLand 集成开发环境中进行开发,基于 free JetBrains Open Source license(s) 正版免费授权,在此表达我的谢意。

License

MIT

go-movies's People

Contributors

bluehtml avatar hezhizheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-movies's Issues

找不到静态资源,返回 404 错误

你好,不管是 使用您编译好的 win程序,还是 我自己编译的linux程序,运行后页面的样式都是乱的。

打开控制台后,发现静态资源找不到,返回404错误。如下图:

image

image

关于接口问题

我想问一下就是接口的api格式是怎么获得的
其他的视频资源站格式也是一样的吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.